/send_all feature for administrators
This commit is contained in:
parent
88c9853c77
commit
7975ea54c1
@ -54,3 +54,16 @@ func (g *Getters) GetOrCreateChat(telegramUpdate *tgbotapi.Update) (dbmapping.Ch
|
|||||||
|
|
||||||
return chatRaw, true
|
return chatRaw, true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetAllPrivateChats returns all private chats
|
||||||
|
func (g *Getters) GetAllPrivateChats() ([]dbmapping.Chat, bool) {
|
||||||
|
privateChats := []dbmapping.Chat{}
|
||||||
|
|
||||||
|
err := c.Db.Select(&privateChats, "SELECT * FROM chats WHERE chat_type='private'")
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
return privateChats, false
|
||||||
|
}
|
||||||
|
|
||||||
|
return privateChats, true
|
||||||
|
}
|
||||||
|
@ -15,8 +15,10 @@ type GettersInterface interface {
|
|||||||
Init()
|
Init()
|
||||||
GetOrCreateChat(update *tgbotapi.Update) (dbmapping.Chat, bool)
|
GetOrCreateChat(update *tgbotapi.Update) (dbmapping.Chat, bool)
|
||||||
GetChatByID(chatID int) (dbmapping.Chat, bool)
|
GetChatByID(chatID int) (dbmapping.Chat, bool)
|
||||||
|
GetAllPrivateChats() ([]dbmapping.Chat, bool)
|
||||||
GetOrCreatePlayer(telegramID int) (dbmapping.Player, bool)
|
GetOrCreatePlayer(telegramID int) (dbmapping.Player, bool)
|
||||||
GetPlayerByID(playerID int) (dbmapping.Player, bool)
|
GetPlayerByID(playerID int) (dbmapping.Player, bool)
|
||||||
|
PlayerBetterThan(playerRaw *dbmapping.Player, powerLevel string) bool
|
||||||
GetProfile(playerID int) (dbmapping.Profile, bool)
|
GetProfile(playerID int) (dbmapping.Profile, bool)
|
||||||
GetPokememes() ([]dbmapping.PokememeFull, bool)
|
GetPokememes() ([]dbmapping.PokememeFull, bool)
|
||||||
GetBestPokememes(playerID int) ([]dbmapping.PokememeFull, bool)
|
GetBestPokememes(playerID int) ([]dbmapping.PokememeFull, bool)
|
||||||
|
@ -50,3 +50,21 @@ func (g *Getters) GetOrCreatePlayer(telegramID int) (dbmapping.Player, bool) {
|
|||||||
|
|
||||||
return playerRaw, true
|
return playerRaw, true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PlayerBetterThan return true, if profile is more or equal powerful than
|
||||||
|
// provided power level
|
||||||
|
func (g *Getters) PlayerBetterThan(playerRaw *dbmapping.Player, powerLevel string) bool {
|
||||||
|
var isBetter = false
|
||||||
|
switch playerRaw.Status {
|
||||||
|
case "owner":
|
||||||
|
isBetter = true
|
||||||
|
case "admin":
|
||||||
|
if powerLevel != "owner" {
|
||||||
|
isBetter = true
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
isBetter = false
|
||||||
|
}
|
||||||
|
|
||||||
|
return isBetter
|
||||||
|
}
|
||||||
|
@ -48,6 +48,9 @@ func (r *Router) RouteRequest(update tgbotapi.Update) string {
|
|||||||
var meMsg = regexp.MustCompile("/me\\z")
|
var meMsg = regexp.MustCompile("/me\\z")
|
||||||
var bestMsg = regexp.MustCompile("/best\\z")
|
var bestMsg = regexp.MustCompile("/best\\z")
|
||||||
|
|
||||||
|
// Owner commands
|
||||||
|
var sendAllMsg = regexp.MustCompile("/send_all(.+)")
|
||||||
|
|
||||||
// Forwards
|
// Forwards
|
||||||
var pokememeMsg = regexp.MustCompile("(Уровень)(.+)(Опыт)(.+)\n(Элементы:)(.+)\n(.+)(💙MP)")
|
var pokememeMsg = regexp.MustCompile("(Уровень)(.+)(Опыт)(.+)\n(Элементы:)(.+)\n(.+)(💙MP)")
|
||||||
var profileMsg = regexp.MustCompile(`(Онлайн: )(\d+)\n(Турнир через)(.+)\n\n(.*)\n(Элементы)(.+)\n(.*)\n\n(.+)(Уровень)(.+)\n`)
|
var profileMsg = regexp.MustCompile(`(Онлайн: )(\d+)\n(Турнир через)(.+)\n\n(.*)\n(Элементы)(.+)\n(.*)\n\n(.+)(Уровень)(.+)\n`)
|
||||||
@ -97,7 +100,7 @@ func (r *Router) RouteRequest(update tgbotapi.Update) string {
|
|||||||
}
|
}
|
||||||
// Help
|
// Help
|
||||||
case helpMsg.MatchString(text):
|
case helpMsg.MatchString(text):
|
||||||
c.Talkers.HelpMessage(update)
|
c.Talkers.HelpMessage(update, &playerRaw)
|
||||||
// Pokememes info
|
// Pokememes info
|
||||||
case pokedexMsg.MatchString(text):
|
case pokedexMsg.MatchString(text):
|
||||||
if strings.HasSuffix(text, "1") {
|
if strings.HasSuffix(text, "1") {
|
||||||
@ -125,6 +128,13 @@ func (r *Router) RouteRequest(update tgbotapi.Update) string {
|
|||||||
// Suggestions
|
// Suggestions
|
||||||
case bestMsg.MatchString(text):
|
case bestMsg.MatchString(text):
|
||||||
c.Talkers.BestPokememesList(update, playerRaw)
|
c.Talkers.BestPokememesList(update, playerRaw)
|
||||||
|
// Admin commands
|
||||||
|
case sendAllMsg.MatchString(text):
|
||||||
|
if c.Getters.PlayerBetterThan(&playerRaw, "admin") {
|
||||||
|
c.Talkers.AdminBroadcastMessage(update)
|
||||||
|
} else {
|
||||||
|
c.Talkers.AnyMessageUnauthorized(update)
|
||||||
|
}
|
||||||
// Easter eggs
|
// Easter eggs
|
||||||
case huMsg.MatchString(text):
|
case huMsg.MatchString(text):
|
||||||
c.Talkers.MatMessage(update)
|
c.Talkers.MatMessage(update)
|
||||||
|
41
lib/talkers/broadcast.go
Normal file
41
lib/talkers/broadcast.go
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
// i2_bot – Instinct PokememBro Bot
|
||||||
|
// Copyright (c) 2017 Vladimir "fat0troll" Hodakov
|
||||||
|
|
||||||
|
package talkers
|
||||||
|
|
||||||
|
import ( // stdlib
|
||||||
|
// 3rd party
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/go-telegram-bot-api/telegram-bot-api"
|
||||||
|
)
|
||||||
|
|
||||||
|
// AdminBroadcastMessage sends message to all private chats with bot
|
||||||
|
func (t *Talkers) AdminBroadcastMessage(update tgbotapi.Update) string {
|
||||||
|
broadcastingMessageBody := strings.Replace(update.Message.Text, "/send_all", "", 1)
|
||||||
|
|
||||||
|
privateChats, ok := c.Getters.GetAllPrivateChats()
|
||||||
|
if !ok {
|
||||||
|
return "fail"
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := range privateChats {
|
||||||
|
chat := privateChats[i]
|
||||||
|
broadcastingMessage := "*Привет, " + chat.Name + "!*\n\n"
|
||||||
|
broadcastingMessage += "*Важное сообщение от администратора " + update.Message.From.FirstName + " " + update.Message.From.LastName + "* (@" + update.Message.From.UserName + ")\n\n"
|
||||||
|
broadcastingMessage += broadcastingMessageBody
|
||||||
|
|
||||||
|
msg := tgbotapi.NewMessage(int64(chat.TelegramID), broadcastingMessage)
|
||||||
|
msg.ParseMode = "Markdown"
|
||||||
|
c.Bot.Send(msg)
|
||||||
|
}
|
||||||
|
|
||||||
|
message := "Сообщение всем отправлено. Надеюсь, пользователи бота за него тебя не убьют.\n"
|
||||||
|
|
||||||
|
msg := tgbotapi.NewMessage(update.Message.Chat.ID, message)
|
||||||
|
msg.ParseMode = "Markdown"
|
||||||
|
|
||||||
|
c.Bot.Send(msg)
|
||||||
|
|
||||||
|
return "ok"
|
||||||
|
}
|
@ -8,17 +8,22 @@ import (
|
|||||||
"github.com/go-telegram-bot-api/telegram-bot-api"
|
"github.com/go-telegram-bot-api/telegram-bot-api"
|
||||||
// local
|
// local
|
||||||
"../config"
|
"../config"
|
||||||
|
"../dbmapping"
|
||||||
)
|
)
|
||||||
|
|
||||||
// HelpMessage gives user all available commands
|
// HelpMessage gives user all available commands
|
||||||
func (t *Talkers) HelpMessage(update tgbotapi.Update) {
|
func (t *Talkers) HelpMessage(update tgbotapi.Update, playerRaw *dbmapping.Player) {
|
||||||
message := "*Бот Инстинкта Enchanched.*\n\n"
|
message := "*Бот Инстинкта Enchanched.*\n\n"
|
||||||
message += "Текущая версия: *" + config.VERSION + "*\n\n"
|
message += "Текущая версия: *" + config.VERSION + "*\n\n"
|
||||||
message += "Список команд:\n\n"
|
message += "Список команд\n\n"
|
||||||
message += "+ /me – посмотреть свой сохраненный профиль в боте\n"
|
message += "+ /me – посмотреть свой сохраненный профиль в боте\n"
|
||||||
message += "+ /best – посмотреть лучших покемонов для поимки\n"
|
message += "+ /best – посмотреть лучших покемонов для поимки\n"
|
||||||
message += "+ /pokedeks – получить список известных боту покемемов\n"
|
message += "+ /pokedeks – получить список известных боту покемемов\n"
|
||||||
|
if c.Getters.PlayerBetterThan(playerRaw, "admin") {
|
||||||
|
message += "+ /send\\_all _текст_ — отправить сообщение всем пользователям бота\n"
|
||||||
|
}
|
||||||
message += "+ /help – выводит данное сообщение\n"
|
message += "+ /help – выводит данное сообщение\n"
|
||||||
|
|
||||||
message += "\n\n"
|
message += "\n\n"
|
||||||
message += "Связаться с автором: @fat0troll\n"
|
message += "Связаться с автором: @fat0troll\n"
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ type TalkersInterface interface {
|
|||||||
Init()
|
Init()
|
||||||
HelloMessageUnauthorized(update tgbotapi.Update)
|
HelloMessageUnauthorized(update tgbotapi.Update)
|
||||||
HelloMessageAuthorized(update tgbotapi.Update, playerRaw dbmapping.Player)
|
HelloMessageAuthorized(update tgbotapi.Update, playerRaw dbmapping.Player)
|
||||||
HelpMessage(update tgbotapi.Update)
|
HelpMessage(update tgbotapi.Update, playerRaw *dbmapping.Player)
|
||||||
PokememesList(update tgbotapi.Update, page int)
|
PokememesList(update tgbotapi.Update, page int)
|
||||||
PokememeInfo(update tgbotapi.Update, playerRaw dbmapping.Player) string
|
PokememeInfo(update tgbotapi.Update, playerRaw dbmapping.Player) string
|
||||||
BestPokememesList(update tgbotapi.Update, playerRaw dbmapping.Player) string
|
BestPokememesList(update tgbotapi.Update, playerRaw dbmapping.Player) string
|
||||||
@ -30,6 +30,8 @@ type TalkersInterface interface {
|
|||||||
AnyMessageUnauthorized(update tgbotapi.Update)
|
AnyMessageUnauthorized(update tgbotapi.Update)
|
||||||
GetterError(update tgbotapi.Update)
|
GetterError(update tgbotapi.Update)
|
||||||
|
|
||||||
|
AdminBroadcastMessage(update tgbotapi.Update) string
|
||||||
|
|
||||||
DurakMessage(update tgbotapi.Update)
|
DurakMessage(update tgbotapi.Update)
|
||||||
MatMessage(update tgbotapi.Update)
|
MatMessage(update tgbotapi.Update)
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user