@ -6,7 +6,6 @@ import (
"fmt"
"github.com/pkg/errors"
"io"
"math"
"os"
"path/filepath"
"regexp"
@ -44,7 +43,7 @@ func (c *Client) GetContactByUsername(username string) (*client.Chat, *client.Us
return nil , nil , err
}
return c . GetContactByID ( chat . I d , chat )
return c . GetContactByID ( chat . I D , chat )
}
// GetContactByID gets user and chat information from cache (or tries to retrieve it, if missing)
@ -58,18 +57,13 @@ func (c *Client) GetContactByID(id int64, chat *client.Chat) (*client.Chat, *cli
var ok bool
var err error
if id <= math . MaxInt32 && id >= math . MinInt32 {
userID := int32 ( id )
user , ok = c . cache . GetUser ( userID )
if ! ok && userID > 0 {
user , ok = c . cache . GetUser ( id )
if ! ok && id > 0 {
user , err = c . client . GetUser ( & client . GetUserRequest {
UserId : userID ,
UserID : id ,
} )
if err != nil {
return nil , nil , err
}
c . cache . SetUser ( userID , user )
if err == nil {
c . cache . SetUser ( id , user )
}
}
@ -77,7 +71,7 @@ func (c *Client) GetContactByID(id int64, chat *client.Chat) (*client.Chat, *cli
if ! ok {
if chat == nil {
cacheChat , err = c . client . GetChat ( & client . GetChatRequest {
ChatI d : id ,
ChatI D : id ,
} )
if err != nil {
// error is irrelevant if the user was found successfully
@ -200,11 +194,11 @@ func (c *Client) formatContact(chatID int64) string {
var str string
if chat != nil {
str = fmt . Sprintf ( "%s (%v)" , chat . Title , chat . I d )
str = fmt . Sprintf ( "%s (%v)" , chat . Title , chat . I D )
} else if user != nil {
username := user . Username
if username == "" {
username = strconv . FormatInt ( int64 ( user . Id ) , 10 )
username = strconv . FormatInt ( user . ID , 10 )
}
str = fmt . Sprintf ( "%s %s (%v)" , user . FirstName , user . LastName , username )
@ -221,8 +215,8 @@ func (c *Client) formatMessage(chatID int64, messageID int64, preview bool, mess
var err error
if message == nil {
message , err = c . client . GetMessage ( & client . GetMessageRequest {
ChatI d : chatID ,
MessageI d : messageID ,
ChatI D : chatID ,
MessageI D : messageID ,
} )
if err != nil {
return fmt . Sprintf ( "<error fetching message: %s>" , err . Error ( ) )
@ -234,7 +228,16 @@ func (c *Client) formatMessage(chatID int64, messageID int64, preview bool, mess
}
var str strings . Builder
str . WriteString ( fmt . Sprintf ( "%v | %s | " , message . Id , c . formatContact ( int64 ( message . SenderUserId ) ) ) )
var senderId int64
switch message . Sender . MessageSenderType ( ) {
case client . TypeMessageSenderUser :
senderUser , _ := message . Sender . ( * client . MessageSenderUser )
senderId = senderUser . UserID
case client . TypeMessageSenderChat :
senderChat , _ := message . Sender . ( * client . MessageSenderChat )
senderId = senderChat . ChatID
}
str . WriteString ( fmt . Sprintf ( "%v | %s | " , message . ID , c . formatContact ( senderId ) ) )
if ! preview {
str . WriteString (
time . Unix ( int64 ( message . Date ) , 0 ) .
@ -276,7 +279,7 @@ func (c *Client) formatContent(file *client.File, filename string) string {
filename ,
file . Size / 1024 ,
c . content . Link ,
fmt . Sprintf ( "%x" , sha256 . Sum256 ( [ ] byte ( file . Remote . I d ) ) ) ,
fmt . Sprintf ( "%x" , sha256 . Sum256 ( [ ] byte ( file . Remote . I D ) ) ) ,
filepath . Ext ( filename ) ,
)
}
@ -295,17 +298,17 @@ func (c *Client) messageToText(message *client.Message) string {
addMembers , _ := message . Content . ( * client . MessageChatAddMembers )
text := "invited "
if len ( addMembers . MemberUserI d s) > 0 {
text += c . formatContact ( int64 ( addMembers . MemberUserIds [ 0 ] ) )
if len ( addMembers . MemberUserI D s) > 0 {
text += c . formatContact ( addMembers . MemberUserIDs [ 0 ] )
}
return text
case client . TypeMessageChatDeleteMember :
deleteMember , _ := message . Content . ( * client . MessageChatDeleteMember )
return "kicked " + c . formatContact ( int64 ( deleteMember . UserId ) )
return "kicked " + c . formatContact ( deleteMember . UserID )
case client . TypeMessagePinMessage :
pinMessage , _ := message . Content . ( * client . MessagePinMessage )
return "pinned message: " + c . formatMessage ( message . ChatI d, pinMessage . MessageId , false , nil )
return "pinned message: " + c . formatMessage ( message . ChatI D, pinMessage . MessageID , false , nil )
case client . TypeMessageChatChangeTitle :
changeTitle , _ := message . Content . ( * client . MessageChatChangeTitle )
return "chat title set to: " + changeTitle . Title
@ -393,7 +396,7 @@ func (c *Client) contentToFilename(content client.MessageContent) (*client.File,
sizes := photo . Photo . Sizes
if len ( sizes ) > 1 {
file := sizes [ len ( sizes ) - 1 ] . Photo
return file , strconv . FormatInt ( int64 ( file . Id ) , 10 ) + ".jpg"
return file , strconv . FormatInt ( file . ID , 10 ) + ".jpg"
}
return nil , ""
case client . TypeMessageAudio :
@ -419,16 +422,32 @@ func (c *Client) messageToPrefix(message *client.Message, fileString string) str
} else {
directionChar = "⬅ "
}
prefix = append ( prefix , directionChar + strconv . FormatInt ( message . I d , 10 ) )
prefix = append ( prefix , directionChar + strconv . FormatInt ( message . I D , 10 ) )
// show sender in group chats
if message . ChatId < 0 && message . SenderUserId != 0 {
prefix = append ( prefix , c . formatContact ( int64 ( message . SenderUserId ) ) )
if message . ChatID < 0 && message . Sender != nil {
var senderId int64
switch message . Sender . MessageSenderType ( ) {
case client . TypeMessageSenderUser :
senderUser , _ := message . Sender . ( * client . MessageSenderUser )
senderId = senderUser . UserID
case client . TypeMessageSenderChat :
senderChat , _ := message . Sender . ( * client . MessageSenderChat )
senderId = senderChat . ChatID
}
prefix = append ( prefix , c . formatContact ( senderId ) )
}
if message . ForwardInfo != nil {
switch message . ForwardInfo . Origin . MessageForwardOriginType ( ) {
case client . TypeMessageForwardOriginUser :
originUser := message . ForwardInfo . Origin . ( * client . MessageForwardOriginUser )
prefix = append ( prefix , "fwd: " + c . formatContact ( int64 ( originUser . SenderUserId ) ) )
prefix = append ( prefix , "fwd: " + c . formatContact ( originUser . SenderUserID ) )
case client . TypeMessageForwardOriginChat :
originChat := message . ForwardInfo . Origin . ( * client . MessageForwardOriginChat )
var signature string
if originChat . AuthorSignature != "" {
signature = fmt . Sprintf ( " (%s)" , originChat . AuthorSignature )
}
prefix = append ( prefix , "fwd: " + c . formatContact ( originChat . SenderChatID ) + signature )
case client . TypeMessageForwardOriginHiddenUser :
originUser := message . ForwardInfo . Origin . ( * client . MessageForwardOriginHiddenUser )
prefix = append ( prefix , fmt . Sprintf ( "fwd: anonymous (%s)" , originUser . SenderName ) )
@ -438,12 +457,12 @@ func (c *Client) messageToPrefix(message *client.Message, fileString string) str
if channel . AuthorSignature != "" {
signature = fmt . Sprintf ( " (%s)" , channel . AuthorSignature )
}
prefix = append ( prefix , "fwd: " + c . formatContact ( channel . ChatI d ) + signature )
prefix = append ( prefix , "fwd: " + c . formatContact ( channel . ChatI D ) + signature )
}
}
// reply to
if message . ReplyToMessageI d != 0 {
prefix = append ( prefix , "reply: " + c . formatMessage ( message . ChatI d, message . ReplyToMessageId , true , nil ) )
if message . ReplyToMessageI D != 0 {
prefix = append ( prefix , "reply: " + c . formatMessage ( message . ChatI D, message . ReplyToMessageID , true , nil ) )
}
if fileString != "" {
prefix = append ( prefix , "file: " + fileString )
@ -484,8 +503,8 @@ func (c *Client) ProcessOutgoingMessage(chatID int64, text string, messageID int
}
c . client . EditMessageText ( & client . EditMessageTextRequest {
ChatI d : chatID ,
MessageI d : messageID ,
ChatI D : chatID ,
MessageI D : messageID ,
InputMessageContent : message ,
} )
} else {
@ -500,7 +519,7 @@ func (c *Client) ProcessOutgoingMessage(chatID int64, text string, messageID int
var file * client . InputFileRemote
if c . content . Upload != "" && strings . HasPrefix ( text , c . content . Upload ) {
file = & client . InputFileRemote {
I d : text ,
I D : text ,
}
}
@ -531,8 +550,8 @@ func (c *Client) ProcessOutgoingMessage(chatID int64, text string, messageID int
}
_ , err := c . client . SendMessage ( & client . SendMessageRequest {
ChatI d : chatID ,
ReplyToMessageI d : reply ,
ChatI D : chatID ,
ReplyToMessageI D : reply ,
InputMessageContent : message ,
} )
if err != nil {