|
|
|
@ -30,6 +30,7 @@ var spaceRegex = regexp.MustCompile(`\s+`)
|
|
|
|
|
var replyRegex = regexp.MustCompile("\\A>>? ?([0-9]+)\\n")
|
|
|
|
|
|
|
|
|
|
const newlineChar string = "\n"
|
|
|
|
|
const messageHeaderSeparator string = " | "
|
|
|
|
|
|
|
|
|
|
// GetContactByUsername resolves username to user id retrieves user and chat information
|
|
|
|
|
func (c *Client) GetContactByUsername(username string) (*client.Chat, *client.User, error) {
|
|
|
|
@ -710,7 +711,15 @@ func (c *Client) contentToFile(content client.MessageContent) (*client.File, *cl
|
|
|
|
|
return nil, nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (c *Client) messageToPrefix(message *client.Message, previewString string, fileString string, replyMsg *client.Message) string {
|
|
|
|
|
func (c *Client) countCharsInLines(lines *[]string) (count int) {
|
|
|
|
|
for _, line := range *lines {
|
|
|
|
|
count += len(line)
|
|
|
|
|
}
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (c *Client) messageToPrefix(message *client.Message, previewString string, fileString string, replyMsg *client.Message) (string, int, int) {
|
|
|
|
|
var replyStart, replyEnd int
|
|
|
|
|
prefix := []string{}
|
|
|
|
|
// message direction
|
|
|
|
|
var directionChar string
|
|
|
|
@ -734,7 +743,10 @@ func (c *Client) messageToPrefix(message *client.Message, previewString string,
|
|
|
|
|
}
|
|
|
|
|
// reply to
|
|
|
|
|
if message.ReplyToMessageId != 0 {
|
|
|
|
|
prefix = append(prefix, "reply: "+c.formatMessage(message.ChatId, message.ReplyToMessageId, true, replyMsg))
|
|
|
|
|
replyStart = c.countCharsInLines(&prefix) + (len(prefix) - 1) * len(messageHeaderSeparator)
|
|
|
|
|
replyLine := "reply: "+c.formatMessage(message.ChatId, message.ReplyToMessageId, true, replyMsg)
|
|
|
|
|
prefix = append(prefix, replyLine)
|
|
|
|
|
replyEnd = replyStart + len(replyLine) + len(messageHeaderSeparator)
|
|
|
|
|
}
|
|
|
|
|
if message.ForwardInfo != nil {
|
|
|
|
|
prefix = append(prefix, "fwd: "+c.formatForward(message.ForwardInfo))
|
|
|
|
@ -748,7 +760,7 @@ func (c *Client) messageToPrefix(message *client.Message, previewString string,
|
|
|
|
|
prefix = append(prefix, "file: "+fileString)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return strings.Join(prefix, " | ")
|
|
|
|
|
return strings.Join(prefix, messageHeaderSeparator), replyStart, replyEnd
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (c *Client) ensureDownloadFile(file *client.File) *client.File {
|
|
|
|
@ -805,19 +817,26 @@ func (c *Client) ProcessIncomingMessage(chatId int64, message *client.Message) {
|
|
|
|
|
}
|
|
|
|
|
text = oob
|
|
|
|
|
} else if !c.Session.RawMessages {
|
|
|
|
|
var prefix strings.Builder
|
|
|
|
|
prefix.WriteString(c.messageToPrefix(message, previewName, fileName, replyMsg))
|
|
|
|
|
var newText strings.Builder
|
|
|
|
|
|
|
|
|
|
prefix, replyStart, replyEnd := c.messageToPrefix(message, previewName, fileName, replyMsg)
|
|
|
|
|
newText.WriteString(prefix)
|
|
|
|
|
if reply != nil {
|
|
|
|
|
reply.Start = uint64(replyStart)
|
|
|
|
|
reply.End = uint64(replyEnd)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if text != "" {
|
|
|
|
|
// \n if it is groupchat and message is not empty
|
|
|
|
|
if chatId < 0 {
|
|
|
|
|
prefix.WriteString("\n")
|
|
|
|
|
newText.WriteString("\n")
|
|
|
|
|
} else if chatId > 0 {
|
|
|
|
|
prefix.WriteString(" | ")
|
|
|
|
|
newText.WriteString(" | ")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
prefix.WriteString(text)
|
|
|
|
|
newText.WriteString(text)
|
|
|
|
|
}
|
|
|
|
|
text = prefix.String()
|
|
|
|
|
text = newText.String()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|