diff --git a/app/__init__.py b/app/__init__.py
index e69de29..2b3c21e 100644
--- a/app/__init__.py
+++ b/app/__init__.py
@@ -0,0 +1 @@
+from .commands import service
diff --git a/app/bot.py b/app/bot.py
index c5e9ce4..639af99 100644
--- a/app/bot.py
+++ b/app/bot.py
@@ -1,17 +1,15 @@
import shelve
-from datetime import datetime as dt
+
from flask import request, abort
import threading
from time import sleep
from . import stan
-from . import reminder
-from . import reloader
from . import report
-from . import get
from . import rules
-from .helpers import get_me, represent_as_get, detect_args
+
+from .helpers import represent_as_get, detect_args
from .filters import *
from .config import *
@@ -107,30 +105,6 @@ def translate_layout(message):
bot.send_message(message.chat.id, message.reply_to_message.text.translate(ENG_RUS_TABLE))
-@bot.message_handler(commands=['me'])
-def command_me(message):
- """ Send info about user and chat id [Service]. """
- bot.send_message(message.chat.id, get_me(message))
-
-
-@bot.message_handler(commands=['remind'])
-def remind_manually(message):
- """ Remind holidays manually. """
- args = message.text.split()
- if len(args) > 1:
- try:
- today = dt.strptime(args[1], "%m-%d-%Y")
- except ValueError as ve:
- bot.send_message(message.chat.id, f"Не удалось разобрать дату!\n{ve}")
- else:
- reminder.remind(message.chat.id, today)
- else:
- bot.send_message(message.chat.id, f"Формат даты: MM-DD-YYYY\n\n"
- f"Примеры:\n"
- f"/remind 09-12-2024\n"
- f"/remind 09-13-2022")
-
-
@bot.message_handler(commands=['quote'])
def stan_speak(message):
bot.send_message(message.chat.id, stan.speak(0))
@@ -196,48 +170,11 @@ def google_it(message: types.Message):
send_or_reply(message, f'Ищем «{query}» в Гугле...', reply_markup=markup)
-@bot.message_handler(func=is_nongrata)
-def tease_nongrata(message: types.Message):
- """ Reply to non grata mentions. """
- bot.reply_to(message, f'у нас тут таких не любят')
-
-
-"""
- [ INLINE ]
-"""
-
-
-@bot.inline_handler(lambda query: True)
-def default_query(inline_query):
- """ Inline the Zen of Python. """
- zen = []
- for id_p, phrase in enumerate(ZEN):
- q = inline_query.query.casefold()
- if phrase.casefold().startswith(q) or ' ' + q in phrase.casefold():
- zen.append(types.InlineQueryResultArticle(
- f"{id_p}", f'The Zen of Python #{id_p + 1}', types.InputTextMessageContent(
- f"{phrase}"), description=phrase))
-
- bot.answer_inline_query(inline_query.id, zen, cache_time=1200)
-
-
"""
[ ADMIN PANEL ]
"""
-@bot.message_handler(func=is_admin, commands=['ip'])
-def get_ip(message):
- bot.send_message(message.chat.id, get.my_ip())
-
-
-@bot.message_handler(func=is_admin, commands=['reload'])
-def send_stats(message):
- logging.warning('Reloading...')
- reloader.reload_modules()
- bot.send_message(message.chat.id, 'Reloaded successfully')
-
-
@bot.message_handler(func=is_admin, commands=['ddel'])
def delete_user(message: types.Message):
if message.reply_to_message:
@@ -265,58 +202,27 @@ def unban_user(message: types.Message):
logging.warning(f'[UNBAN (M)] {user_id}')
-@bot.message_handler(func=is_admin, commands=['jobs'])
-def list_jobs(message):
- """ List all the jobs in schedule. """
- bot.send_message(ADMIN_ID, reminder.print_get_jobs())
+"""
+ [ INLINE ]
+"""
-@bot.message_handler(func=is_white, commands=['add'])
-def add_stan_quote(message):
- if message.reply_to_message and message.reply_to_message.text:
- with open('Stan.txt', 'a', encoding='utf8') as stan_quotes:
- if message.reply_to_message.text not in (i.rstrip() for i in open('Stan.txt', 'r', encoding='utf8')):
- stan_quotes.write(message.reply_to_message.text.replace('\n', ' ') + '\n')
- bot.send_message(message.chat.id,
- '✅ Добавил\n └ ' + message.reply_to_message.text.replace("\n",
- " ") + '')
- else:
- bot.send_message(message.chat.id,
- f'⛔️ Не добавил, есть токое\n └ {message.reply_to_message.text}')
+@bot.inline_handler(lambda query: True)
+def default_query(inline_query):
+ """ Inline the Zen of Python. """
+ zen = []
+ for id_p, phrase in enumerate(ZEN):
+ q = inline_query.query.casefold()
+ if phrase.casefold().startswith(q) or ' ' + q in phrase.casefold():
+ zen.append(types.InlineQueryResultArticle(
+ f"{id_p}", f'The Zen of Python #{id_p + 1}', types.InputTextMessageContent(
+ f"{phrase}"), description=phrase))
-
-@bot.message_handler(func=is_white, commands=['remove'])
-def remove_stan_quote(message):
- if message.reply_to_message and message.reply_to_message.text:
- if message.reply_to_message.text in (i.rstrip() for i in open('Stan.txt', 'r', encoding='utf8')):
- quotes = list(open('Stan.txt', 'r', encoding='utf8'))
- with open('Stan.txt', 'w', encoding='utf8') as stan_quotes:
- quotes.remove(message.reply_to_message.text + '\n')
- stan_quotes.writelines(quotes)
- bot.send_message(message.chat.id, f'✅ Удалил\n └ {message.reply_to_message.text}')
- else:
- bot.send_message(message.chat.id, f'⛔️ Нет такого\n └ {message.reply_to_message.text}')
-
-
-@bot.message_handler(func=is_admin, commands=['stats'])
-def send_stats(message: types.Message):
- if len(message.text.split()) == 1:
- rep = report.create_report_text(message.chat.id)
- if rep:
- bot.send_message(message.chat.id, rep)
- else:
- bot.send_message(message.chat.id, report.create_report_text(message.text.split()[-1]))
-
-
-@bot.message_handler(func=is_admin, commands=['reset_stats'], chat_types=['supergroup', 'group'])
-def send_stats(message: types.Message):
- logging.warning('reset_stats')
- report.reset_report_stats(message.chat.id)
- bot.send_message(message.chat.id, report.reset_report_stats(message.chat.id))
+ bot.answer_inline_query(inline_query.id, zen, cache_time=1200)
"""
- [ MAIN MESSAGE HANDLER ]
+ [ COUNTER ]
"""
@@ -354,7 +260,7 @@ def handle_msg(message: types.Message):
@app.route(f"/bot{TOKEN}/", methods=['POST'])
-def bot_webhook():
+def webhook():
""" Parse POST requests from Telegram. """
if request.headers.get('content-type') == 'application/json':
json_string = request.get_data().decode('utf-8')
diff --git a/app/commands/get.py b/app/commands/get.py
new file mode 100644
index 0000000..cf5c8f7
--- /dev/null
+++ b/app/commands/get.py
@@ -0,0 +1,25 @@
+from urllib.request import urlopen
+
+
+def my_ip():
+ ip_service = 'https://icanhazip.com'
+ ip = urlopen(ip_service, )
+ return ip.read().decode('utf-8')
+
+
+def me(message):
+ msg = f"Telegram ID: {message.from_user.id}\n\
+ ├ Is bot: {message.from_user.is_bot}\n\
+ ├ First name: {message.from_user.first_name}\n"
+ if message.from_user.last_name:
+ msg += f" ├ Last name: {message.from_user.last_name}\n"
+ if message.from_user.username:
+ msg += f" ├ Username: {message.from_user.username}\n"
+ msg += f" ├ Language code: {message.from_user.language_code}\n"
+ if message.from_user.is_premium is True:
+ msg += f" ├ Is Premium: ⭐️\n"
+ else:
+ msg += f" ├ Is Premium: No\n"
+ msg += f" ├ Chat ID: {message.chat.id}"
+
+ return msg
diff --git a/app/commands/service.py b/app/commands/service.py
new file mode 100644
index 0000000..7f817c9
--- /dev/null
+++ b/app/commands/service.py
@@ -0,0 +1,70 @@
+""" Service commands for Admin purposes. """
+
+import logging
+from datetime import datetime as dt
+from ..config import bot, ADMIN_ID, types
+from .. import reminder
+from .. import reloader
+from .. import report
+from ..filters import is_admin
+from .get import me, my_ip
+
+
+@bot.message_handler(commands=['me'])
+def command_me(message):
+ """ Send info about user and chat id [Service]. """
+ bot.send_message(message.chat.id, me(message))
+
+
+@bot.message_handler(func=is_admin, commands=['ip'])
+def get_ip(message):
+ bot.send_message(message.chat.id, my_ip())
+
+
+@bot.message_handler(commands=['remind'])
+def remind_manually(message):
+ """ Remind holidays manually. """
+ args = message.text.split()
+ if len(args) > 1:
+ try:
+ today = dt.strptime(args[1], "%m-%d-%Y")
+ except ValueError as ve:
+ bot.send_message(message.chat.id, f"Не удалось разобрать дату!\n{ve}")
+ else:
+ reminder.remind(message.chat.id, today)
+ else:
+ bot.send_message(message.chat.id, f"Формат даты: MM-DD-YYYY\n\n"
+ f"Примеры:\n"
+ f"/remind 09-12-2024\n"
+ f"/remind 09-13-2022")
+
+
+@bot.message_handler(func=is_admin, commands=['jobs'])
+def list_jobs(message):
+ """ List all the jobs in schedule. """
+ bot.send_message(ADMIN_ID, reminder.print_get_jobs())
+
+
+@bot.message_handler(func=is_admin, commands=['stats'])
+def send_stats(message: types.Message):
+ if len(message.text.split()) == 1:
+ rep = report.create_report_text(message.chat.id)
+ if rep:
+ bot.send_message(message.chat.id, rep)
+ else:
+ bot.send_message(message.chat.id, report.create_report_text(message.text.split()[-1]))
+
+
+@bot.message_handler(func=is_admin, commands=['reset_stats'], chat_types=['supergroup', 'group'])
+def send_stats(message: types.Message):
+ logging.warning('reset_stats')
+ report.reset_report_stats(message.chat.id)
+ bot.send_message(message.chat.id, report.reset_report_stats(message.chat.id))
+
+
+@bot.message_handler(func=is_admin, commands=['reload'])
+def send_stats(message):
+ logging.warning('Reloading...')
+ reloader.reload_modules()
+ logging.warning('Reloaded!!!')
+ bot.send_message(message.chat.id, 'Reloaded successfully')
diff --git a/app/config.py b/app/config.py
index 1405a24..cd73c7b 100644
--- a/app/config.py
+++ b/app/config.py
@@ -8,7 +8,7 @@ from dotenv import load_dotenv
logging.basicConfig(level=logging.INFO, format='%(asctime)s %(message)s', datefmt='%Y.%m.%d %H:%M:%S')
logging.critical('STAN STARTED!')
-logger.setLevel(logging.DEBUG)
+logger.setLevel(logging.INFO)
load_dotenv()
TOKEN = os.environ.get('LUTZPYBOT', 'Token not in ENVIRON')
diff --git a/app/get.py b/app/get.py
deleted file mode 100644
index fa8b51c..0000000
--- a/app/get.py
+++ /dev/null
@@ -1,7 +0,0 @@
-from urllib.request import urlopen
-
-
-def my_ip():
- ip_service = 'https://icanhazip.com'
- ip = urlopen(ip_service, )
- return ip.read().decode('utf-8')
diff --git a/app/helpers.py b/app/helpers.py
index 38b223d..962dc39 100644
--- a/app/helpers.py
+++ b/app/helpers.py
@@ -3,24 +3,6 @@ from urllib import parse
from telebot import types
-def get_me(message):
- msg = f"Telegram ID: {message.from_user.id}\n\
- ├ Is bot: {message.from_user.is_bot}\n\
- ├ First name: {message.from_user.first_name}\n"
- if message.from_user.last_name:
- msg += f" ├ Last name: {message.from_user.last_name}\n"
- if message.from_user.username:
- msg += f" ├ Username: {message.from_user.username}\n"
- msg += f" ├ Language code: {message.from_user.language_code}\n"
- if message.from_user.is_premium is True:
- msg += f" ├ Is Premium: ⭐️\n"
- else:
- msg += f" ├ Is Premium: No\n"
- msg += f" ├ Chat ID: {message.chat.id}"
-
- return msg
-
-
def represent_as_get(message: types.Message):
return parse.quote_plus(detect_args(message))
diff --git a/app/reloader.py b/app/reloader.py
index 26046eb..40b3b26 100644
--- a/app/reloader.py
+++ b/app/reloader.py
@@ -3,7 +3,7 @@ from importlib import reload
from . import bot
from . import filters
from . import config
-from . import get
+from .commands import get, service
from . import helpers
from . import report
from . import rules
@@ -14,6 +14,7 @@ def reload_modules():
reload(bot)
reload(filters)
reload(get)
+ reload(service)
reload(config)
reload(helpers)
reload(report)
diff --git a/app/reminder.py b/app/reminder.py
index cd40d20..9f03c5d 100644
--- a/app/reminder.py
+++ b/app/reminder.py
@@ -9,9 +9,6 @@ from .config import PYTHONCHATRU, bot
from . import report
-# https://core.telegram.org/bots/api Telegram Bot API
-
-
def scheduler():
while True:
run_pending()
diff --git a/app/stan.py b/app/stan.py
index 2bf142a..04b3fb3 100644
--- a/app/stan.py
+++ b/app/stan.py
@@ -1,8 +1,43 @@
""" Stan quote generator. """
import random
+from .config import bot, types
+from .filters import is_white, is_nongrata
def speak(chance_of):
number = random.randint(0, chance_of)
if number == 0:
return random.choice([i.rstrip() for i in open('Stan.txt', 'r', encoding='utf8') if i])
+
+
+@bot.message_handler(func=is_white, commands=['add'])
+def add_stan_quote(message):
+ if message.reply_to_message and message.reply_to_message.text:
+ with open('Stan.txt', 'a', encoding='utf8') as stan_quotes:
+ if message.reply_to_message.text not in (i.rstrip() for i in open('Stan.txt', 'r', encoding='utf8')):
+ stan_quotes.write(message.reply_to_message.text.replace('\n', ' ') + '\n')
+ bot.send_message(message.chat.id,
+ '✅ Добавил\n └ ' + message.reply_to_message.text.replace("\n",
+ " ") + '')
+ else:
+ bot.send_message(message.chat.id,
+ f'⛔️ Не добавил, есть токое\n └ {message.reply_to_message.text}')
+
+
+@bot.message_handler(func=is_white, commands=['remove'])
+def remove_stan_quote(message):
+ if message.reply_to_message and message.reply_to_message.text:
+ if message.reply_to_message.text in (i.rstrip() for i in open('Stan.txt', 'r', encoding='utf8')):
+ quotes = list(open('Stan.txt', 'r', encoding='utf8'))
+ with open('Stan.txt', 'w', encoding='utf8') as stan_quotes:
+ quotes.remove(message.reply_to_message.text + '\n')
+ stan_quotes.writelines(quotes)
+ bot.send_message(message.chat.id, f'✅ Удалил\n └ {message.reply_to_message.text}')
+ else:
+ bot.send_message(message.chat.id, f'⛔️ Нет такого\n └ {message.reply_to_message.text}')
+
+
+@bot.message_handler(func=is_nongrata)
+def tease_nongrata(message: types.Message):
+ """ Reply to non grata mentions. """
+ bot.reply_to(message, f'у нас тут таких не любят')