Archived
1

Pins to supergroups, managed by admins

This commit is contained in:
2017-11-14 03:44:21 +04:00
parent 5c08899d25
commit 95a9a2146a
84 changed files with 786 additions and 622 deletions

View File

@@ -4,25 +4,24 @@
package router
import (
// stdlib
"log"
// local
"lab.pztrn.name/fat0troll/i2_bot/lib/appcontext"
)
var (
c *appcontext.Context
r *Router
)
// Router is a function-handling struct for router
type Router struct{}
// New is an initialization function for appcontext
func New(ac *appcontext.Context) {
c = ac
rh := RouterHandler{}
c.RegisterRouterInterface(rh)
r := &Router{}
c.RegisterRouterInterface(r)
}
// Init is an initialization function for package router
func (r *Router) Init() {
log.Printf("Initialized request router...")
c.Log.Info("Initialized request router...")
}

View File

@@ -4,15 +4,12 @@
package router
import (
// stdlib
"regexp"
// 3rd party
"github.com/go-telegram-bot-api/telegram-bot-api"
// local
"lab.pztrn.name/fat0troll/i2_bot/lib/dbmapping"
"regexp"
)
func (r *Router) routeGroupRequest(update tgbotapi.Update, playerRaw dbmapping.Player, chatRaw dbmapping.Chat) string {
func (r *Router) routeGroupRequest(update *tgbotapi.Update, playerRaw *dbmapping.Player, chatRaw *dbmapping.Chat) string {
text := update.Message.Text
// Regular expressions
var durakMsg = regexp.MustCompile("(Д|д)(У|у)(Р|р)(А|а|Е|е|О|о)")
@@ -22,8 +19,11 @@ func (r *Router) routeGroupRequest(update tgbotapi.Update, playerRaw dbmapping.P
var piMsg = regexp.MustCompile("(П|п)(И|и)(З|з)(Д|д)")
// Welcomes
if update.Message.NewChatMember != nil {
return c.Welcomer.WelcomeMessage(update)
if update.Message.NewChatMembers != nil {
newUsers := *update.Message.NewChatMembers
if len(newUsers) > 0 {
return c.Welcomer.WelcomeMessage(update)
}
}
// New chat names
if update.Message.NewChatTitle != "" {

View File

@@ -1,22 +0,0 @@
// i2_bot Instinct PokememBro Bot
// Copyright (c) 2017 Vladimir "fat0troll" Hodakov
package router
import (
// 3rd party
"github.com/go-telegram-bot-api/telegram-bot-api"
)
// RouterHandler is a handler for router package
type RouterHandler struct{}
// Init is an initialization function of router
func (rh RouterHandler) Init() {
r.Init()
}
// RouteRequest decides, what to do with user input
func (rh RouterHandler) RouteRequest(update tgbotapi.Update) string {
return r.RouteRequest(update)
}

View File

@@ -4,21 +4,13 @@
package router
import (
// stdlib
"log"
"regexp"
"strings"
// 3rd party
"github.com/go-telegram-bot-api/telegram-bot-api"
// local
"lab.pztrn.name/fat0troll/i2_bot/lib/dbmapping"
"regexp"
)
func (r *Router) routePrivateRequest(update tgbotapi.Update, playerRaw dbmapping.Player, chatRaw dbmapping.Chat) string {
func (r *Router) routePrivateRequest(update *tgbotapi.Update, playerRaw *dbmapping.Player, chatRaw *dbmapping.Chat) string {
text := update.Message.Text
// Forwards
var pokememeMsg = regexp.MustCompile("(Уровень)(.+)(Опыт)(.+)\n(Элементы:)(.+)\n(.+)(💙MP)")
var profileMsg = regexp.MustCompile(`(Онлайн: )(\d+)\n(Турнир через)(.+)\n\n((.*)\n|(.*)\n(.*)\n)(Элементы)(.+)\n(.*)\n\n(.+)(Уровень)(.+)\n`)
// Commands with regexps
var pokedexMsg = regexp.MustCompile("/pokede(x|ks)\\d?\\z")
@@ -26,45 +18,11 @@ func (r *Router) routePrivateRequest(update tgbotapi.Update, playerRaw dbmapping
if update.Message.ForwardFrom != nil {
if update.Message.ForwardFrom.ID != 360402625 {
log.Printf("Forward from another user or bot. Ignoring")
c.Log.Info("Forward from another user or bot. Ignoring")
} else {
log.Printf("Forward from PokememBro bot! Processing...")
c.Log.Info("Forward from PokememBro bot! Processing...")
if playerRaw.ID != 0 {
switch {
case pokememeMsg.MatchString(text):
log.Printf("Pokememe posted!")
if playerRaw.LeagueID == 1 {
status := c.Parsers.ParsePokememe(text, playerRaw)
switch status {
case "ok":
c.Talkers.PokememeAddSuccessMessage(update)
return "ok"
case "dup":
c.Talkers.PokememeAddDuplicateMessage(update)
return "ok"
case "fail":
c.Talkers.PokememeAddFailureMessage(update)
return "fail"
}
} else {
c.Talkers.AnyMessageUnauthorized(update)
return "fail"
}
case profileMsg.MatchString(text):
log.Printf("Profile posted!")
status := c.Parsers.ParseProfile(update, playerRaw)
switch status {
case "ok":
c.Talkers.ProfileAddSuccessMessage(update)
return "ok"
case "fail":
c.Talkers.ProfileAddFailureMessage(update)
return "fail"
}
default:
log.Printf(text)
return "fail"
}
c.Forwarder.ProcessForward(update, playerRaw)
} else {
c.Talkers.AnyMessageUnauthorized(update)
return "fail"
@@ -82,28 +40,11 @@ func (r *Router) routePrivateRequest(update tgbotapi.Update, playerRaw dbmapping
c.Talkers.HelloMessageUnauthorized(update)
return "ok"
case update.Message.Command() == "help":
c.Talkers.HelpMessage(update, &playerRaw)
c.Talkers.HelpMessage(update, playerRaw)
return "ok"
// Pokememes info
case pokedexMsg.MatchString(text):
if strings.HasSuffix(text, "1") {
c.Talkers.PokememesList(update, 1)
return "ok"
} else if strings.HasSuffix(text, "2") {
c.Talkers.PokememesList(update, 2)
return "ok"
} else if strings.HasSuffix(text, "3") {
c.Talkers.PokememesList(update, 3)
return "ok"
} else if strings.HasSuffix(text, "4") {
c.Talkers.PokememesList(update, 4)
return "ok"
} else if strings.HasSuffix(text, "5") {
c.Talkers.PokememesList(update, 5)
return "ok"
}
c.Talkers.PokememesList(update, 1)
c.Talkers.PokememesList(update)
return "ok"
case pokememeInfoMsg.MatchString(text):
c.Talkers.PokememeInfo(update, playerRaw)
@@ -120,27 +61,34 @@ func (r *Router) routePrivateRequest(update tgbotapi.Update, playerRaw dbmapping
c.Talkers.BestPokememesList(update, playerRaw)
return "ok"
case update.Message.Command() == "send_all":
if c.Getters.PlayerBetterThan(&playerRaw, "admin") {
c.Talkers.AdminBroadcastMessageCompose(update, &playerRaw)
if c.Getters.PlayerBetterThan(playerRaw, "admin") {
c.Talkers.AdminBroadcastMessageCompose(update, playerRaw)
return "ok"
}
c.Talkers.AnyMessageUnauthorized(update)
return "fail"
case update.Message.Command() == "send_confirm":
if c.Getters.PlayerBetterThan(&playerRaw, "admin") {
c.Talkers.AdminBroadcastMessageSend(update, &playerRaw)
if c.Getters.PlayerBetterThan(playerRaw, "admin") {
c.Talkers.AdminBroadcastMessageSend(update, playerRaw)
return "ok"
}
c.Talkers.AnyMessageUnauthorized(update)
return "fail"
case update.Message.Command() == "group_chats":
if c.Getters.PlayerBetterThan(&playerRaw, "admin") {
if c.Getters.PlayerBetterThan(playerRaw, "admin") {
c.Talkers.GroupsList(update)
return "ok"
}
c.Talkers.AnyMessageUnauthorized(update)
return "fail"
case update.Message.Command() == "pin":
if c.Getters.PlayerBetterThan(playerRaw, "admin") {
return c.Pinner.PinMessageToAllChats(update)
}
c.Talkers.AnyMessageUnauthorized(update)
return "fail"
}

View File

@@ -4,35 +4,29 @@
package router
import (
// stdlib
"log"
// 3rd party
"github.com/go-telegram-bot-api/telegram-bot-api"
)
// Router is a function-handling struct for router
type Router struct{}
// RouteRequest decides, what to do with user input
func (r *Router) RouteRequest(update tgbotapi.Update) string {
func (r *Router) RouteRequest(update *tgbotapi.Update) string {
playerRaw, ok := c.Getters.GetOrCreatePlayer(update.Message.From.ID)
if !ok {
// Silently fail
return "fail"
}
chatRaw, ok := c.Getters.GetOrCreateChat(&update)
chatRaw, ok := c.Getters.GetOrCreateChat(update)
if !ok {
return "fail"
}
log.Printf("Received message from chat ")
log.Println(chatRaw.TelegramID)
c.Log.Debug("Received message from chat ")
c.Log.Debugln(chatRaw.TelegramID)
if update.Message.Chat.IsGroup() || update.Message.Chat.IsSuperGroup() {
return r.routeGroupRequest(update, playerRaw, chatRaw)
return r.routeGroupRequest(update, &playerRaw, &chatRaw)
} else if update.Message.Chat.IsPrivate() {
return r.routePrivateRequest(update, playerRaw, chatRaw)
return r.routePrivateRequest(update, &playerRaw, &chatRaw)
}
return "ok"

View File

@@ -4,12 +4,11 @@
package routerinterface
import (
// 3rd party
"github.com/go-telegram-bot-api/telegram-bot-api"
)
// RouterInterface implements Router for importing via appcontext.
type RouterInterface interface {
Init()
RouteRequest(update tgbotapi.Update) string
RouteRequest(update *tgbotapi.Update) string
}