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)"))