- Статус
- Оффлайн
- Регистрация
- 31 Май 2019
- Сообщения
- 245
- Реакции
- 84
Доброго времени суток
По просьбе @thip76 я решил поделиться с вами интересным решением для Telegram бота, позволяющим делать простую рассылку сообщений во все открытые группы, в которые приглашен ваш бот. Для создания подобного бота понадобится библиотека Telebot для Python (подробнее о ней можно прочитать
Пожалуйста, авторизуйтесь для просмотра ссылки.
). Останавливаться на ее установке я не буду, это достаточно просто сделать с помощью pip или ручной установки.Для работы бота понадобится создать 2 текстовых файла -
groups.txt и admins.txt. В них будут храниться списки групп для рассылки и id пользователей, которые могут добавлять или удалять эти группы. Реализацию данных функций вы можете изменить под себя, если в это есть какая-либо необходимость. Исходный код бота на Python представлен ниже:
Python:
import telebot
import re
import datetime
bot = telebot.TeleBot('токен')
def is_admin(username):
with open('admins.txt') as f:
strings = f.read()
return True if username in strings else False
def delete_group(group, message):
with open('groups.txt') as f:
strings = open("groups.txt").read()
if group in strings:
with open('groups.txt') as f:
lines = f.readlines()
pattern = re.compile(re.escape(group))
with open('groups.txt', 'w') as f:
for line in lines:
result = pattern.search(line)
if result is None:
f.write(line)
bot.send_message(message.chat.id, 'Группа успешно удалена!')
else:
bot.send_message(message.chat.id, 'Группа не найдена!')
def add_group(group, message):
strings = open("groups.txt").read()
if group in strings:
bot.send_message(message.chat.id, 'Группа уже добавлена!')
else:
with open('groups.txt', 'a') as file:
file.write('\n'+group)
bot.send_message(message.chat.id, 'Группа успешно добавлена!')
def add_spam(text, message):
try:
with open('groups.txt') as f:
lines = f.readlines()
for group in lines:
if group != '\n' and group != "":
bot.send_message(int(group), text)
bot.send_message(message.chat.id, 'Успешно!')
except Exception as er:
print("Ошибка отправки спама :(\n"+str(er))
@bot.message_handler(commands=['start', 'id'])
def start_messages(message):
if message.chat.type == "supergroup":
if "/id" in message.text:
bot.send_message(message.chat.id, "ID вашего чата: " + str(message.chat.id))
if "/start" in message.text:
add_group(str(message.chat.id), message)
@bot.message_handler(content_types=['text'])
def get_text_messages(message):
if message.chat.type == "private":
if is_admin(str(message.from_user.id)):
if "/delete " in message.text:
try:
group = message.text[8:]
delete_group(group,message)
except Exception as er:
bot.send_message(message.chat.id, 'Ошибка во время выполнения скрипта!\n'+str(er))
elif "/add " in message.text:
group = message.text[5:]
try:
add_group(group,message)
except Exception as er:
bot.send_message(message.chat.id, 'Ошибка во время выполнения скрипта!\n'+str(er))
elif "/spam " in message.text:
text = message.text[6:]
try:
add_spam(text,message)
except Exception as er:
bot.send_message(message.chat.id, 'Ошибка во время выполнения скрипта!\n'+str(er))
bot.polling(none_stop=True, interval=0)
При желании можно добавить постоянную рассылку сообщений, например каждые 2-3 часа. Для этого нужно добавить в новый асинхронный поток проверку на прошедшее время и выполнение отправки нужного вам сообщения при ее прохождении. Если понадобится более подробно разъяснить, как это делается - можете отписать в тему или мне в личные сообщения.