2017-11-14 03:44:21 +04:00
// i2_bot – Instinct PokememBro Bot
// Copyright (c) 2017 Vladimir "fat0troll" Hodakov
package pinner
import (
2017-11-26 08:31:56 +04:00
"strconv"
"strings"
2018-05-02 07:25:39 +04:00
"github.com/go-telegram-bot-api/telegram-bot-api"
2018-05-19 12:14:25 +04:00
"github.com/fat0troll/i2_bot/lib/dbmapping"
2017-11-14 03:44:21 +04:00
)
2017-12-23 01:40:36 +04:00
func ( p * Pinner ) execMassMessagePin ( update * tgbotapi . Update , groupChats [ ] dbmapping . Chat ) string {
2017-11-14 03:44:21 +04:00
messageToPin := update . Message . CommandArguments ( )
2017-11-26 08:31:56 +04:00
for i := range groupChats {
if groupChats [ i ] . ChatType == "supergroup" {
message := messageToPin + "\n\n"
2017-12-23 01:40:36 +04:00
message += "© " + c . Users . GetPrettyName ( update . Message . From )
2017-11-26 08:31:56 +04:00
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 ( ) )
}
}
}
2017-12-23 01:40:36 +04:00
message := "*Ваше сообщение отправлено и запинено в чаты, где сидит бот.*\n\n"
2017-11-26 08:31:56 +04:00
message += "Текст отправленного сообщения:\n\n"
message += messageToPin
msg := tgbotapi . NewMessage ( update . Message . Chat . ID , message )
msg . ParseMode = "Markdown"
c . Bot . Send ( msg )
return "ok"
}
2017-12-23 01:40:36 +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"
}
2018-02-17 07:03:58 +04:00
groupChats := c . DataCache . GetAllGroupChats ( )
2017-12-23 01:40:36 +04:00
return p . execMassMessagePin ( update , groupChats )
}
2017-11-26 08:31:56 +04:00
// 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 {
2017-12-03 00:40:30 +04:00
messageToPin += commandArgsList [ i ] + " "
2017-11-29 17:34:07 +04:00
}
}
2017-11-26 08:31:56 +04:00
if messageToPin == "" {
return "fail"
}
2018-02-17 07:03:58 +04:00
chatsIDs := make ( [ ] int , 0 )
chatsIDsArray := strings . Split ( chatsToPin , "," )
for i := range chatsIDsArray {
chatIDInt , err := strconv . Atoi ( chatsIDsArray [ i ] )
if err != nil {
c . Log . Error ( err . Error ( ) )
return "fail"
}
chatsIDs = append ( chatsIDs , chatIDInt )
2017-11-26 08:31:56 +04:00
}
2018-02-17 07:03:58 +04:00
groupChats := c . DataCache . GetGroupChatsByIDs ( chatsIDs )
2017-11-26 08:31:56 +04:00
c . Log . Debug ( "Got " + strconv . Itoa ( len ( groupChats ) ) + " group chats..." )
2017-12-23 01:40:36 +04:00
return p . execMassMessagePin ( update , groupChats )
2017-11-24 13:24:36 +04:00
}