2017-11-14 03:44:21 +04:00
// i2_bot – Instinct PokememBro Bot
// Copyright (c) 2017 Vladimir "fat0troll" Hodakov
package pinner
import (
"github.com/go-telegram-bot-api/telegram-bot-api"
2017-11-26 08:31:56 +04:00
"strconv"
"strings"
2017-11-14 03:44:21 +04:00
)
// PinMessageToAllChats pins message to all groups where bot exist
func ( p * Pinner ) PinMessageToAllChats ( update * tgbotapi . Update ) string {
messageToPin := update . Message . CommandArguments ( )
if messageToPin == "" {
return "fail"
}
2017-11-19 22:16:11 +04:00
groupChats , ok := c . Chatter . GetAllGroupChats ( )
2017-11-14 03:44:21 +04:00
if ! ok {
return "fail"
}
2017-11-26 08:31:56 +04:00
for i := range groupChats {
if groupChats [ i ] . ChatType == "supergroup" {
message := messageToPin + "\n\n"
message += "© " + update . Message . From . FirstName + " " + update . Message . From . LastName
message += " (@" + update . Message . From . UserName + ")"
msg := tgbotapi . NewMessage ( groupChats [ i ] . TelegramID , message )
msg . ParseMode = "Markdown"
pinnableMessage , err := c . Bot . Send ( msg )
if err != nil {
c . Log . Error ( err . Error ( ) )
message := "*Ваше сообщение не отправлено.*\n\n"
message += "Обычно это связано с тем, что нарушена разметка Markdown. "
message += "К примеру, если вы хотели использовать нижнее\\_по дчёр кива ние , то печатать е г о надо так — \\\\_. Т о же самое касается всех управляющих разметкой символов в Markdown в случае, если вы их хотите использовать как текст, а не как управляющий символ Markdown."
msg := tgbotapi . NewMessage ( update . Message . Chat . ID , message )
msg . ParseMode = "Markdown"
c . Bot . Send ( msg )
return "fail"
}
pinChatMessageConfig := tgbotapi . PinChatMessageConfig {
ChatID : pinnableMessage . Chat . ID ,
MessageID : pinnableMessage . MessageID ,
DisableNotification : true ,
}
_ , err = c . Bot . PinChatMessage ( pinChatMessageConfig )
if err != nil {
c . Log . Error ( err . Error ( ) )
}
}
}
message := "*Ваше сообщение отправлено и запинено во все чаты, где сидит бот.*\n\n"
message += "Текст отправленного сообщения:\n\n"
message += messageToPin
msg := tgbotapi . NewMessage ( update . Message . Chat . ID , message )
msg . ParseMode = "Markdown"
c . Bot . Send ( msg )
return "ok"
}
// PinMessageToSomeChats pins message to selected groups where bot exist
func ( p * Pinner ) PinMessageToSomeChats ( update * tgbotapi . Update ) string {
commandArgs := update . Message . CommandArguments ( )
commandArgsList := strings . Split ( commandArgs , " " )
if len ( commandArgsList ) < 2 {
return "fail"
}
2017-11-29 17:34:07 +04:00
chatsToPin := ""
messageToPin := ""
for i := range commandArgsList {
if i == 0 {
chatsToPin = commandArgsList [ i ]
} else {
messageToPin += commandArgsList [ i ]
}
}
2017-11-26 08:31:56 +04:00
if messageToPin == "" {
return "fail"
}
groupChats , ok := c . Chatter . GetGroupChatsByIDs ( chatsToPin )
if ! ok {
return "fail"
}
c . Log . Debug ( "Got " + strconv . Itoa ( len ( groupChats ) ) + " group chats..." )
2017-11-14 03:44:21 +04:00
for i := range groupChats {
if groupChats [ i ] . ChatType == "supergroup" {
message := messageToPin + "\n\n"
message += "© " + update . Message . From . FirstName + " " + update . Message . From . LastName
message += " (@" + update . Message . From . UserName + ")"
msg := tgbotapi . NewMessage ( groupChats [ i ] . TelegramID , message )
msg . ParseMode = "Markdown"
pinnableMessage , err := c . Bot . Send ( msg )
if err != nil {
c . Log . Error ( err . Error ( ) )
message := "*Ваше сообщение не отправлено.*\n\n"
message += "Обычно это связано с тем, что нарушена разметка Markdown. "
message += "К примеру, если вы хотели использовать нижнее\\_по дчёр кива ние , то печатать е г о надо так — \\\\_. Т о же самое касается всех управляющих разметкой символов в Markdown в случае, если вы их хотите использовать как текст, а не как управляющий символ Markdown."
msg := tgbotapi . NewMessage ( update . Message . Chat . ID , message )
msg . ParseMode = "Markdown"
c . Bot . Send ( msg )
return "fail"
}
pinChatMessageConfig := tgbotapi . PinChatMessageConfig {
ChatID : pinnableMessage . Chat . ID ,
MessageID : pinnableMessage . MessageID ,
DisableNotification : true ,
}
_ , err = c . Bot . PinChatMessage ( pinChatMessageConfig )
if err != nil {
c . Log . Error ( err . Error ( ) )
}
}
}
message := "*Ваше сообщение отправлено и запинено во все чаты, где сидит бот.*\n\n"
message += "Текст отправленного сообщения:\n\n"
message += messageToPin
msg := tgbotapi . NewMessage ( update . Message . Chat . ID , message )
msg . ParseMode = "Markdown"
c . Bot . Send ( msg )
return "ok"
}
2017-11-24 13:24:36 +04:00
// PinBattleAlert pins to all squads 'battle alert' at :55 of every even hour
// Even hours are in Moscow timezone
func ( p * Pinner ) PinBattleAlert ( ) {
c . Log . Debug ( "> Cron invoked PinBattleAlert()" )
message := "*Турнир Лиги покемемов состоится через 5 минут!*\nБо е ва я готовность, отряд!"
groupChats , _ := c . Squader . GetAllSquadChats ( )
for i := range groupChats {
if groupChats [ i ] . ChatType == "supergroup" {
msg := tgbotapi . NewMessage ( groupChats [ i ] . TelegramID , message )
msg . ParseMode = "Markdown"
pinnableMessage , err := c . Bot . Send ( msg )
if err != nil {
c . Log . Error ( err . Error ( ) )
}
pinChatMessageConfig := tgbotapi . PinChatMessageConfig {
ChatID : pinnableMessage . Chat . ID ,
MessageID : pinnableMessage . MessageID ,
2017-11-26 06:48:13 +04:00
DisableNotification : false ,
2017-11-24 13:24:36 +04:00
}
_ , err = c . Bot . PinChatMessage ( pinChatMessageConfig )
if err != nil {
c . Log . Error ( err . Error ( ) )
}
}
}
}