diff --git a/main.go b/main.go index 9ff666b..9046d10 100644 --- a/main.go +++ b/main.go @@ -1,6 +1,7 @@ package main import ( + "encoding/json" "fmt" "log" "strconv" @@ -11,9 +12,10 @@ import ( ) const ( - AdminJoinRequestMsg = "New join #request from %s [%d]\n\nJoin reason: %s" - AdminApprovedMsg = "✅ Join #request approved for %s [%d]\n\nJoin reason: %s\nApproved by: %s\nApproved at: %s" - AdminDeclinedMsg = "❌ Join #request declined for %s [%d]\n\nJoin reason: %s\nDeclined by: %s\nDeclined at: %s\nDeclined reason: %s" + AdminJoinRequestMsg = "New join #request from %s [%d]\n\nJoin reason: %s" + AdminApprovedMsg = "✅ Join #request approved for %s [%d]\n\nJoin reason: %s\nApproved by: %s\nApproved at: %s" + AdminDeclinedMsg = "❌ Join #request declined for %s [%d]\n\nJoin reason: %s\nDeclined by: %s\nDeclined at: %s\nDeclined reason: %s" + AdminFailedMsg = "⚠️ Join #request failed for %s [%d]\n\nJoin reason: %s\nFailure reason: %s" ) type ExtendedChatJoinRequest struct { @@ -51,6 +53,8 @@ func main() { updatesChannel := b.API.GetUpdatesChan(updateConfig) for update := range updatesChannel { + j, _ := json.MarshalIndent(update, "", " ") + log.Printf("Received update: %s", j) if update.ChatJoinRequest != nil { if update.ChatJoinRequest.Chat.ID == b.Config.TargetChatId { b.handleJoinRequest(update.ChatJoinRequest) @@ -171,20 +175,30 @@ func (bot *Bot) handleCallbackQuery(query *api.CallbackQuery) { switch action { case "approve": - r := api.ApproveChatJoinRequestConfig{ - ChatConfig: api.ChatConfig{ - ChatID: user.ChatJoinRequest.Chat.ID, - }, - UserID: user.ChatJoinRequest.From.ID, - } - bot.API.Send(r) - userString := "" if user.From.UserName != "" { userString = "@" + user.From.UserName } else { userString = fmt.Sprintf("%s %s (no username)", user.From.FirstName, user.From.LastName) } + r := api.ApproveChatJoinRequestConfig{ + ChatConfig: api.ChatConfig{ + ChatID: user.ChatJoinRequest.Chat.ID, + }, + UserID: user.ChatJoinRequest.From.ID, + } + _, e := bot.API.Send(r) + if e != nil { + edit := api.NewEditMessageText(bot.Config.AdminChatId, user.JoinRequestMessageID, + fmt.Sprintf(AdminFailedMsg, userString, user.From.ID, user.JoinReason, "User not found in requests.")) + edit.ParseMode = api.ModeHTML + bot.API.Send(edit) + + callback := api.NewCallback(query.ID, "Join request failed.") + bot.API.Request(callback) + return + } + edit := api.NewEditMessageText(bot.Config.AdminChatId, user.JoinRequestMessageID, fmt.Sprintf(AdminApprovedMsg, userString, user.From.ID, user.JoinReason, query.From.String(), time.Now().Format("2006-01-02 15:04:05"))) @@ -201,20 +215,30 @@ func (bot *Bot) handleCallbackQuery(query *api.CallbackQuery) { bot.API.Request(callback) case "decline": - r := api.DeclineChatJoinRequest{ - ChatConfig: api.ChatConfig{ - ChatID: user.ChatJoinRequest.Chat.ID, - }, - UserID: user.ChatJoinRequest.From.ID, - } - bot.API.Send(r) - userString := "" if user.From.UserName != "" { userString = "@" + user.From.UserName } else { userString = fmt.Sprintf("%s %s (no username)", user.From.FirstName, user.From.LastName) } + r := api.DeclineChatJoinRequest{ + ChatConfig: api.ChatConfig{ + ChatID: user.ChatJoinRequest.Chat.ID, + }, + UserID: user.ChatJoinRequest.From.ID, + } + _, e := bot.API.Send(r) + if e != nil { + edit := api.NewEditMessageText(bot.Config.AdminChatId, user.JoinRequestMessageID, + fmt.Sprintf(AdminFailedMsg, userString, user.From.ID, user.JoinReason, "User not found in requests.")) + edit.ParseMode = api.ModeHTML + bot.API.Send(edit) + + callback := api.NewCallback(query.ID, "Join request failed.") + bot.API.Request(callback) + return + } + edit := api.NewEditMessageText(bot.Config.AdminChatId, user.JoinRequestMessageID, fmt.Sprintf(AdminDeclinedMsg, userString, user.From.ID, user.JoinReason, query.From.String(), time.Now().Format("2006-01-02 15:04:05"), "(no reason provided, reply to this to send one, prepend with + to also send to user)"))