diff --git a/handlers/loadHandlers.go b/handlers/loadHandlers.go index 1046d3a..9227912 100644 --- a/handlers/loadHandlers.go +++ b/handlers/loadHandlers.go @@ -10,11 +10,13 @@ func LoadHandlers(d *ext.Dispatcher) { helpCMD := handlers.NewCommand(HelpCmd, helpHandler) getMeCMD := handlers.NewCommand(FetchCmd, fetchHandler) settingsCMD := handlers.NewCommand(SettingsCmd, settingsHandler) + toggleCMD := handlers.NewCommand("toggle", toggleHandler) autoBan := handlers.NewMessage(msgFilter, autoBanHandler) logHandler := handlers.NewMessage(logChatFilter, logChat) d.AddHandler(startCMD) d.AddHandler(helpCMD) d.AddHandler(getMeCMD) + d.AddHandler(toggleCMD) d.AddHandler(settingsCMD) d.AddHandler(autoBan) d.AddHandler(logHandler) diff --git a/handlers/settings.go b/handlers/settings.go index b7777fd..b24bae0 100644 --- a/handlers/settings.go +++ b/handlers/settings.go @@ -10,6 +10,13 @@ import ( "time" ) +func getUnRecognizedArg() mdparser.WMarkDown { + msg := mdparser.GetBold("Unrecognized arguments\n\n").AppendNormal("Supported args are\n") + msg.AppendMonoThis("bans").AppendItalicThis(" - toggle SpamProtection Bans\n") + msg.AppendMonoThis("detection").AppendItalicThis(" - toggle spam detection") + return msg +} + func settingsHandler(b *gotgbot.Bot, ctx *ext.Context) error { chat := ctx.EffectiveChat message := ctx.EffectiveMessage @@ -44,3 +51,55 @@ func settingsHandler(b *gotgbot.Bot, ctx *ext.Context) error { _, err = message.Reply(b, txt.ToString(), &gotgbot.SendMessageOpts{ParseMode: MarkdownV2}) return helpers.SendError(err, ctx, b) } + +func toggleHandler(b *gotgbot.Bot, ctx *ext.Context) error { + message := ctx.EffectiveMessage + chat := ctx.EffectiveChat + args := ctx.Args() + if chat.Type == PrivateChat { + _, err := message.Reply(b, mdparser.GetItalic("Command only for group").ToString(), &gotgbot.SendMessageOpts{ParseMode: MarkdownV2}) + return helpers.SendError(err, ctx, b) + } + data, err := database.GetChat(chat.Id) + if err != nil { + return helpers.SendError(err, ctx, b) + } + if data == nil { + _, err := message.Reply(b, mdparser.GetItalic("No data found").ToString(), &gotgbot.SendMessageOpts{ParseMode: MarkdownV2}) + return helpers.SendError(err, ctx, b) + } + if len(args) < 2 { + _, err := message.Reply(b, getUnRecognizedArg().ToString(), &gotgbot.SendMessageOpts{ParseMode: MarkdownV2}) + return helpers.SendError(err, ctx, b) + } + + arg := args[1] + switch arg { + case "bans": + database.InsertChat(chat.Id, !data.DoesAutoBan(), data.DetectSpam(), data.SpamAction) + if !data.DoesAutoBan() { + _, err := message.Reply(b, mdparser.GetNormal("SpamProtection Bans enabled in ").AppendBold(chat.Title).ToString(), + &gotgbot.SendMessageOpts{ParseMode: MarkdownV2}) + return helpers.SendError(err, ctx, b) + } else { + _, err := message.Reply(b, mdparser.GetNormal("SpamProtection Bans disabled in ").AppendBold(chat.Title).ToString(), + &gotgbot.SendMessageOpts{ParseMode: MarkdownV2}) + return helpers.SendError(err, ctx, b) + } + case "detection": + database.InsertChat(chat.Id, data.DoesAutoBan(), !data.DetectSpam(), data.SpamAction) + if !data.DetectSpam() { + _, err := message.Reply(b, mdparser.GetNormal("Spam detection enabled in ").AppendBold(chat.Title).ToString(), + &gotgbot.SendMessageOpts{ParseMode: MarkdownV2}) + return helpers.SendError(err, ctx, b) + } else { + _, err := message.Reply(b, mdparser.GetNormal("Spam detection disabled in ").AppendBold(chat.Title).ToString(), + &gotgbot.SendMessageOpts{ParseMode: MarkdownV2}) + return helpers.SendError(err, ctx, b) + } + default: + _, err := message.Reply(b, getUnRecognizedArg().ToString(), + &gotgbot.SendMessageOpts{ParseMode: MarkdownV2}) + return helpers.SendError(err, ctx, b) + } +}