Skip to content

Commit a8ed5c4

Browse files
committed
ADD: filters (is_admin) for telegram and user_bot
1 parent bd45b27 commit a8ed5c4

19 files changed

Lines changed: 97 additions & 53 deletions

File tree

telegram_bot/database/methods/other.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ def is_vip(telegram_id) -> bool:
99

1010

1111
def is_admin(telegram_id: int) -> bool:
12-
create_user(telegram_id)
1312
return bool(Database().session.query(User.admin).filter(User.telegram_id == telegram_id).one()[0])
1413

1514

telegram_bot/filters/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
from .main import register_all_filters

telegram_bot/filters/main.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
from aiogram import Dispatcher
2+
from aiogram.dispatcher.filters import Filter
3+
from aiogram.types import Message
4+
5+
from telegram_bot.database.methods.other import is_admin
6+
7+
8+
class IsAdmin(Filter):
9+
key = "is_admin"
10+
11+
async def check(self, message: Message) -> bool:
12+
return is_admin(message.from_user.id)
13+
14+
15+
def register_all_filters(dp: Dispatcher):
16+
dp.bind_filter(IsAdmin)

telegram_bot/handlers/admin/auth.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
from telegram_bot.database.methods.other import is_admin
66
from telegram_bot.database.methods.update import set_admin, set_vip
7+
from telegram_bot.filters.main import IsAdmin
78

89
from telegram_bot.utils.env import Env
910
from telegram_bot.utils.states import AdminStates
@@ -14,10 +15,9 @@
1415
async def __admin(msg: Message, state: FSMContext):
1516
bot = msg.bot
1617
user_id = msg.from_user.id
17-
if is_admin(user_id):
18-
await state.set_state(AdminStates.ADMIN)
19-
await bot.send_message(user_id, 'Вы админ 😎', reply_markup=ReplyKeyboardRemove())
20-
await bot.send_message(user_id, 'Админ панель', reply_markup=get_admin_keyboard(user_id))
18+
await state.set_state(AdminStates.ADMIN)
19+
await bot.send_message(user_id, 'Вы админ 😎', reply_markup=ReplyKeyboardRemove())
20+
await bot.send_message(user_id, 'Админ панель', reply_markup=get_admin_keyboard(user_id))
2121

2222

2323
async def __admin_auth(msg: Message, state: FSMContext):
@@ -50,13 +50,13 @@ def _get_auth_handlers(dp: Dispatcher) -> None:
5050

5151
# region Msg handlers
5252

