Пример #1
0
 async def menu(cls,
                user: BotUser,
                event=None,
                text='Отправьте свой телефонный номер.'):
     user.client = TelegramClient(StringSession(), api_id, api_hash)
     user.code = ''
     if hasattr(user, 'phone') and user.phone:
         await cls.set_code(user)
         await user.client.connect()
         await user.client.send_code_request(user.phone)
     else:
         user.disposable_handler = cls.set_phone
         markup = [[
             Button.request_phone('Отправить мой номер \U0000260E')
         ], [Button.text('Отмена', resize=True, single_use=True)]]
         reply = event.edit if event else user.reply
         await reply(text, buttons=markup)
Пример #2
0
        async def sign_in(cls, user: BotUser, event):
            try:
                await user.client.sign_in(user.phone, user.code)
                if await user.client.is_user_authorized():
                    await cls.save_session(user, event)

            except PhoneCodeInvalidError:
                await event.edit('Код недействителен. Попробуйте снова.')
                user.code = ''
                await cls.enter_code(user)

            except SessionPasswordNeededError:
                user.disposable_handler = cls.two_step_verification
                await event.delete()
                await user.reply('Введите пароль двухэтапной аутентификации.',
                                 buttons=Button.text('Отмена',
                                                     single_use=True,
                                                     resize=True))
Пример #3
0
 async def add(cls, user: BotUser, event):
     text = 'Введите стоп-фразу. Регистр не имеет значения.\n' \
            'Например: __с пушки__ или __на сейчас__'
     await event.delete()
     await user.reply(text,
                      buttons=Button.text('Отмена',
                                          resize=True,
                                          single_use=True))
     user.disposable_handler = cls.set
Пример #4
0
 async def edit(cls, user: BotUser, event):
     text = 'Введите сообщение, которое будет автоматически ' \
            'отправляться при наборе людей на мероприятие. ' \
            'Например: \n__+380123456789 - Герман__'
     await event.delete()
     await user.reply(text,
                      buttons=Button.text('Отмена',
                                          resize=True,
                                          single_use=True))
     user.disposable_handler = cls.set
Пример #5
0
        async def enter_num(cls, user: BotUser, event):
            data = re.findall(r'&(.+)', event.data.decode('utf-8'))[0]
            if 'x' == data:
                if user.code == '':
                    await cls.set_code(user,
                                       event,
                                       text='Ввод кода был отменен.')
                    return
                user.code = ''
            elif '<' == data and len(user.code) > 1:
                user.code = user.code[:-1]
            else:
                user.code += data

            await event.answer('Код: {}'.format(user.code + '_' *
                                                (5 - len(user.code))))
            await cls.enter_code(user, event)

            if len(user.code) >= 5:
                await cls.sign_in(user, event)
Пример #6
0
        async def set_phone(cls, user: BotUser, event):
            if event.text == 'Отмена':
                await cls.cancel(user)
                return

            if event.contact:
                user.phone = event.media.phone_number
                await cls.set_code(user)
                await user.client.connect()
                await user.client.send_code_request(user.phone)
            else:
                await cls.menu(user)
Пример #7
0
 async def set(cls, user: BotUser, event):
     if event.text != 'Отмена':
         if len(event.text) > 1:
             filters = user.filters + [event.text]
             await cls.menu(user, filters=filters)
             await user.set(filters=filters)
         else:
             text = 'Слишком мало символов. Попробуйте еще.'
             button = Button.text('Отмена',
                                  resize=True,
                                  single_use=True)
             await user.reply(text, buttons=button)
             user.disposable_handler = cls.set
     else:
         await cls.menu(user)
Пример #8
0
        async def two_step_verification(cls, user: BotUser,
                                        event: NewMessage.Event):
            if event.text == 'Отмена':
                await cls.cancel(user)
                return

            try:
                await user.client.sign_in(password=event.text)
                await cls.save_session(user)

            except PasswordHashInvalidError:
                user.disposable_handler = cls.two_step_verification
                await user.reply(
                    'Введенный вами пароль недействителен. Попробуйте снова.',
                    buttons=Button.text('Отмена', single_use=True,
                                        resize=True))
Пример #9
0
 def get_user(self, user_id):
     if user_id not in self.users:
         self.users[user_id] = BotUser(user_id)
     return self.users[user_id]
Пример #10
0
 async def _prepare_users(self):
     for record in await pool.fetch('SELECT * FROM users'):
         self.users[record['id']] = BotUser(record['id'])
         self.users[record['id']].cache(**record)
     return self