Archived
1
This repository has been archived on 2022-11-04. You can view files and clone it, but cannot push or open issues or pull requests.
i2_bot/lib/pinner/pinner.go

117 lines
3.5 KiB
Go
Raw Normal View History

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"
"source.wtfteam.pro/i2_bot/i2_bot/lib/dbmapping"
2017-11-14 03:44:21 +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"
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())
}
}
}
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"
}
// 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)
}
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"
}
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
}
groupChats := c.DataCache.GetGroupChatsByIDs(chatsIDs)
2017-11-26 08:31:56 +04:00
c.Log.Debug("Got " + strconv.Itoa(len(groupChats)) + " group chats...")
return p.execMassMessagePin(update, groupChats)
}