Сделал парсер в телегу, но не работает
Много раз уже обращался к этому сайту. Проблема в том, что бот должен отправлять сообщение каждый понедельник в 12:00, но в место этого в консоли пишется:
TypeError: send_message() missing 1 required positional argument: 'message'
import requests
import telebot
from bs4 import BeautifulSoup as BS
import schedule
import time
bot = telebot.TeleBot("...")
authdata = {'login': '...', 'password': '...'}
session = requests.Session()
response = session.post('https://stat.system-ural.ru/', data=authdata)
parsedata = session.post('https://stat.system-ural.ru')
html = BS(parsedata.content, 'html.parser')
items = html.find_all("td", class_="utm-cell")
kot = []
for item in items:
a = item.text
kot.append(a)
summ = kot[7]
@bot.message_handler(commands=["start"])
def main(message):
bot.send_message(message.chat.id, f"Ваш баланс: {summ}р")
def send_message(message):
bot.send_message(message.chat.id, f'Ваш баланс: {summ}р')
print('Отправлено')
schedule.every().day.at('12:08').do(send_message)
while True:
schedule.run_pending()
time.sleep(1)
bot.polling(none_stop=True)
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
Вариант простой, если вы заранее знаете chat_id:
def send_message(chat_id: int):
bot.send_message(chat_id, f'Ваш баланс: {summ}р')
print('Отправлено')
schedule.every().day.at('12:08').do(lambda: send_message(<тут указываете ваш chat_id>))
или тоже через глобальную переменную (я бы не советовал использовать глобальные переменные):
chat_id = ...
def send_message():
bot.send_message(chat_id, f'Ваш баланс: {summ}р')
print('Отправлено')
schedule.every().day.at('12:08').do(send_message)
В другом случае, если chat_id и summ несколько, то нужно откуда-то брать их значения (из базы данных например), тогда можно было сделать что-то вроде:
def send_messages():
for chat_id, summ in select.from.users.all():
bot.send_message(chat_id, f'Ваш баланс: {summ}р')
print('Отправлено')
schedule.every().day.at('12:08').do(send_messages)
UPD. Отправка schedule в отдельный поток
from threading import Thread
...
schedule.every().day.at('12:08').do(send_message)
def do_schedule():
while True:
schedule.run_pending()
time.sleep(1)
Thread(target=do_schedule).start()
bot.polling(none_stop=True)
...