def __call__(self, *args, **kwargs): if len(args): if len(kwargs): if isinstance(args[0], int): user = get_user(args[0]) if user is not None: result = list() for kwarg in kwargs: result.append( getattr(user, kwarg) == kwargs[kwarg]) return len(kwargs) == sum(result) return False elif isinstance(args[0], Message): user = get_user(args[0].chat.id) if user is not None: result = list() for kwarg in kwargs: result.append( getattr(user, kwarg) == kwargs[kwarg]) return min(result) return False raise InvalidParams( f'incorrect params | got type: {type(args[0])}') raise EmptyKwArgsParams("you don't given kwargs in function") raise EmptyArgsParams("you don't given args in function")
def update_user_next_step_handler(user_id_message): user_id = search(r'\d+', user_id_message.text) if user_id is not None: user_id = int(user_id.group()) if is_exist(bot, user_id): user = get_user(user_id) if user is None: update_user(user_id, False, False, False, 0) user = get_user(user_id) bot.send_message(call.message.chat.id, 'Пользователь успешко добавлен в БД!!!', parse_mode="html") user_name = bot.get_chat_member(user_id, user_id).user.first_name if call.message.chat.id == SUPERUSER_ID: if user_id == SUPERUSER_ID: bot.send_message( call.message.chat.id, f'<b>Суперпользователь не может редактировать свои ' f'права</b>\n' f'(они обновляются при запуске бота!!!)', parse_mode="html") else: bot.send_message( call.message.chat.id, f'Отредактируйте права доступа пользователя:\n' f'Имя пользователя: {user_name}\n' f'ID пользователя: {user_id}\n' f'<b>Действующие права сейчас:</b>\n' f'Admin: {user.is_admin}\n' f'PDT: {user.is_pdt}\n' f'Subscription: {user.is_promotion}\n' f'Subscription days left: {user.subscription}', reply_markup=INLINE_SUPERUSER_MARKUP, parse_mode="html") else: bot.send_message( call.message.chat.id, f'Отредактируйте права доступа пользователя:\n' f'Имя пользователя: {user_name}\n' f'ID пользователя: {user_id}\n' f'<b>Действующие права сейчас:</b>\n' f'PDT: {user.is_pdt}\n' f'Subscription: {user.is_promotion}\n' f'Subscription days left: {user.subscription}', reply_markup=INLINE_ADMIN_MARKUP, parse_mode="html") else: bot.send_message( call.message.chat.id, 'Пользователя с таким ID не существует во всем Телеграме!!!', parse_mode="html") else: bot.send_message(call.message.chat.id, 'Некорректное ID пользователя!!!', parse_mode="html")
def successful_payment(message): bot.send_message( message.chat.id, 'Ваш платеж успешно дошел, спасибо за оплату подписки!') user_id = message.chat.id user = get_user(user_id) if user is None: subscription_message = '<b>Подписка активирована.</b>' update_user(user_id, False, False, True, 30) else: subscription_message = '<b>Подписка продлена.</b>' update_user(user_id, user.is_admin, user.is_pdt, True, 30) bot.send_message( user_id, f'{subscription_message} \nДо окончания подписки: 30 дней', parse_mode="html") who_user = bot.get_chat_member(user_id, user_id).user if REFFERAL_DICT.get(user_id) is None: for admin in get_admin_users(): bot.send_message( admin.user_id, f'<b>После перезапуска бота не удалось получить информацию: </b>\n' f'<b>Пользователь:</b>\n' f'ID: {user_id}\n' f'Username: {who_user.username}\n' '--------------------\n' f'<b>Пришел от:</b> \n' f'ID: [undefined] \n' f'Username: [undefined]', parse_mode="html") else: reff_user = bot.get_chat_member(REFFERAL_DICT[user_id], REFFERAL_DICT[user_id]).user for admin in get_admin_users(): bot.send_message(admin.user_id, f'<b>Пользователь:</b>\n' f'ID: {user_id}\n' f'Username: {who_user.username}\n' '--------------------\n' f'<b>Пришел от:</b> \n' f'ID: {REFFERAL_DICT.get(user_id)} \n' f'Username: {reff_user.username}', parse_mode="html") del REFFERAL_DICT[user_id]
def permissions_edit_handler(bot, call, role): user_id = search(r'(?<=ID пользователя: )\d+', call.message.text) user_id = int(user_id.group()) user = get_user(user_id) if user is not None: user_name = bot.get_chat_member(user_id, user_id).user.first_name setattr(user, role, not getattr(user, role)) subscription = user.subscription if role == 'is_promotion': subscription = 30 if user.is_promotion else 0 update_user(user.user_id, user.is_admin, user.is_pdt, user.is_promotion, subscription) if call.message.chat.id == SUPERUSER_ID: bot.edit_message_text( f'Отредактируйте права доступа пользователя:\n' f'Имя пользователя: {user_name}\n' f'ID пользователя: {user_id}\n' f'<b>Действующие права сейчас:</b>\n' f'Admin: {user.is_admin}\n' f'PDT: {user.is_pdt}\n' f'Subscription: {user.is_promotion}\n' f'Subscription days left: {subscription}', chat_id=call.message.chat.id, message_id=call.message.message_id, parse_mode="html", reply_markup=INLINE_SUPERUSER_MARKUP) else: bot.edit_message_text( f'Отредактируйте права доступа пользователя:\n' f'Имя пользователя: {user_name}\n' f'ID пользователя: {user_id}\n' f'<b>Действующие права сейчас:</b>\n' f'PDT: {user.is_pdt}\n' f'Subscription: {user.is_promotion}\n' f'Subscription days left: {subscription}', chat_id=call.message.chat.id, message_id=call.message.message_id, parse_mode="html", reply_markup=INLINE_ADMIN_MARKUP) else: bot.send_message(call.message.chat.id, 'Данного пользователя уже не существует в БД!!!', parse_mode="html")
def del_user_next_step_handler(user_id_message): user_id = search(r'\d+', user_id_message.text) if user_id is not None: user_id = int(user_id.group()) user = get_user(user_id) if user is None: bot.send_message(call.message.chat.id, 'Пользователя с данным ID нет в БД!!!', parse_mode="html") else: if call.message.chat.id == user_id: bot.send_message(call.message.chat.id, 'Вы не можете удалить себя!!!', parse_mode="html") elif call.message.chat.id == SUPERUSER_ID: confirmation_handler(bot, call, lambda: del_user(user.user_id), 'Пользователь удален!!!') elif user_id == SUPERUSER_ID: bot.send_message( call.message.chat.id, 'Вы не можете удалить суперпользователя!!!', parse_mode="html") elif is_has_permission(user_id, is_admin=True): bot.send_message( call.message.chat.id, 'Будучи администратором, ' 'вы не можете удалить другого администратора!!!', parse_mode="html") else: confirmation_handler(bot, call, lambda: del_user(user.user_id), 'Пользователь удален!!!') else: bot.send_message(call.message.chat.id, 'Некорректное ID пользователя!!!', parse_mode="html")
def promotion_subscription_buy_handler(bot, message): @bot.pre_checkout_query_handler(func=lambda query: True) def process_pre_checkout_query(pre_checkout_query: PreCheckoutQuery): bot.answer_pre_checkout_query(pre_checkout_query.id, ok=True) @bot.message_handler(content_types=['successful_payment']) def successful_payment(message): bot.send_message(message.chat.id, 'Ваш платеж успешно дошел, спасибо за оплату подписки!') user_id = message.chat.id user = get_user(user_id) if user is None: subscription_message = '<b>Подписка активирована.</b>' update_user(user_id, False, False, True, 30) else: subscription_message = '<b>Подписка продлена.</b>' update_user(user_id, user.is_admin, user.is_pdt, True, 30) bot.send_message(user_id, f'{subscription_message} \nДо окончания подписки: 30 дней', parse_mode="html") who_user = bot.get_chat_member(user_id, user_id).user if REFFERAL_DICT.get(user_id) is None: for admin in get_admin_users(): bot.send_message(admin.user_id, f'<b>После перезапуска бота не удалось получить информацию: </b>\n' f'<b>Пользователь:</b>\n' f'ID: {user_id}\n' f'Username: {who_user.username}\n' '--------------------\n' f'<b>Пришел от:</b> \n' f'ID: [undefined] \n' f'Username: [undefined]', parse_mode="html") else: reff_user = bot.get_chat_member(REFFERAL_DICT[user_id], REFFERAL_DICT[user_id]).user for admin in get_admin_users(): bot.send_message(admin.user_id, f'<b>Пользователь:</b>\n' f'ID: {user_id}\n' f'Username: {who_user.username}\n' '--------------------\n' f'<b>Пришел от:</b> \n' f'ID: {REFFERAL_DICT.get(user_id)} \n' f'Username: {reff_user.username}', parse_mode="html") del REFFERAL_DICT[user_id] # ---------------------------------------------------------------------------------------------------------- def promotion_subscribe_buy_next_step_handler(reff_id_message, message): reff_id = search(r'\d+', reff_id_message.text) if reff_id is not None: reff_id = int(reff_id.group()) if is_exist(bot, reff_id): if reff_id == reff_id_message.chat.id: bot.send_message(reff_id_message.chat.id, 'Вы не можете указать себя в качестве реферала!', parse_mode="html") else: bot.send_invoice(chat_id=message.chat.id, title=PROMOTION_SUBSCRIPTION_TITLE, description=PROMOTION_SUBSCRIPTION_DESCRIPTION, invoice_payload='successful', provider_token=PAYMENTS_PROVIDER_TOKEN, start_parameter='payment-promotion-subscribe', currency='RUB', prices=[PROMOTION_SUBSCRIPTION_PRICE] ) REFFERAL_DICT[message.chat.id] = reff_id else: bot.send_message(reff_id_message.chat.id, 'Пользователя с таким ID не существует во всем Телеграме!!!', parse_mode="html") else: bot.send_message(reff_id_message.chat.id, 'Некорректное ID пользователя!!!', parse_mode="html") if is_has_permission(message.chat.id, is_promotion=True): user = get_user(message.chat.id) bot.send_message(message.chat.id, f'<b>У вас уже есть подписка.</b> \nДо окончания, ' f'осталось дней: {user.subscription}', parse_mode="html") else: get_promotion_reff_msg = bot.send_message(message.chat.id, 'Укажите ID пользователя от которого вы пришли', parse_mode="html") bot.register_next_step_handler(get_promotion_reff_msg, lambda reff_id: promotion_subscribe_buy_next_step_handler(reff_id, message))