Refactor parent id detection

This commit is contained in:
Alexander Korelskiy
2022-03-30 11:47:01 +03:00
parent 72857fbedf
commit aab4464b89
2 changed files with 35 additions and 38 deletions

View File

@@ -443,21 +443,8 @@ func (b *Btelegram) handleEdit(msg *config.Message, chatid int64) (string, error
}
// handleUploadFile handles native upload of files
func (b *Btelegram) handleUploadFile(msg *config.Message, chatid int64) (string, error) {
var (
media []interface{}
parentID int
resId string
)
if msg.ParentID != "" {
pid, err := strconv.Atoi(msg.ParentID)
if err != nil {
return "", err
}
parentID = pid
}
func (b *Btelegram) handleUploadFile(msg *config.Message, chatid int64, parentID int) (string, error) {
var media []interface{}
for _, f := range msg.Extra["file"] {
fi := f.(config.FileInfo)
file := tgbotapi.FileBytes{
@@ -493,7 +480,7 @@ func (b *Btelegram) handleUploadFile(msg *config.Message, chatid int64) (string,
if err != nil {
return "", err
}
resId = strconv.Itoa(res.MessageID)
return strconv.Itoa(res.MessageID), nil
default:
dc := tgbotapi.NewInputMediaDocument(file)
if fi.Comment != "" {
@@ -504,19 +491,10 @@ func (b *Btelegram) handleUploadFile(msg *config.Message, chatid int64) (string,
}
if len(media) > 0 {
mg := tgbotapi.MediaGroupConfig{ChatID: chatid, ChannelUsername: msg.Username, Media: media}
if parentID != 0 {
mg.ReplyToMessageID = parentID
}
messages, err := b.c.SendMediaGroup(mg)
if err != nil {
return "", err
}
// get first message id
resId = strconv.Itoa(messages[0].MessageID)
return b.sendMediaFiles(msg, chatid, parentID, media)
}
return resId, nil
return "", nil
}
func (b *Btelegram) handleQuote(message, quoteNick, quoteMessage string) string {

View File

@@ -115,16 +115,21 @@ func (b *Btelegram) Send(msg config.Message) (string, error) {
msg.Text = fmt.Sprintf("[reply]: %s", msg.Text)
}
var parentID int
if msg.ParentID != "" {
parentID, _ = b.intParentID(msg.ParentID)
}
// Upload a file if it exists
if msg.Extra != nil {
for _, rmsg := range helper.HandleExtra(&msg, b.General) {
if _, msgErr := b.sendMessage(chatid, rmsg.Username, rmsg.Text, msg.ParentID); msgErr != nil {
if _, msgErr := b.sendMessage(chatid, rmsg.Username, rmsg.Text, parentID); msgErr != nil {
b.Log.Errorf("sendMessage failed: %s", msgErr)
}
}
// check if we have files to upload (from slack, telegram or mattermost)
if len(msg.Extra["file"]) > 0 {
return b.handleUploadFile(&msg, chatid)
return b.handleUploadFile(&msg, chatid, parentID)
}
}
@@ -138,7 +143,7 @@ func (b *Btelegram) Send(msg config.Message) (string, error) {
// Ignore empty text field needs for prevent double messages from whatsapp to telegram
// when sending media with text caption
if msg.Text != "" {
return b.sendMessage(chatid, msg.Username, msg.Text, msg.ParentID)
return b.sendMessage(chatid, msg.Username, msg.Text, parentID)
}
return "", nil
@@ -152,16 +157,10 @@ func (b *Btelegram) getFileDirectURL(id string) string {
return res
}
func (b *Btelegram) sendMessage(chatid int64, username, text, parentID string) (string, error) {
func (b *Btelegram) sendMessage(chatid int64, username, text string, parentID int) (string, error) {
m := tgbotapi.NewMessage(chatid, "")
m.Text, m.ParseMode = TGGetParseMode(b, username, text)
if parentID != "" {
rmid, err := strconv.Atoi(parentID)
if err != nil {
return "", err
}
m.ReplyToMessageID = rmid
}
m.ReplyToMessageID = parentID
m.DisableWebPagePreview = b.GetBool("DisableWebPagePreview")
res, err := b.c.Send(m)
@@ -171,6 +170,26 @@ func (b *Btelegram) sendMessage(chatid int64, username, text, parentID string) (
return strconv.Itoa(res.MessageID), nil
}
// sendMediaFiles native upload media files via media group
func (b *Btelegram) sendMediaFiles(msg *config.Message, chatid int64, parentID int, media []interface{}) (string, error) {
mg := tgbotapi.MediaGroupConfig{ChatID: chatid, ChannelUsername: msg.Username, Media: media, ReplyToMessageID: parentID}
messages, err := b.c.SendMediaGroup(mg)
if err != nil {
return "", err
}
// return first message id
return strconv.Itoa(messages[0].MessageID), nil
}
// intParentID return integer parent id for telegram message
func (b *Btelegram) intParentID(parentID string) (int, error) {
pid, err := strconv.Atoi(parentID)
if err != nil {
return 0, err
}
return pid, nil
}
func (b *Btelegram) cacheAvatar(msg *config.Message) (string, error) {
fi := msg.Extra["file"][0].(config.FileInfo)
/* if we have a sha we have successfully uploaded the file to the media server,