diff --git a/config.go b/config.go index 25ca85c27e976b8eb08caf2de9189126193dd860..3ec2e919783a5735398a1014dbe3859e0e62b176 100644 --- a/config.go +++ b/config.go @@ -13,8 +13,9 @@ var ( confPath string parsed = false - discordBridge = make(map[string]bridgeConf) - telegramBridge = make(map[int64]bridgeConf) + discordPMQueue = make(map[string]*bridgeConf) + discordBridge = make(map[string]*bridgeConf) + telegramBridge = make(map[int64]*bridgeConf) ) func init() { @@ -95,10 +96,14 @@ func setupConfig() { for _, c := range config.Bridges.Item { if c.Discord.Enable { - discordBridge[strconv.Itoa(c.Discord.ID)] = c + if c.Discord.ID < 0 { + discordPMQueue[strconv.Itoa(c.Discord.ID)] = &c + } else { + discordBridge[strconv.Itoa(c.Discord.ID)] = &c + } } if c.Telegram.Enable { - telegramBridge[int64(c.Telegram.ID)] = c + telegramBridge[int64(c.Telegram.ID)] = &c } } } diff --git a/discord.go b/discord.go index d3bd7fb4f6222beb8184c614924e65e91f3ab758..085ab3519ce450fdb93ddbc0a21990c6787fa23e 100644 --- a/discord.go +++ b/discord.go @@ -5,6 +5,7 @@ import ( "github.com/bwmarrin/discordgo" tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api" "log" + "strconv" "strings" ) @@ -41,7 +42,7 @@ func openDiscord() { session = s } - session.Identify.Intents = discordgo.IntentsGuildMessages + session.Identify.Intents = discordgo.IntentsGuildMessages | discordgo.IntentsDirectMessages session.Token = "Bot " + config.Discord.Token if err := session.Open(); err != nil { @@ -58,6 +59,23 @@ func openDiscord() { application = app } + for uid, c := range discordPMQueue { + id := strconv.Itoa(-c.Discord.ID) + if st, err := session.UserChannelCreate(id); err != nil { + log.Printf("error creating user channel for %s: %s", id, err) + } else { + if c.Discord.ID, err = strconv.Atoi(st.ID); err != nil { + log.Printf("error parsing discord response for user channel: %s", err) + } else { + if config.System.Verbose { + log.Printf("configured user %s with channel %s", id, st.ID) + } + discordBridge[st.ID] = c + delete(discordPMQueue, uid) + } + } + } + ready <- struct{}{} }