From 93c799fed3d98c445b45677e0c26580a70aa58a5 Mon Sep 17 00:00:00 2001 From: Sayan Biswas Date: Wed, 20 Oct 2021 00:03:47 +0530 Subject: [PATCH] Add a /settings command to check group settings Signed-off-by: Sayan Biswas --- core/config.go | 14 +++++++----- database/chats.go | 10 +++++++++ handlers/autoban.go | 5 ++--- handlers/constants.go | 10 ++++++--- handlers/help.go | 9 ++++---- handlers/loadHandlers.go | 8 ++++--- handlers/settings.go | 46 ++++++++++++++++++++++++++++++++++++++++ helpers/error.go | 11 ++++++++-- 8 files changed, 92 insertions(+), 21 deletions(-) create mode 100644 handlers/settings.go diff --git a/core/config.go b/core/config.go index a0f59a3..84c351d 100644 --- a/core/config.go +++ b/core/config.go @@ -7,13 +7,16 @@ import ( ) type ShiinaConfig struct { - BotToken string - DatabaseName string - BotAdmins []int64 - Debug bool - DropUpdates bool + BotToken string + DatabaseName string + CoffeeHouseKey string + BotAdmins []int64 + Debug bool + DropUpdates bool } +var Data *ShiinaConfig + func NewShiinaConfig() *ShiinaConfig { return &ShiinaConfig{} } @@ -30,6 +33,7 @@ func (c *ShiinaConfig) ReadFile(path string) error { c.BotAdmins = conf.GetInt64List("ShiinaConfig.BotAdmins") c.Debug = conf.GetBoolean("ShiinaConfig.Debug") c.DropUpdates = conf.GetBoolean("ShiinaConfig.DropUpdates") + Data = c return nil } diff --git a/database/chats.go b/database/chats.go index 577c4ba..bb392f0 100644 --- a/database/chats.go +++ b/database/chats.go @@ -10,9 +10,19 @@ type Chat struct { } func (c *Chat) DoesAutoBan() bool { + if c == nil { + return false + } return c.AutoBan } +func (c *Chat) DetectSpam() bool { + if c == nil { + return false + } + return c.SpamDetect +} + func InsertChat(ChatID int64, AutoBan bool, SpamDetect bool, SpamAction string) { tx := SESSION.Begin() chat := &Chat{ChatID: ChatID, AutoBan: AutoBan, SpamDetect: SpamDetect, SpamAction: SpamAction} diff --git a/handlers/autoban.go b/handlers/autoban.go index 55eb210..f4c589e 100644 --- a/handlers/autoban.go +++ b/handlers/autoban.go @@ -21,8 +21,7 @@ func autoBanHandler(b *gotgbot.Bot, ctx *ext.Context) error { } data, err := spamProtection.GetInfoByID(user.Id) if err != nil { - helpers.SendError(err, ctx, b) - return err + return helpers.SendError(err, ctx, b) } if !data.Success { return nil @@ -46,4 +45,4 @@ func msgFilter(msg *gotgbot.Message) bool { return false } return msg.From != nil -} \ No newline at end of file +} diff --git a/handlers/constants.go b/handlers/constants.go index 6e99210..8ad7cce 100644 --- a/handlers/constants.go +++ b/handlers/constants.go @@ -1,7 +1,11 @@ package handlers const ( - HELP_CMD = "help" - START_CMD = "start" - FETCH_CMD = "fetch" + HelpCmd = "help" + StartCmd = "start" + FetchCmd = "fetch" + SettingsCmd = "settings" + PrivateChat = "private" + MarkdownV2 = "markdownv2" + TimeLayout = "Jan 2, 2006 at 3:04pm (MST)" ) diff --git a/handlers/help.go b/handlers/help.go index 0e6cf24..22187b1 100644 --- a/handlers/help.go +++ b/handlers/help.go @@ -13,9 +13,9 @@ func getHelp(u *gotgbot.User) string { msg = msg.AppendNormal("I am a bot, with the primary purpose of adding more overhead on @SpamProtectionBot.").AppendNormal("\n") msg = msg.AppendNormal("Due to this, I function quite similarly to it, I might look like a clone of it.").AppendNormalThis("\n\n") msg = msg.AppendBold("Here are the commands I currently accept").AppendNormal(":\n") - msg = msg.AppendNormal("- ").AppendMono(START_CMD).AppendNormal(": starts me, as usual\n") - msg = msg.AppendNormal("- ").AppendMono(HELP_CMD).AppendNormal(": makes me send THIS message\n") - msg = msg.AppendNormal("- ").AppendMono(FETCH_CMD).AppendNormalThis(": fetch a user on the API") + msg = msg.AppendNormal("- ").AppendMono(StartCmd).AppendNormal(": starts me, as usual\n") + msg = msg.AppendNormal("- ").AppendMono(HelpCmd).AppendNormal(": makes me send THIS message\n") + msg = msg.AppendNormal("- ").AppendMono(FetchCmd).AppendNormalThis(": fetch a user on the API") return msg.ToString() } @@ -26,8 +26,7 @@ func helpHandler(b *gotgbot.Bot, ctx *ext.Context) error { {Text: "Click me for help!", Url: fmt.Sprintf("t.me/%s?start=help", b.Username)}, }}}}) if err != nil { - helpers.SendError(err, ctx, b) - return err + return helpers.SendError(err, ctx, b) } } else { diff --git a/handlers/loadHandlers.go b/handlers/loadHandlers.go index cc0cafa..1046d3a 100644 --- a/handlers/loadHandlers.go +++ b/handlers/loadHandlers.go @@ -6,14 +6,16 @@ import ( ) func LoadHandlers(d *ext.Dispatcher) { - startCMD := handlers.NewCommand(START_CMD, startHandler) - helpCMD := handlers.NewCommand(HELP_CMD, helpHandler) - getMeCMD := handlers.NewCommand(FETCH_CMD, fetchHandler) + startCMD := handlers.NewCommand(StartCmd, startHandler) + helpCMD := handlers.NewCommand(HelpCmd, helpHandler) + getMeCMD := handlers.NewCommand(FetchCmd, fetchHandler) + settingsCMD := handlers.NewCommand(SettingsCmd, settingsHandler) autoBan := handlers.NewMessage(msgFilter, autoBanHandler) logHandler := handlers.NewMessage(logChatFilter, logChat) d.AddHandler(startCMD) d.AddHandler(helpCMD) d.AddHandler(getMeCMD) + d.AddHandler(settingsCMD) d.AddHandler(autoBan) d.AddHandler(logHandler) } diff --git a/handlers/settings.go b/handlers/settings.go new file mode 100644 index 0000000..b7777fd --- /dev/null +++ b/handlers/settings.go @@ -0,0 +1,46 @@ +package handlers + +import ( + "fmt" + "github.com/ALiwoto/mdparser/mdparser" + "github.com/PaulSonOfLars/gotgbot/v2" + "github.com/PaulSonOfLars/gotgbot/v2/ext" + "gitlab.com/Dank-del/SpamProtection-Mirror-Bot/database" + "gitlab.com/Dank-del/SpamProtection-Mirror-Bot/helpers" + "time" +) + +func settingsHandler(b *gotgbot.Bot, ctx *ext.Context) error { + chat := ctx.EffectiveChat + message := ctx.EffectiveMessage + 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) + } + txt := mdparser.GetBold(chat.Title).AppendMono(fmt.Sprintf(" (%d)", chat.Id)).AppendNormal("\n\n") + if data == nil { + txt.AppendItalicThis("No data found") + } else { + txt.AppendBoldThis("SpamProtection Bans: ") + if data.DoesAutoBan() { + txt.AppendMonoThis("On") + } else { + txt.AppendMonoThis("Off") + } + txt.AppendNormalThis("\n") + txt.AppendBoldThis("Spam Prediction: ") + if data.DetectSpam() { + txt.AppendMonoThis("On") + } else { + txt.AppendMonoThis("Off") + } + txt.AppendNormalThis("\n") + txt.AppendNormalThis("\n").AppendBoldThis("Fetched on ").AppendBoldThis(time.Now().UTC().Format(TimeLayout)) + } + _, err = message.Reply(b, txt.ToString(), &gotgbot.SendMessageOpts{ParseMode: MarkdownV2}) + return helpers.SendError(err, ctx, b) +} diff --git a/helpers/error.go b/helpers/error.go index 710d248..7f01220 100644 --- a/helpers/error.go +++ b/helpers/error.go @@ -8,10 +8,17 @@ import ( "strings" ) -func SendError(err error, ctx *ext.Context, b *gotgbot.Bot) { +func SendError(err error, ctx *ext.Context, b *gotgbot.Bot) error { + if err == nil { + return nil + } msg := mdparser.GetBold("Error: ").AppendItalic(err.Error()) - _, er := b.SendMessage(ctx.EffectiveChat.Id, strings.ReplaceAll(msg.ToString(), b.Token, "token"), &gotgbot.SendMessageOpts{ParseMode: "markdownv2"}) + txt := msg.ToString() + m := strings.ReplaceAll(txt, b.Token, "token") + m = strings.ReplaceAll(m, core.Data.CoffeeHouseKey, "cf_key") + _, er := b.SendMessage(ctx.EffectiveChat.Id, m, &gotgbot.SendMessageOpts{ParseMode: "markdownv2"}) if er != nil { core.SUGARED.Error(err) } + return err }