53-
dp.register_message_handler(__cancel, commands=['cancel'], state=[
53+
dp.register_message_handler(__cancel, IsAdmin(), commands=['cancel'], state=[
5454
AdminStates.INSERT_NEW_ADMIN,
5555
AdminStates.INSERT_ADVERT_TEXT,
5656
AdminStates.SET_VIP,
5757
])
5858
dp.register_message_handler(__admin_auth, commands=['admin'], state=None)
59-
dp.register_message_handler(__admin, content_types=['text'], text='Admin 🤡', state=None)
59+
dp.register_message_handler(__admin, IsAdmin(), content_types=['text'], text='Admin 🤡', state=None)
6060

6161
# endregion
6262

telegram_bot/handlers/admin/main.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from telegram_bot.database.methods.update import set_admin, set_vip
1010
from telegram_bot.database.methods.get import get_all_telegram_id, get_sessions_enable_count, get_user_count, \
1111
get_sessions_count
12+
from telegram_bot.filters.main import IsAdmin
1213

1314
from telegram_bot.handlers.admin.vip import _get_vip_handlers
1415
from telegram_bot.handlers.admin.auth import _get_auth_handlers
@@ -99,17 +100,17 @@ async def __analytic(query: CallbackQuery, state: FSMContext) -> None:
99100
def register_admin_handlers(dp: Dispatcher) -> None:
100101
# region Msg handlers
101102

102-
dp.register_message_handler(__admin_insert_tg_id, content_types=['text'], state=AdminStates.INSERT_NEW_ADMIN)
103+
dp.register_message_handler(__admin_insert_tg_id, IsAdmin(), content_types=['text'], state=AdminStates.INSERT_NEW_ADMIN)
103104

104-
dp.register_message_handler(__do_advertising, content_types=['text'], state=AdminStates.INSERT_ADVERT_TEXT)
105+
dp.register_message_handler(__do_advertising, IsAdmin(), content_types=['text'], state=AdminStates.INSERT_ADVERT_TEXT)
105106

106107
# endregion
107108

108109
# region Callback handlers
109110

110-
dp.register_callback_query_handler(__analytic, lambda c: c.data == "analytics", state=AdminStates.ADMIN)
111-
dp.register_callback_query_handler(__add_admin, lambda c: c.data == "add_admin", state=AdminStates.ADMIN)
112-
dp.register_callback_query_handler(__advertising, lambda c: c.data == "advertising", state=AdminStates.ADMIN)
111+
dp.register_callback_query_handler(__analytic, IsAdmin(), lambda c: c.data == "analytics", state=AdminStates.ADMIN)
112+
dp.register_callback_query_handler(__add_admin, IsAdmin(), lambda c: c.data == "add_admin", state=AdminStates.ADMIN)
113+
dp.register_callback_query_handler(__advertising, IsAdmin(), lambda c: c.data == "advertising", state=AdminStates.ADMIN)
113114

114115
# endregion
115116

telegram_bot/handlers/admin/vip.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
from telegram_bot.database.methods.update import set_vip
88
from telegram_bot.database.methods.other import switch_vip
9+
from telegram_bot.filters.main import IsAdmin
910

1011
from telegram_bot.utils.states import AdminStates
1112
from telegram_bot.keyboards import get_main_keyboard, get_admin_keyboard
@@ -52,13 +53,15 @@ def _get_vip_handlers(dp: Dispatcher) -> None:
5253

5354
# region Msg handlers
5455

55-
dp.register_message_handler(__vip_insert_tg_id, content_types=['text'], state=AdminStates.SET_VIP)
56+
dp.register_message_handler(__vip_insert_tg_id, IsAdmin(), content_types=['text'], state=AdminStates.SET_VIP)
5657

5758
# endregion
5859

5960
# region Callback handlers
6061

61-
dp.register_callback_query_handler(__vip_switcher, lambda c: c.data == "vip_switcher", state=AdminStates.ADMIN)
62-
dp.register_callback_query_handler(__set_vip, lambda c: c.data == "give_vip", state=AdminStates.ADMIN)
62+
dp.register_callback_query_handler(__vip_switcher, IsAdmin(),
63+
lambda c: c.data == "vip_switcher", state=AdminStates.ADMIN)
64+
dp.register_callback_query_handler(__set_vip, IsAdmin(),
65+
lambda c: c.data == "give_vip", state=AdminStates.ADMIN)
6366

6467
# endregion

telegram_bot/main.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,19 @@
88

99
from telegram_bot.database import register_models
1010
from telegram_bot.database.methods.get import get_users_with_sessions
11+
from telegram_bot.filters import register_all_filters
1112

1213
from telegram_bot.utils import Env
1314
from telegram_bot.keyboards import get_main_keyboard
1415
from telegram_bot.handlers import register_all_handlers
1516
from telegram_bot.utils.process import start_process_if_sessions_exists
1617

1718

18-
19-
20-
21-
2219
async def __on_start_up(dp: Dispatcher) -> None:
2320
logger.info('Bot starts')
2421

2522
register_models()
23+
register_all_filters(dp)
2624
register_all_handlers(dp)
2725

2826
users = get_users_with_sessions()

user_bot/filters/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
from .main import is_vip_filter, get_free_filters, get_vip_filters

user_bot/filters/main.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
from pyrogram import filters
2+
from pyrogram.types.messages_and_media.message import Message
3+
4+
from user_bot.utils import UserConfig
5+
from telegram_bot.utils import TgConfig
6+
7+
8+
def is_vip_filter():
9+
async def func(_, __, msg: Message):
10+
return UserConfig.VIP_STATUS
11+
return filters.create(func)
12+
13+
14+
def get_free_filters(command: str) -> bool:
15+
return filters.me & filters.command(command, TgConfig.PREFIX)
16+
17+
18+
def get_vip_filters(command: str) -> bool:
19+
return is_vip_filter() & get_free_filters(command)

user_bot/handlers/common/games.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
from pyrogram import Client
55
from pyrogram.handlers import MessageHandler
66
from pyrogram.types import Message
7-
from user_bot.utils import cmd, get_me_filters
7+
8+
from user_bot.filters import get_free_filters
9+
from user_bot.utils import cmd
810

911

1012
@cmd(False)
@@ -30,5 +32,5 @@ async def __coin(app: Client, msg: Message):
3032

3133
def _get_game_handlers() -> tuple[MessageHandler, ...]:
3234
return (
33-
MessageHandler(__coin, filters=get_me_filters('coin')),
35+
MessageHandler(__coin, filters=get_free_filters('coin')),
3436
)

0 commit comments

Comments
 (0)