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

copy value before taking address, lock message create handler to make sure...

copy value before taking address, lock message create handler to make sure messages arrive in the order they're received, relay discord message updates, return after calling telegram command handler
parent be2946fc
No related branches found
No related tags found
No related merge requests found
...@@ -95,15 +95,16 @@ func setupConfig() { ...@@ -95,15 +95,16 @@ func setupConfig() {
} }
for _, c := range config.Bridges.Item { for _, c := range config.Bridges.Item {
p := c
if c.Discord.Enable { if c.Discord.Enable {
if c.Discord.ID < 0 { if c.Discord.ID < 0 {
discordPMQueue[strconv.Itoa(c.Discord.ID)] = &c discordPMQueue[strconv.Itoa(c.Discord.ID)] = &p
} else { } else {
discordBridge[strconv.Itoa(c.Discord.ID)] = &c discordBridge[strconv.Itoa(c.Discord.ID)] = &p
} }
} }
if c.Telegram.Enable { if c.Telegram.Enable {
telegramBridge[int64(c.Telegram.ID)] = &c telegramBridge[int64(c.Telegram.ID)] = &p
} }
} }
} }
......
...@@ -7,11 +7,13 @@ import ( ...@@ -7,11 +7,13 @@ import (
"log" "log"
"strconv" "strconv"
"strings" "strings"
"sync"
) )
var ( var (
session *discordgo.Session session *discordgo.Session
application *discordgo.Application application *discordgo.Application
discordMutex = make(map[string]*sync.Mutex)
) )
func init() { func init() {
...@@ -76,6 +78,10 @@ func openDiscord() { ...@@ -76,6 +78,10 @@ func openDiscord() {
} }
} }
for id := range discordBridge {
discordMutex[id] = &sync.Mutex{}
}
ready <- struct{}{} ready <- struct{}{}
} }
...@@ -83,6 +89,7 @@ var idReference = make(map[string]int) ...@@ -83,6 +89,7 @@ var idReference = make(map[string]int)
func handleDiscord() { func handleDiscord() {
session.AddHandler(discordHandleCreate) session.AddHandler(discordHandleCreate)
session.AddHandler(discordHandleUpdate)
} }
func discordHandleCreate(session *discordgo.Session, create *discordgo.MessageCreate) { func discordHandleCreate(session *discordgo.Session, create *discordgo.MessageCreate) {
...@@ -95,6 +102,9 @@ func discordHandleCreate(session *discordgo.Session, create *discordgo.MessageCr ...@@ -95,6 +102,9 @@ func discordHandleCreate(session *discordgo.Session, create *discordgo.MessageCr
return return
} }
discordMutex[create.ChannelID].Lock()
defer discordMutex[create.ChannelID].Unlock()
setTelegramPreviousCaller(int64(tc.ID), -1) setTelegramPreviousCaller(int64(tc.ID), -1)
if create.Message == nil || create.Message.Author == nil { if create.Message == nil || create.Message.Author == nil {
...@@ -148,6 +158,42 @@ func discordHandleCreate(session *discordgo.Session, create *discordgo.MessageCr ...@@ -148,6 +158,42 @@ func discordHandleCreate(session *discordgo.Session, create *discordgo.MessageCr
create.Message.Content) create.Message.Content)
} }
func discordHandleUpdate(session *discordgo.Session, update *discordgo.MessageUpdate) {
if update.Author == nil || update.Author.ID == session.State.User.ID {
return
}
if update.Message == nil || update.Message.Author == nil {
if config.System.Verbose {
log.Printf("got update with missing fields")
}
return
}
var tid int
if id, ok := idReference[update.Message.ID]; !ok {
return
} else {
tid = id
}
dc, tc := discordGetConf(update.ChannelID)
if dc == nil || tc == nil {
return
}
edit := tgbotapi.NewEditMessageText(int64(tc.ID), tid, discordMakeHeader(update.Message.Author)+update.Message.Content)
edit.ParseMode = "Markdown"
if _, err := botAPI.Send(edit); err != nil {
log.Printf("error relaying edit on message %s: %s", update.Message.ID, err)
return
}
log.Printf("D%vM%s -> T%vM%v %s#%s (%s) [edit]: %s",
dc.ID, update.Message.ID, tc.ID, idReference[update.Message.ID],
update.Message.Author.Username, update.Message.Author.Discriminator, update.Message.Author.ID,
update.Message.Content)
}
func discordGetConf(id string) (dc, tc *bridgePlatformConf) { func discordGetConf(id string) (dc, tc *bridgePlatformConf) {
if c, ok := discordBridge[id]; !ok { if c, ok := discordBridge[id]; !ok {
if config.System.Verbose { if config.System.Verbose {
......
...@@ -129,6 +129,7 @@ func respondTelegram(update tgbotapi.Update) { ...@@ -129,6 +129,7 @@ func respondTelegram(update tgbotapi.Update) {
if update.Message.IsCommand() { if update.Message.IsCommand() {
go telegramCommand(update) go telegramCommand(update)
return
} }
var ( var (
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment