Задать вопрос
@VinogradovDionis
Студент

Как сделать отправку сообщений в боте ВК по расписанию?

В общем, мне нужно, чтобы бот отправлял расписание в нужный день в нужный час.
У меня есть основная функция, которая принимает команды от пользователей.
Важно, чтобы бот работал в любой беседе!
Немножко разобрался с тем, как работает многопоточность, правда, бот отправляет сообщение сразу после любого сообщения, а не по таймеру. Интересно понять, как он должен отправлять сообщения в беседу в независимости от того, что в ней пишут, и по конкретному таймеру.

Основной код, который работает при взаимодействии с пользователем в беседе:

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)


В принт при тестах все замечательно выводилось по времени, но в сообщения беседы не выводилось.
  • Вопрос задан
  • 219 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы