2017-10-22 14:04:14 +04:00
// i2_bot – Instinct PokememBro Bot
// Copyright (c) 2017 Vladimir "fat0troll" Hodakov
package talkers
2017-10-22 15:29:48 +04:00
import (
// stdlib
"strconv"
2017-10-22 14:04:14 +04:00
"strings"
2017-10-22 15:29:48 +04:00
// 3rd party
2017-10-22 14:04:14 +04:00
"github.com/go-telegram-bot-api/telegram-bot-api"
2017-10-22 15:29:48 +04:00
// local
2017-10-26 18:17:58 +04:00
"lab.pztrn.name/fat0troll/i2_bot/lib/dbmapping"
2017-10-22 14:04:14 +04:00
)
2017-10-22 15:29:48 +04:00
// AdminBroadcastMessageCompose saves message for future broadcast
func ( t * Talkers ) AdminBroadcastMessageCompose ( update tgbotapi . Update , playerRaw * dbmapping . Player ) string {
broadcastingMessageBody := strings . Replace ( update . Message . Text , "/send_all " , "" , 1 )
messageRaw , ok := c . Getters . CreateBroadcastMessage ( playerRaw , broadcastingMessageBody , "all" )
if ! ok {
return "fail"
}
message := "Сообщение сохранено в базу.\n"
message += "Выглядеть оно будет так:"
msg := tgbotapi . NewMessage ( update . Message . Chat . ID , message )
msg . ParseMode = "Markdown"
c . Bot . Send ( msg )
broadcastingMessage := "*Привет, %username%!*\n\n"
broadcastingMessage += "*Важное сообщение от администратора " + update . Message . From . FirstName + " " + update . Message . From . LastName + "* (@" + update . Message . From . UserName + ")\n\n"
broadcastingMessage += messageRaw . Text
msg = tgbotapi . NewMessage ( update . Message . Chat . ID , broadcastingMessage )
msg . ParseMode = "Markdown"
c . Bot . Send ( msg )
message = "Чтобы отправить сообщение всем, отправь команду /send\\_confirm " + strconv . Itoa ( messageRaw . ID )
msg = tgbotapi . NewMessage ( update . Message . Chat . ID , message )
msg . ParseMode = "Markdown"
c . Bot . Send ( msg )
return "ok"
}
// AdminBroadcastMessageSend sends saved message to all private chats
func ( t * Talkers ) AdminBroadcastMessageSend ( update tgbotapi . Update , playerRaw * dbmapping . Player ) string {
messageNum := strings . Replace ( update . Message . Text , "/send_confirm " , "" , 1 )
messageNumInt , _ := strconv . Atoi ( messageNum )
messageRaw , ok := c . Getters . GetBroadcastMessageByID ( messageNumInt )
if ! ok {
return "fail"
}
if messageRaw . AuthorID != playerRaw . ID {
return "fail"
}
if messageRaw . Status != "new" {
return "fail"
}
broadcastingMessageBody := messageRaw . Text
2017-10-22 14:04:14 +04:00
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 )
}
2017-10-22 15:29:48 +04:00
messageRaw , ok = c . Getters . UpdateBroadcastMessageStatus ( messageRaw . ID , "sent" )
if ! ok {
return "fail"
}
2017-10-22 14:04:14 +04:00
message := "Сообщение всем отправлено. Надеюсь, пользователи бота за него тебя не убьют.\n"
msg := tgbotapi . NewMessage ( update . Message . Chat . ID , message )
msg . ParseMode = "Markdown"
c . Bot . Send ( msg )
return "ok"
}