Skip to content
Snippets Groups Projects
Commit f77d1884 authored by Ophestra's avatar Ophestra
Browse files

move file handling into its own function

parent 5705675f
Branches
No related tags found
No related merge requests found
......@@ -100,7 +100,7 @@ func respondTelegram(update tgbotapi.Update) {
}
return
}
header, _ := makeHeader(update.EditedMessage, true)
header, _ := telegramMakeHeader(update.EditedMessage, true)
content = header + content
}
if _, err := session.ChannelMessageEdit(reference.ChannelID, reference.MessageID, escape(content)); err != nil {
......@@ -163,134 +163,33 @@ func respondTelegram(update tgbotapi.Update) {
}
}
header, has := makeHeader(update.Message, false)
header, has := telegramMakeHeader(update.Message, false)
if update.Message.Photo != nil {
var file *discordgo.File
p := *update.Message.Photo
info := p[len(p)-1]
var url string
if u, err := botAPI.GetFileDirectURL(info.FileID); err != nil {
msg := tgbotapi.NewMessage(update.Message.Chat.ID, "error getting URL")
msg.ReplyToMessageID = update.Message.MessageID
log.Printf("error getting URL of %s: %s", info.FileID, err)
_, _ = botAPI.Send(msg)
return
} else {
url = u
}
if resp, err := http.Get(url); err != nil {
msg := tgbotapi.NewMessage(update.Message.Chat.ID, "error getting file")
msg.ReplyToMessageID = update.Message.MessageID
log.Printf("error getting file %s: %s", info.FileID, err)
_, _ = botAPI.Send(msg)
return
} else {
file = &discordgo.File{
Name: "image.jpg",
ContentType: "image/jpeg",
Reader: resp.Body,
}
defer func() {
if err = resp.Body.Close(); err != nil {
log.Printf("error closing request body: %s", err)
}
}()
}
if message, err := session.ChannelMessageSendComplex(strconv.Itoa(dc.ID), &discordgo.MessageSend{
Content: escape(header + update.Message.Caption),
File: file,
Reference: reference,
}); err != nil {
msg := tgbotapi.NewMessage(update.Message.Chat.ID, "error relaying message")
msg.ReplyToMessageID = update.Message.MessageID
log.Printf("error relaying message %v: %s", update.Message.MessageID, err)
_, _ = botAPI.Send(msg)
return
} else {
dMessageID = message.ID
dChannelID = message.ChannelID
dGuildID = message.GuildID
}
messageReference[update.Message.MessageID] = &discordgo.MessageReference{
MessageID: dMessageID,
ChannelID: dChannelID,
GuildID: dGuildID,
}
hasHeader[update.Message.MessageID] = has
if telegramHandleFile(dc, update, p[len(p)-1].FileID, update.Message.Caption,
header, has, reference,
&dMessageID, &dChannelID, &dGuildID) {
log.Printf("T%vM%v -> D%vM%s @%s (%v) [photo]: %s; caption: %s",
tc.ID, update.Message.MessageID, dc.ID, dMessageID, username, id, info.FileID, update.Message.Caption)
return
tc.ID, update.Message.MessageID, dc.ID, dMessageID, username, id, p[len(p)-1].FileID, update.Message.Caption)
}
if update.Message.Sticker != nil {
var url string
if u, err := botAPI.GetFileDirectURL(update.Message.Sticker.FileID); err != nil {
msg := tgbotapi.NewMessage(update.Message.Chat.ID, "error getting URL")
msg.ReplyToMessageID = update.Message.MessageID
log.Printf("error getting URL of %s: %s", update.Message.Sticker.FileID, err)
_, _ = botAPI.Send(msg)
return
} else {
url = u
}
var file *discordgo.File
if resp, err := http.Get(url); err != nil {
msg := tgbotapi.NewMessage(update.Message.Chat.ID, "error getting file")
msg.ReplyToMessageID = update.Message.MessageID
log.Printf("error getting file %s: %s", update.Message.Sticker.FileID, err)
_, _ = botAPI.Send(msg)
return
} else {
file = &discordgo.File{
Name: "sticker.webp",
ContentType: "image/webp",
Reader: resp.Body,
}
defer func() {
if err = resp.Body.Close(); err != nil {
log.Printf("error closing request body: %s", err)
}
}()
}
if update.Message.Sticker != nil {
content := header
if config.Telegram.StickerEmoji {
content += update.Message.Sticker.Emoji
}
if message, err := session.ChannelMessageSendComplex(strconv.Itoa(dc.ID), &discordgo.MessageSend{
Content: escape(content),
File: file,
Reference: reference,
}); err != nil {
msg := tgbotapi.NewMessage(update.Message.Chat.ID, "error relaying message")
msg.ReplyToMessageID = update.Message.MessageID
log.Printf("error relaying message %v: %s", update.Message.MessageID, err)
_, _ = botAPI.Send(msg)
return
} else {
dMessageID = message.ID
dChannelID = message.ChannelID
dGuildID = message.GuildID
}
messageReference[update.Message.MessageID] = &discordgo.MessageReference{
MessageID: dMessageID,
ChannelID: dChannelID,
GuildID: dGuildID,
}
hasHeader[update.Message.MessageID] = has
if telegramHandleFile(dc, update, update.Message.Sticker.FileID, content,
header, has, reference,
&dMessageID, &dChannelID, &dGuildID) {
log.Printf("T%vM%v -> D%vM%s @%s (%v) [sticker]: %s",
tc.ID, update.Message.MessageID, dc.ID, dMessageID, username, id, update.Message.Sticker.FileID)
}
return
}
......@@ -323,7 +222,7 @@ func respondTelegram(update tgbotapi.Update) {
tc.ID, update.Message.MessageID, dc.ID, dMessageID, username, id, update.Message.Text)
}
func makeHeader(message *tgbotapi.Message, force bool) (string, bool) {
func telegramMakeHeader(message *tgbotapi.Message, force bool) (string, bool) {
if !config.System.DisplaceHeader || force || !setPreviousCaller(message.Chat.ID, message.From.ID) {
// TODO: check the discord side for header displace
space := ""
......@@ -348,6 +247,67 @@ func escape(str string) string {
"@here", "@\u200bhere")
}
func telegramHandleFile(dc bridgePlatformConf, update tgbotapi.Update, fileID string, content string,
header string, has bool, reference *discordgo.MessageReference,
dMessageID, dChannelID, dGuildID *string) bool {
var file *discordgo.File
var url string
if u, err := botAPI.GetFileDirectURL(fileID); err != nil {
msg := tgbotapi.NewMessage(update.Message.Chat.ID, "error getting URL")
msg.ReplyToMessageID = update.Message.MessageID
log.Printf("error getting URL of %s: %s", fileID, err)
_, _ = botAPI.Send(msg)
return false
} else {
url = u
}
if resp, err := http.Get(url); err != nil {
msg := tgbotapi.NewMessage(update.Message.Chat.ID, "error getting file")
msg.ReplyToMessageID = update.Message.MessageID
log.Printf("error getting file %s: %s", fileID, err)
_, _ = botAPI.Send(msg)
return false
} else {
file = &discordgo.File{
Name: "image.jpg",
ContentType: "image/jpeg",
Reader: resp.Body,
}
defer func() {
if err = resp.Body.Close(); err != nil {
log.Printf("error closing request body: %s", err)
}
}()
}
if message, err := session.ChannelMessageSendComplex(strconv.Itoa(dc.ID), &discordgo.MessageSend{
Content: escape(header + content),
File: file,
Reference: reference,
}); err != nil {
msg := tgbotapi.NewMessage(update.Message.Chat.ID, "error relaying message")
msg.ReplyToMessageID = update.Message.MessageID
log.Printf("error relaying message %v: %s", update.Message.MessageID, err)
_, _ = botAPI.Send(msg)
return false
} else {
*dMessageID = message.ID
*dChannelID = message.ChannelID
*dGuildID = message.GuildID
}
messageReference[update.Message.MessageID] = &discordgo.MessageReference{
MessageID: *dMessageID,
ChannelID: *dChannelID,
GuildID: *dGuildID,
}
hasHeader[update.Message.MessageID] = has
return true
}
func telegramCommand(update tgbotapi.Update) {
message := tgbotapi.NewMessage(update.Message.Chat.ID, "")
switch update.Message.Command() {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment