telegram-join-approval-nuzzles/handlers/admin.go

119 lines
4.1 KiB
Go

package handlers
import (
"fmt"
"log"
"strings"
utils "git.zio.sh/astra/telegram-join-approval-nuzzles/pkg/utils"
api "github.com/OvyFlash/telegram-bot-api"
)
func (bot *Bot) HandleAdminCommands(update *api.Update) {
switch update.Message.Command() {
case "setentrymessage":
if update.Message.CommandArguments() == "" {
utils.SendMessage(bot.API, update.Message.Chat.ID, update.Message.MessageThreadID,
"Usage: /setentrymessage <entry_message>")
return
}
_, e := utils.SendMessage(bot.API, bot.API.Self.ID, 0, update.Message.CommandArguments())
if e != nil && strings.HasPrefix(e.Error(), "Bad Request:") {
utils.SendMessage(bot.API, update.Message.Chat.ID, update.Message.MessageThreadID,
fmt.Sprintf("Unable to set entry message: <code>%s</code>", e))
return
}
bot.Config.EntryMessage = update.Message.CommandArguments()
if err := bot.Config.SaveConfig(); err != nil {
log.Printf("Failed to save config: %v", err)
}
utils.SendMessage(bot.API, update.Message.Chat.ID, update.Message.MessageThreadID,
"Entry message updated.")
case "setadmintopic":
if update.Message.CommandArguments() == "" {
utils.SendMessage(bot.API, update.Message.Chat.ID, update.Message.MessageThreadID,
"Usage: <code>/setadmintopic &lt;topic_id/0&gt;</code>")
return
}
topicID, errMsg := utils.ParseIntArg(update.Message.CommandArguments())
if errMsg != "" {
utils.SendMessage(bot.API, update.Message.Chat.ID, update.Message.MessageThreadID,
"Invalid topic ID")
return
}
bot.Config.AdminChatTopicId = &topicID
if err := bot.Config.SaveConfig(); err != nil {
log.Printf("Failed to save config: %v", err)
}
utils.SendMessage(bot.API, update.Message.Chat.ID, topicID,
fmt.Sprintf("Topic ID for admin chat <b>%d</b> set to <b>%d</b>\n",
update.Message.Chat.ID, topicID))
case "togglesendapproval":
if bot.Config.ApprovalMessage == "" {
utils.SendMessage(bot.API, update.Message.Chat.ID, update.Message.MessageThreadID,
"Please set an approval message with <code>/setapprovalmessage</code>")
return
}
bot.Config.SendApprovalMessage = !bot.Config.SendApprovalMessage
if err := bot.Config.SaveConfig(); err != nil {
log.Printf("Failed to save config: %v", err)
}
utils.SendMessage(bot.API, update.Message.Chat.ID, update.Message.MessageThreadID,
fmt.Sprintf("Send approval message: %v", bot.Config.SendApprovalMessage))
case "setapprovalmessage":
if update.Message.CommandArguments() == "" {
utils.SendMessage(bot.API, update.Message.Chat.ID, update.Message.MessageThreadID,
"Usage: <code>/setapprovalmessage &lt;message&gt;</code>")
return
}
bot.Config.ApprovalMessage = update.Message.CommandArguments()
if err := bot.Config.SaveConfig(); err != nil {
log.Printf("Failed to save config: %v", err)
}
utils.SendMessage(bot.API, update.Message.Chat.ID, update.Message.MessageThreadID,
"Approval message set.")
case "info":
targetChatID := "not set"
if *bot.Config.TargetChatId != 0 {
targetChatID = fmt.Sprintf("%d", *bot.Config.TargetChatId)
}
utils.SendMessage(bot.API, update.Message.Chat.ID, update.Message.MessageThreadID,
fmt.Sprintf(
"Admin Chat ID: <b>%d</b>\nAdmin Topic ID: <b>%d</b>\nTarget Chat ID: <b>%s</b>\nEntry Message: %s\nApproval Message: %s",
update.Message.Chat.ID,
*bot.Config.AdminChatTopicId,
targetChatID,
bot.Config.EntryMessage,
bot.Config.ApprovalMessage,
))
case "edit":
if update.Message.ReplyToMessage == nil {
utils.SendMessage(bot.API, update.Message.Chat.ID, update.Message.MessageThreadID,
"Please reply to a message with /edit <new text>")
return
}
if update.Message.CommandArguments() == "" {
utils.SendMessage(bot.API, update.Message.Chat.ID, update.Message.MessageThreadID,
"Usage: /edit <new text>")
return
}
newText := update.Message.CommandArguments()
utils.EditMessage(bot.API, update.Message.Chat.ID, update.Message.ReplyToMessage.MessageID, newText)
// Delete the admin's edit command message
bot.API.Send(api.NewDeleteMessage(update.Message.Chat.ID, update.Message.MessageID))
}
}