0 / 0 / 0
Регистрация: 29.05.2021
Сообщений: 77
Telegram Bot

Как реализовать ежедневную отправку сообщений и запоминать старые, дабы они не повторялись?

20.08.2023, 13:36. Показов 1129. Ответов 0

Студворк — интернет-сервис помощи студентам
здраствуйте, это опять я со своим ботом.
казалось бы, простые вещи, но с этими вещами я сижу неделями.
задача №1 - сделать так чтобы бот каждый день в определённое время отправлял пользователю анекдот. В своих попытках использовал модули time, schedule, а также JobQueue.

версия с schedule:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import sys
import time
import logging
import telebot
import schedule
from telebot import types
 
 
import config
 
sys.path.insert(0, 'C:/Users/Admin/OneDrive/Рабочий стол/проект бот анектод v2/parsing')
from parser_itelepat import list_jokes
 
 
logging.basicConfig(filename='bot.log', level=logging.INFO)
 
bot = telebot.TeleBot(config.token)
 
 
@bot.message_handler(commands=['joke'])
def jokes(message):
    bot.send_message(chat_id=message.from_user.id, text=list_jokes[0])
 
 
bot.polling()
 
 
schedule.every().day.at("12:00").do(jokes)
 
 
while True:
    schedule.run_pending()
    time.sleep(1)
версия с JobQueue:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import sys
import time
import logging
import telebot
from telebot import types
from telegram.ext import JobQueue
 
 
import config
 
sys.path.insert(0, 'C:/Users/Admin/OneDrive/Рабочий стол/проект бот анектод v2/parsing')
from parser_itelepat import list_jokes
 
 
logging.basicConfig(filename='bot.log', level=logging.INFO)
 
bot = telebot.TeleBot(config.token)
 
 
@bot.message_handler(commands=['joke'])
def jokes(message):
    bot.send_message(chat_id=message.from_user.id, text=list_jokes[0])
 
 
def callback_alarm(context: telegram.ext.CallbackContext):
  bot.send_message(chat_id=id, text='Hi, This is a daily reminder')
 
def reminder(update,context):
   bot.send_message(chat_id = update.effective_chat.id , text='Daily reminder has been set! You\'ll get notified at 8 AM daily')
   context.job_queue.run_daily(callback_alarm, context=update.message.chat_id,days=(0, 1, 2, 3, 4, 5, 6),time = time(hour = 9, minute = 55, second = 00))
 
def run_daily():
    run_daily(callback, time, days=(0, 1, 2, 3, 4, 5, 6), context=None, name=None)
 
run_daily()
 
 
bot.polling()
Задача №2 - сделать так, чтобы один и тот же анекдот не отправлялся 2 раза. Если однажды он отправится, то бот "запомнит" его и уже никогда не отправит второй раз.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import os
import sys
import time
import pickle
import logging
import telebot
import schedule
from telebot import types
from telegram.ext import JobQueue
 
 
import config
 
sys.path.insert(0, 'C:/Users/Admin/OneDrive/Рабочий стол/проект бот анектод v2/parsing')
from parser_itelepat import list_jokes
 
 
sent_messages_file = "sent_messages.pickle"
 
if os.path.exists(sent_messages_file):
    with open(sent_messages_file, "rb") as f:
        sent_messages = pickle.load(f)
else:
    sent_messages = []
 
 
logging.basicConfig(filename='bot.log', level=logging.INFO)
 
bot = telebot.TeleBot(config.token)
 
 
@bot.message_handler(commands=['joke'])
def jokes(message):
    bot.send_message(chat_id=message.from_user.id, text=list_jokes[0])
 
    #sent_messages.append(message)
    sent_messages.append(list_jokes)
    with open(sent_messages_file, "wb") as f:
        pickle.dump(sent_messages, f)
 
 
bot.polling()
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.08.2023, 13:36
Ответы с готовыми решениями:

Как реализовать отправку сообщений между двумя клиентами (пк)?
кое как разобрался с языком.понятное дело просто синтаксис.без winapi некуда(я виндовщик) и захотел понять как работать с сетями. есть...

Как выбрать случайные цифры, они не повторялись?
Здравствуйте! С помощью функции rand написал скрипт который выбирает случайные цифры, но не могу так сделать что цифры не повторялись,...

Как выбрать элементы, чтобы они не повторялись?
Добрый вечер, я только учусь и передо мной поставили такую задачу вывести из таблицы только уникальные записи, вот вид таблицы N ...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.08.2023, 13:36
Помогаю со студенческими работами здесь

Как студии-разработчики сайтов отслеживают свои шаблоны дабы они не использовались без их копирайта и бесплатно
Всем добрый вечер. Возник такой вот вопрос.) Как студии-разработчики сайтов отслеживают свои шаблоны дабы они не использовались...

Как вывести 20 случайных цифр от 1-20, и чтоб они не повторялись
Как вывести 20 случайных цифр от 1-20, и чтоб они не повторялись

rand(1, 25) Как сгенерить 5 чисел, что бы они не повторялись.
В принципе вопрос в названии темы. И в принципе задача не такая сложная, но хочется увидеть возможные варианты. я думаю так создаем 5...

Как сгенерировать в 20 button числа от 1 до 20 и чтобы они не повторялись
Как сгенерировать в 20 кнопок (button) числа от 1 до 20 и чтобы они не повторялись?

Массив случайных чисел, как сделать чтоб они не повторялись?
Я сделал массив с рандомными числами, как сделать чтоб они не повторялись ? srand(time(NULL)); int*Arr; const int R=10; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru