119 lines
4.1 KiB
Go
119 lines
4.1 KiB
Go
package handlers
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"strings"
|
|
|
|
utils "git.zio.sh/astra/telegram-approval-join-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 <topic_id/0></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 <message></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))
|
|
}
|
|
}
|