Update code

This commit is contained in:
Astra 2026-02-01 16:15:44 +00:00
parent 2521fd8860
commit 033c33b5e7

62
main.go
View file

@ -1,6 +1,7 @@
package main
import (
"encoding/json"
"fmt"
"log"
"strconv"
@ -11,9 +12,10 @@ import (
)
const (
AdminJoinRequestMsg = "New join #request from <i>%s</i> [<code>%d</code>]\n\nJoin reason: %s"
AdminApprovedMsg = "✅ Join #request approved for <i>%s</i> [<code>%d</code>]\n\nJoin reason: %s\nApproved by: %s\nApproved at: %s"
AdminDeclinedMsg = "❌ Join #request declined for <i>%s</i> [<code>%d</code>]\n\nJoin reason: %s\nDeclined by: %s\nDeclined at: %s\nDeclined reason: %s"
AdminJoinRequestMsg = "New join #request from <i>%s</i> [<code>%d</code>]\n\n<b>Join reason</b>: %s"
AdminApprovedMsg = "✅ Join #request approved for <i>%s</i> [<code>%d</code>]\n\n<b>Join reason</b>: %s\n<b>Approved by</b>: %s\n<b>Approved at</b>: %s"
AdminDeclinedMsg = "❌ Join #request declined for <i>%s</i> [<code>%d</code>]\n\n<b>Join reason</b>: %s\n<b>Declined by</b>: %s\n<b>Declined at</b>: %s\n<b>Declined reason</b>: %s"
AdminFailedMsg = "⚠️ Join #request failed for <i>%s</i> [<code>%d</code>]\n\n<b>Join reason</b>: %s\n<b>Failure reason</b>: %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)"))