예제 #1
0
 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")
예제 #2
0
 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")
예제 #3
0
    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]
예제 #4
0
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")
예제 #5
0
 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")
예제 #6
0
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))