Автоматические сообщения от чатбота телеграмм пользователям
Как можно настроить автопостинг телеграмм бота?
Например, я хочу, чтобы всем пользователям бот написал 31 декабря в 15:00 сообщение "С наступающим новым годом, друзья!".
Пока не представляю даже, как это реализовать и какие есть работающие методы.
Пока пытаюсь собирать айдишники людей, которые обращаются к боту, следующим образом:
joinedFile = open ("C:/admin.txt", 'r')
joinedUsers = set()
for line in joinedFile:
joinedUsers.add(line.strip())
joinedFile.close()
@bot.message_handler(commands=['start'])
def startJoin(message):
if not str(message.chat.id) in joinedUsers:
joinedFile = open("C:/admin.txt", 'a')
joinedFile.write(str(message.chat.id)) + '\n'
joinedUsers.add(message.chat.id)
@bot.message_handler(commands=['special'])
def mess(message):
for user in joinedUsers:
bot.send_message(user, message.text[message.text.find(' '):])
Что-то делаю не так: бот не отправляет сообщения
import datetime
import telebot
bot = telebot.TeleBot('token')
@bot.message_handler()
def mess(message):
today = datetime.date.today()
if today.year == 2020 and today.month == 8 and today.day == 27:
bot.send_message(*здесь id конкретного человека*, "С наступающим новым годом, друзья!")
bot.polling(none_stop=True, interval=0)
и вот так тоже
def send_message():
bot.send_message(*здесь id конкретного человека*, 'Hello')
schedule.every().Thursday.at("20:55").do(send_message())
while True:
schedule.run_pending()
time.sleep(1)
Последняя правка:
import datetime
import telebot
import schedule
import time
bot = telebot.TeleBot('токен')
joinedFile = open('C:/Users/joined.txt', 'r')
joinedUser = set()
for line in joinedFile:
joinedUser.add(line.strip())
joinedFile.close()
@bot.message_handler(commands=['start'])
def start(message):
if not str(message.chat.id) in joinedUser:
file = open('C:/Users/joined.txt', 'a')
file.write(str(message.chat.id) + '\n')
file.close()
def start_message(message):
bot.send_message(message.chat.id, 'Привет, ' + str(message.from_user.first_name) + '!')
bot.send_sticker(message.chat.id, 'CAACAgIAAxkBAAIFPl9Et_P93IpHwPWv0IH_T1ovdN74AAJ0AQACz7vUDvujftMdDnk4GwQ')
def new_year_greetings(joinedUser):
today = datetime.date.today()
if today.month == 8 and today.day == 28:
for user in joinedUser:
bot.send_message(user, "С наступающим новым годом, друзья!")
def notifications(joinedUser):
"""Каждый день проверяем в 00:01 не новый ли год наступает"""
schedule.every().day.at('00:01').do(new_year_greetings, joinedUser)
while True:
schedule.run_pending()
time.sleep(1) # можно значительно увеличить это значение (сейчас интервал 1 секунда)
if __name__ == '__main__':
bot.polling(none_stop=True)
notifications(joinedUser)
Ответы (1 шт):
Автор решения: Serg Bocharov
→ Ссылка
Как-то так:
import datetime
@bot.message_handler()
def mess(message):
today = datetime.date.today()
if today.month == 12 and today.day == 31:
for user in joinedUsers:
bot.send_message(user, "С наступающим новым годом, друзья!")
UPDATE. Вот только что проверил полностью работает:
import datetime
import telebot
bot = telebot.TeleBot('token')
@bot.message_handler(commands=['start'])
def mess(message):
today = datetime.date.today()
if today.year == 2020 and today.month == 8 and today.day == 27:
bot.send_message(message.from_user.id, "С наступающим новым годом, друзья!")
bot.polling(none_stop=True, interval=0)
UPDATE 2. Просто добавьте это отдельной функцией которая будет выполняться при соответствии условий и запустите в отдельном потоке:
import datetime
import telebot
import schedule
import time
import threading
bot = telebot.TeleBot('ваш токен')
joinedFile = open('joined.txt', 'r')
joinedUser = set()
for line in joinedFile:
joinedUser.add(line.strip())
joinedFile.close()
@bot.message_handler(commands=['start'])
def start(message):
if not str(message.chat.id) in joinedUser:
file = open('joined.txt', 'a+')
file.write(str(message.chat.id) + '\n')
file.close()
@bot.message_handler(content_types=["text"])
def start_message(message):
bot.send_message(message.chat.id, f'Привет, {message.from_user.first_name} !')
bot.send_sticker(message.chat.id, 'CAACAgIAAxkBAAIFPl9Et_P93IpHwPWv0IH_T1ovdN74AAJ0AQACz7vUDvujftMdDnk4GwQ')
def new_year_greetings(joinedUser):
today = datetime.date.today()
if today.month == 8 and today.day == 28:
for user in joinedUser:
bot.send_message(user, "С наступающим новым годом, друзья!")
def notifications(joinedUser):
"""Каждый день проверяем в 00:01 не новый ли год наступает"""
schedule.every().day.at('00:59').do(new_year_greetings, joinedUser)
while True:
schedule.run_pending()
time.sleep(1) # можно значительно увеличить это значение (сейчас интервал 1 секунда)
if __name__ == '__main__':
t1 = threading.Thread(target=bot.polling)
t2 = threading.Thread(target=notifications, args=(joinedUser,))
t1.start()
t2.start()
t1.join()
t2.join()