В общем, мне нужно, чтобы бот отправлял расписание в нужный день в нужный час.
У меня есть основная функция, которая принимает команды от пользователей.
Важно, чтобы бот работал в любой беседе!
Немножко разобрался с тем, как работает многопоточность, правда, бот отправляет сообщение сразу после любого сообщения, а не по таймеру. Интересно понять, как он должен отправлять сообщения в беседу в независимости от того, что в ней пишут, и по конкретному таймеру.
Основной код, который работает при взаимодействии с пользователем в беседе:
def sender(id,text):
vk_session.method('messages.send',{'chat_id': id ,'message' : text, 'random_id':0})
def main():
for event in longpoll.listen():
if event.type == VkBotEventType.MESSAGE_NEW:
if event.from_chat:
id = event.chat_id
msg = event.object.message['text'].lower()
if msg in mat:
mat_bot_p = mat_bot[random.randint(0,len(mat_bot)-1)]
sender(id,mat_bot_p) # фильтр нецензурных слов
if msg == 'анекдот':
sender(id,getanekdot()) # тестовая функция парсера
Суть моей многопоточности заключалась в том, что целью была функция, в которой я прописывал время отправки и то, что должно отправиться через schedule
Выглядело это примерно так же, как в документации:
import threading
import time
import schedule
def job():
print("I'm running on thread %s" % threading.current_thread())
def run_threaded(job_func):
job_thread = threading.Thread(target=job_func)
job_thread.start()
schedule.every(10).seconds.do(run_threaded, job)
schedule.every(10).seconds.do(run_threaded, job)
schedule.every(10).seconds.do(run_threaded, job)
schedule.every(10).seconds.do(run_threaded, job)
schedule.every(10).seconds.do(run_threaded, job)
while 1:
schedule.run_pending()
time.sleep(1)
В принт при тестах все замечательно выводилось по времени, но в сообщения беседы не выводилось.