add Holiday Reminder

This commit is contained in:
Rykov7
2022-08-21 06:13:30 +03:00
parent 72478a6f37
commit e7ea01c3d2
7 changed files with 84 additions and 21 deletions
+2
View File
@@ -3,3 +3,5 @@
/testbot.py /testbot.py
/.venv/ /.venv/
/.idea/ /.idea/
/config.py
/.env
+25 -15
View File
@@ -4,13 +4,17 @@ from flask import Flask, request, abort
from query_log import logging from query_log import logging
from datetime import datetime as dt from datetime import datetime as dt
from os.path import exists from os.path import exists
import os
from config import bot, ADMIN_ID
import reminder
# https://core.telegram.org/bots/api Telegram Bot API # https://core.telegram.org/bots/api Telegram Bot API
LUTZPYBOT = "5598132169:AAFBpUn4Us8m7StkY4yHUIcEnnJg3adPvsQ"
app = Flask(__name__)
bot = telebot.TeleBot(LUTZPYBOT)
print("LutzPyBot is working!") app = Flask(__name__)
print("LutzBot is running!")
@bot.message_handler(commands=['rules', 'faq']) @bot.message_handler(commands=['rules', 'faq'])
@@ -38,14 +42,14 @@ def send_lutz_command(message):
@bot.message_handler(commands=['start']) @bot.message_handler(commands=['start'])
def send_start_notify_admin(message): def send_start_notify_admin(message):
bot.send_message( bot.send_message(
280887861, get_me(message), parse_mode='HTML') ADMIN_ID, get_me(message), parse_mode='HTML')
logging(message) logging(message)
@bot.message_handler(commands=['log']) @bot.message_handler(commands=['log'])
def send_log_file(message): def send_log_file(message):
"""Get log.csv""" """Get log.csv"""
if message.from_user.id == 280887861: if message.from_user.id == ADMIN_ID:
file_path = f"logs/log_{dt.now().strftime('%Y-%m')}.csv" file_path = f"logs/log_{dt.now().strftime('%Y-%m')}.csv"
if exists(file_path): if exists(file_path):
with open(file_path, "r", encoding='utf-8') as f: with open(file_path, "r", encoding='utf-8') as f:
@@ -63,7 +67,7 @@ def default_query(inline_query):
├ Автор: Марк Лутц ├ Автор: Марк Лутц
└ Год: 2019""", └ Год: 2019""",
parse_mode='HTML', parse_mode='HTML',
) )
matthes_rus = telebot.types.InlineQueryResultCachedDocument( matthes_rus = telebot.types.InlineQueryResultCachedDocument(
id='45', title='📕 Изучаем Python 🇷🇺', id='45', title='📕 Изучаем Python 🇷🇺',
@@ -73,7 +77,7 @@ def default_query(inline_query):
├ Автор: Эрик Мэтиз ├ Автор: Эрик Мэтиз
└ Год: 2020""", └ Год: 2020""",
parse_mode='HTML', parse_mode='HTML',
) )
lutz = telebot.types.InlineQueryResultDocument( lutz = telebot.types.InlineQueryResultDocument(
id='1', title='📕 Learning Python ⭐️', id='1', title='📕 Learning Python ⭐️',
@@ -84,7 +88,7 @@ def default_query(inline_query):
└ Released June 2013""", └ Released June 2013""",
parse_mode='HTML', parse_mode='HTML',
mime_type='application/pdf', mime_type='application/pdf',
thumb_url='https://fk7.ru/books/OReilly.Learning.Python.5th.Edition.jpg',) thumb_url='https://fk7.ru/books/OReilly.Learning.Python.5th.Edition.jpg', )
matthes = telebot.types.InlineQueryResultDocument( matthes = telebot.types.InlineQueryResultDocument(
id='2', title='📕 Python Crash Course', id='2', title='📕 Python Crash Course',
@@ -95,7 +99,7 @@ def default_query(inline_query):
└ Released 2019""", └ Released 2019""",
parse_mode='HTML', parse_mode='HTML',
mime_type='application/pdf', mime_type='application/pdf',
thumb_url='https://fk7.ru/books/PythonCrashCourse.jpg',) thumb_url='https://fk7.ru/books/PythonCrashCourse.jpg', )
vincent = telebot.types.InlineQueryResultDocument( vincent = telebot.types.InlineQueryResultDocument(
id='3', title='📕 Django for Beginners', id='3', title='📕 Django for Beginners',
@@ -106,17 +110,17 @@ def default_query(inline_query):
└ Released March 2022""", └ Released March 2022""",
parse_mode='HTML', parse_mode='HTML',
mime_type='application/pdf', mime_type='application/pdf',
thumb_url='https://fk7.ru/books/django_for_beginners_4_0.jpg',) thumb_url='https://fk7.ru/books/django_for_beginners_4_0.jpg', )
bot.answer_inline_query( bot.answer_inline_query(
inline_query.id, [lutz, matthes, lutz_rus, matthes_rus], inline_query.id, [lutz, matthes, lutz_rus, matthes_rus],
cache_time=10) cache_time=10)
@bot.message_handler(content_types=['document']) @bot.message_handler(content_types=['document'])
def command_me(message): def command_me(message):
"""GetMe Informer""" """ GetMe Informer. """
if message.chat.id == 280887861: if message.chat.id == ADMIN_ID:
bot.send_message(message.chat.id, message.document) bot.send_message(message.chat.id, message.document)
@@ -127,7 +131,13 @@ def command_me(message):
logging(message) logging(message)
@app.route(f'/bot{LUTZPYBOT}/', methods=['POST']) @bot.message_handler(commands=['remind'])
def remind_manually():
"""Remind manually"""
reminder.remind()
@app.route(f"/bot{os.environ.get('LUTZPYBOT', 'Token not in ENVIRON')}/", methods=['POST'])
def webhook(): def webhook():
"""Parse POST requests from Telegram""" """Parse POST requests from Telegram"""
if request.headers.get('content-type') == 'application/json': if request.headers.get('content-type') == 'application/json':
-4
View File
@@ -1,4 +0,0 @@
Date,Name,Description
256,День программиста ,"Число 256 выбрано потому, что это количество целых чисел, которое можно выразить с помощью одного восьмиразрядного байта, а также это максимальная степень числа 2, которая меньше количества дней в году — 365."
01-28,Международный день защиты персональных данных ,"Международный день защиты персональных данных (Data Protection Day). Это праздник был учрежден для того, чтобы пользователи сети не забывали о соблюдении правил поведения в интернете, которые помогают обезопасить их виртуальную и реальную жизнь."
09-30,День интернета,"Все началось с того, что в 1998 году московская фирма IT Infoart Stars разослала фирмам и организациям предложение поддержать инициативу, состоящую из двух пунктов: назначить 30 сентября «Днем интернета», ежегодно его праздновать и провести «перепись населения русскоязычного интернета»."
1 Date Name Description
2 256 День программиста Число 256 выбрано потому, что это количество целых чисел, которое можно выразить с помощью одного восьмиразрядного байта, а также это максимальная степень числа 2, которая меньше количества дней в году — 365.
3 01-28 Международный день защиты персональных данных Международный день защиты персональных данных (Data Protection Day). Это праздник был учрежден для того, чтобы пользователи сети не забывали о соблюдении правил поведения в интернете, которые помогают обезопасить их виртуальную и реальную жизнь.
4 09-30 День интернета Все началось с того, что в 1998 году московская фирма IT Infoart Stars разослала фирмам и организациям предложение поддержать инициативу, состоящую из двух пунктов: назначить 30 сентября «Днем интернета», ежегодно его праздновать и провести «перепись населения русскоязычного интернета».
+9
View File
@@ -0,0 +1,9 @@
"Date","Name","Description"
"09-13","День программиста","День программиста отмечают практически повсеместно, ведь в XXI веке важность и необходимость этой профессии понятна всем. А в России праздник даже является официальным"
"01-28","Международный день защиты персональных данных","Международный день защиты персональных данных (Data Protection Day). Это праздник был учрежден для того, чтобы пользователи сети не забывали о соблюдении правил поведения в интернете, которые помогают обезопасить их виртуальную и реальную жизнь"
"09-30","День интернета","Все началось с того, что в 1998 году московская фирма IT Infoart Stars разослала фирмам и организациям предложение поддержать инициативу, состоящую из двух пунктов: назначить 30 сентября «Днем интернета», ежегодно его праздновать и провести «перепись населения русскоязычного интернета»"
2005-07-21,"День рождения Django","Джанго — свободный фреймворк для веб-приложений на языке Python. Проект поддерживается организацией <i>Django Software Foundation</i>. Веб-фреймворк Django используется в сайтах Instagram, Disqus, Mozilla, The Washington Times, Pinterest, YouTube, Google и др. Авторы: американский веб-разработчик Адриан Головатый и британский программист Саймон Уиллисон"
2018-12-05,"День рождения FastAPI","FastAPI — веб-фреймворк для создания API, написанный на Python. Один из самых быстрых и популярных (после Django и Flask) веб-фреймворков, написанных на Python. Автор — колумбиец Себастьян Рамирез"
2010-04-01,"День рождения Flask","Создатель и основной автор — австрийский программист Армин Ронахер, начал работу над проектом в 2010 году"
"1991-02-20","День рождения Python","Задумка по реализации языка появилась в конце 1980-х годов, а разработка его реализации началась в 1989 году сотрудником голландского института CWI Гвидо ван Россумом. Гвидо начал разрабатывать Python на досуге, позаимствовав некоторые наработки для языка ABC"
2008-12-03,"День рождения Python 3","После длительного тестирования, вышла первая версия Python 3000 (или Python 3.0, также используется сокращение Py3k). В Python 3000 устранены многие недостатки архитектуры с максимально возможным (но не полным) сохранением совместимости со старыми версиями Python"
1 Date Name Description
2 09-13 День программиста День программиста отмечают практически повсеместно, ведь в XXI веке важность и необходимость этой профессии понятна всем. А в России праздник даже является официальным
3 01-28 Международный день защиты персональных данных Международный день защиты персональных данных (Data Protection Day). Это праздник был учрежден для того, чтобы пользователи сети не забывали о соблюдении правил поведения в интернете, которые помогают обезопасить их виртуальную и реальную жизнь
4 09-30 День интернета Все началось с того, что в 1998 году московская фирма IT Infoart Stars разослала фирмам и организациям предложение поддержать инициативу, состоящую из двух пунктов: назначить 30 сентября «Днем интернета», ежегодно его праздновать и провести «перепись населения русскоязычного интернета»
5 2005-07-21 День рождения Django Джанго — свободный фреймворк для веб-приложений на языке Python. Проект поддерживается организацией <i>Django Software Foundation</i>. Веб-фреймворк Django используется в сайтах Instagram, Disqus, Mozilla, The Washington Times, Pinterest, YouTube, Google и др. Авторы: американский веб-разработчик Адриан Головатый и британский программист Саймон Уиллисон
6 2018-12-05 День рождения FastAPI FastAPI — веб-фреймворк для создания API, написанный на Python. Один из самых быстрых и популярных (после Django и Flask) веб-фреймворков, написанных на Python. Автор — колумбиец Себастьян Рамирез
7 2010-04-01 День рождения Flask Создатель и основной автор — австрийский программист Армин Ронахер, начал работу над проектом в 2010 году
8 1991-02-20 День рождения Python Задумка по реализации языка появилась в конце 1980-х годов, а разработка его реализации началась в 1989 году сотрудником голландского института CWI Гвидо ван Россумом. Гвидо начал разрабатывать Python на досуге, позаимствовав некоторые наработки для языка ABC
9 2008-12-03 День рождения Python 3 После длительного тестирования, вышла первая версия Python 3000 (или Python 3.0, также используется сокращение Py3k). В Python 3000 устранены многие недостатки архитектуры с максимально возможным (но не полным) сохранением совместимости со старыми версиями Python
+1 -2
View File
@@ -9,7 +9,7 @@ def logging(message):
with open(log_file_csv, 'a') as f: with open(log_file_csv, 'a') as f:
logs = csv.writer(f) logs = csv.writer(f)
logs.writerow(['DATE AND TIME', 'ID', 'FIRST NAME', 'USERNAME', logs.writerow(['DATE AND TIME', 'ID', 'FIRST NAME', 'USERNAME',
'CHAT', 'LANG', 'PREMIUM', 'QUERY']) 'CHAT', 'LANG', 'PREMIUM', 'QUERY'])
with open(log_file_csv, 'a') as f: with open(log_file_csv, 'a') as f:
logs = csv.writer(f) logs = csv.writer(f)
@@ -17,4 +17,3 @@ def logging(message):
[dt.datetime.now().strftime('%Y-%m-%d %H:%H'), message.from_user.id, [dt.datetime.now().strftime('%Y-%m-%d %H:%H'), message.from_user.id,
message.from_user.first_name, message.from_user.username, message.from_user.first_name, message.from_user.username,
message.chat.id, message.from_user.language_code, message.from_user.is_premium, message.text]) message.chat.id, message.from_user.language_code, message.from_user.is_premium, message.text])
+47
View File
@@ -0,0 +1,47 @@
import schedule
import time
from threading import Thread
from datetime import datetime as dt
from config import bot
import csv
from dotenv import load_dotenv
from config import PYTHONCHATRU
# https://core.telegram.org/bots/api Telegram Bot API
dotenv_path = '.env'
load_dotenv(dotenv_path)
with open('holidays.csv', newline='', encoding='utf-8') as holidays_file:
holidays = tuple(csv.reader(holidays_file))
def scheduler():
while True:
schedule.run_pending()
time.sleep(20)
def remind():
""" Remind holiday. """
today = dt.today()
for entry in holidays[1:]:
date, holiday, description = entry
if len(date) == 5 \
and today.month == dt.strptime(date, "%m-%d").month \
and today.day == dt.strptime(date, "%m-%d").day:
notification = f'🎉💻 Сегодня {dt.strptime(date, "%m-%d"):%d.%m}, <b><u>{holiday.upper()}</u></b>! \
\n\n{description}.'
bot.send_message(PYTHONCHATRU, notification, parse_mode='HTML') # PYTHONCHATRU
elif len(date) == 10 \
and today.month == dt.strptime(date, "%Y-%m-%d").month \
and today.day == dt.strptime(date, "%Y-%m-%d").day:
age = today.year - dt.strptime(date, "%Y-%m-%d").year
notification = f'🎉💻 Сегодня {dt.strptime(date, "%Y-%m-%d"):%d.%m}, <b><u>{holiday.upper()}</u></b>! \
\n\n{description}.\n<i>{age} годовщина</i>'
bot.send_message(PYTHONCHATRU, notification, parse_mode='HTML') # PYTHONCHATRU
schedule.every().day.at('08:00').do(remind)
Thread(target=scheduler).start()
BIN
View File
Binary file not shown.