117 lines
3.4 KiB
Go
117 lines
3.4 KiB
Go
// i2_bot – Instinct PokememBro Bot
|
||
// Copyright (c) 2017 Vladimir "fat0troll" Hodakov
|
||
|
||
package pinner
|
||
|
||
import (
|
||
"strconv"
|
||
"strings"
|
||
|
||
"github.com/go-telegram-bot-api/telegram-bot-api"
|
||
"github.com/fat0troll/i2_bot/lib/dbmapping"
|
||
)
|
||
|
||
func (p *Pinner) execMassMessagePin(update *tgbotapi.Update, groupChats []dbmapping.Chat) string {
|
||
messageToPin := update.Message.CommandArguments()
|
||
for i := range groupChats {
|
||
if groupChats[i].ChatType == "supergroup" {
|
||
message := messageToPin + "\n\n"
|
||
message += "© " + c.Users.GetPrettyName(update.Message.From)
|
||
|
||
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"
|
||
}
|
||
|
||
// 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"
|
||
}
|
||
|
||
groupChats := c.DataCache.GetAllGroupChats()
|
||
|
||
return p.execMassMessagePin(update, groupChats)
|
||
}
|
||
|
||
// 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"
|
||
}
|
||
|
||
chatsToPin := ""
|
||
messageToPin := ""
|
||
|
||
for i := range commandArgsList {
|
||
if i == 0 {
|
||
chatsToPin = commandArgsList[i]
|
||
} else {
|
||
messageToPin += commandArgsList[i] + " "
|
||
}
|
||
}
|
||
|
||
if messageToPin == "" {
|
||
return "fail"
|
||
}
|
||
|
||
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)
|
||
}
|
||
|
||
groupChats := c.DataCache.GetGroupChatsByIDs(chatsIDs)
|
||
c.Log.Debug("Got " + strconv.Itoa(len(groupChats)) + " group chats...")
|
||
|
||
return p.execMassMessagePin(update, groupChats)
|
||
}
|