From 8f000d6628c5fcc74912010b89330e56fc6c8356 Mon Sep 17 00:00:00 2001
From: RandomChars <random@chars.jp>
Date: Tue, 9 Nov 2021 11:18:00 +0900
Subject: [PATCH] relay join/leave

---
 telegram.go | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 67 insertions(+), 2 deletions(-)

diff --git a/telegram.go b/telegram.go
index 600ea4a..b55cbf3 100644
--- a/telegram.go
+++ b/telegram.go
@@ -147,12 +147,76 @@ func respondTelegram(update tgbotapi.Update) {
 	}
 
 	var (
-		username   = "unknown"
-		id         = -1
 		dMessageID = "-1"
 		dGuildID   = "-1"
 		dChannelID = "-1"
 	)
+
+	if newP := update.Message.NewChatMembers; newP != nil {
+		newV := *newP
+		if len(newV) <= 0 {
+			return
+		}
+
+		content := newV[0].FirstName
+		for i := 1; i < len(newV); i++ {
+			content += newV[i].FirstName
+			log.Printf("T%vM%v -> D%vM%s @%s (%v) [join]",
+				tc.ID, update.Message.MessageID, dc.ID, dMessageID, newV[i].UserName, newV[i].ID)
+		}
+
+		if message, err := session.ChannelMessageSend(strconv.Itoa(dc.ID), fmt.Sprintf("%s joined the Telegram chat.", content)); 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.Error())
+			_, _ = 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,
+		}
+		referenceMessage[dMessageID] = update.Message.MessageID
+		hasHeader[update.Message.MessageID] = false
+		return
+	}
+
+	if left := update.Message.LeftChatMember; left != nil {
+		if message, err := session.ChannelMessageSend(strconv.Itoa(dc.ID), fmt.Sprintf("%s left the Telegram chat.", left.FirstName)); 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.Error())
+			_, _ = 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,
+		}
+		referenceMessage[dMessageID] = update.Message.MessageID
+		hasHeader[update.Message.MessageID] = false
+
+		log.Printf("T%vM%v -> D%vM%s @%s (%v) [leave]",
+			tc.ID, update.Message.MessageID, dc.ID, dMessageID, left.UserName, left.ID)
+		return
+	}
+
+	var (
+		username = "unknown"
+		id       = -1
+	)
 	if update.Message.From != nil {
 		username = update.Message.From.UserName
 		id = update.Message.From.ID
@@ -215,6 +279,7 @@ func respondTelegram(update tgbotapi.Update) {
 		msg.ReplyToMessageID = update.Message.MessageID
 		log.Printf("error relaying message %v: %s", update.Message.MessageID, err.Error())
 		_, _ = botAPI.Send(msg)
+		return
 	} else {
 		dMessageID = message.ID
 		dChannelID = message.ChannelID
-- 
GitLab