• Как брать код подтверждения пользователя исходя из его ввода в чат?

    @k1nster Автор вопроса
    Скорее всего я как-то через состояние AIOGRAM это неправильно передаю). Но вот решения так и не нашёл/
  • Как брать код подтверждения пользователя исходя из его ввода в чат?

    @k1nster Автор вопроса
    soremix, Хорошо. Код у меня действительно отправляется, но после его ввода получаю снова ошибку: ConnectionError: Cannot send requests while disconnected.

    Перепробовал уже тучу способов, никак не могу исправить. Возможно знаете почему она возникает?
  • Как брать код подтверждения пользователя исходя из его ввода в чат?

    @k1nster Автор вопроса
    soremix, так я тоже пробывал, получаю ошибку из ряда "Невозможно отправить запрос при отключенном соединении":
    ConnectionError: Cannot send requests while disconnected

    @dp.message(F.text.startswith('/connect'))
    async def cmd_start(message: Message, state: FSMContext):
        # Получаем текст сообщения и разделяем его на части по пробелу
        text = message.text.strip()
        parts = text.split(' ')
        
        if len(parts) == 1:
            # Пользователь отправил только команду /connect, отправляем инструкцию
            await message.answer(MESSAGES['first_connection'], parse_mode='Markdown')
        elif len(parts) == 2:
            phone = parts[1]
            await state.update_data(phone = phone)
            # Попытка авторизации
            try:
                await message.reply(MESSAGES['phone_handler'])
                # Авторизуемся с использованием сессии, связанной с аккаунтом пользователя
                user_client = TelegramClient(str(message.from_user.id), api_id, api_hash)
                await message.answer('Please enter the login code sent to telegram app or sms (no spaces).\n\nFor example, your login code is 123456, then enter mycode123456')
                await user_client.send_code_request(phone)
                await state.set_state(Form.first_connection)
            except PhoneNumberInvalidError:
                await message.answer("❌ The phone number is invalid.")
    
    # Тут будет состояние обрабатывающие сообщение
    @dp.message(Form.first_connection)
    async def cmd_phone(message: Message, state: FSMContext):
        data = await state.get_data()
        phone = data['phone']
        code = int(message.text)
    
        await client.sign_in(phone, code)
  • Как брать код подтверждения пользователя исходя из его ввода в чат?

    @k1nster Автор вопроса
    Мне кажется я делаю что-то не так, т.к он всё равно запрашивает код от телефона у меня в консоле). После ввода кода в бота - ничего не происходит всё так же). У меня даже сообщение, которое после await user_client.start(phone) не отслылается пользователю.

    Работаю с этой библиотекой впервые, по этому задаю столько вопросов xD

    @dp.message(F.text.startswith('/connect'))
    async def cmd_start(message: Message, state: FSMContext):
        # Получаем текст сообщения и разделяем его на части по пробелу
        text = message.text.strip()
        parts = text.split(' ')
        
        if len(parts) == 1:
            # Пользователь отправил только команду /connect, отправляем инструкцию
            await message.answer(MESSAGES['first_connection'], parse_mode='Markdown')
        elif len(parts) == 2:
            phone = parts[1]
            await state.update_data(phone = phone)
            # Попытка авторизации
            try:
                await message.reply(MESSAGES['phone_handler'])
                # Авторизуемся с использованием сессии, связанной с аккаунтом пользователя
                user_client = TelegramClient(str(message.from_user.id), api_id, api_hash)
                await user_client.start(phone)
                await message.answer('Please enter the login code sent to telegram app or sms (no spaces).\n\nFor example, your login code is 123456, then enter mycode123456')
                sent = await client.send_code_request(phone)
                print(sent)
                await state.set_state(Form.first_connection)
                await user_client.disconnect()
            except PhoneNumberInvalidError:
                await message.answer("❌ The phone number is invalid.")
    
    @dp.message(F.text.startswith('/chat'))
    async def cmd_start(message: Message):
        
        phone = 'тут мой телефон'
        
        await client.start(phone)
        
        # get group and channel list
        dialogs = await client.get_dialogs()
    
        # print group and channel data
        for dialog in dialogs:
            if dialog.is_group or dialog.is_channel:
                print(f"{dialog.name}: {dialog.id}")
    
    # Тут будет состояние обрабатывающие сообщение
    @dp.message(Form.first_connection)
    async def cmd_phone(message: Message, state: FSMContext):
        data = await state.get_data()
        phone = data['phone']
        code = int(message.text)
        
        await client.sign_in(phone, code)
    # Основной цикл бота
    async def main():
        await dp.start_polling(bot)
  • Как получить список всех групп/каналов в которых находится пользователь Telegram?

    @k1nster Автор вопроса
    Михаил Р., то есть api_id и api_hash не обязательно менять при каждой новой авторизации пользователя на сколько я понял, да? Можно использовать один для разных номеров?

    Или я неправильно вас понял?
  • Как получить список всех групп/каналов в которых находится пользователь Telegram?

    @k1nster Автор вопроса
    Спасибо!).

    Есть вопросы по поводу api_id, и api_hash. У каждого пользователя они разные, как узнать какой именно у него?
    Если с номером и его подтверждением вопросов нету, то как быть с этим?)
  • Как сделать проверку написал ли что-то человек в бота, либо нажал на кнопку?

    @k1nster Автор вопроса
    Спасибо, код потправил, вроде бы всё работает).
  • Как реализовать диалоговый бот на PHP?

    @k1nster Автор вопроса
    исходя из ответов, для моей задачи в любом случаи нужно будет подключать БД, да?)
  • Как реализовать диалоговый бот на PHP?

    @k1nster Автор вопроса
    Stalker_RED, я всё прекрасно понимаю, но мне сейчас важно хотя бы понять, каким всё таки образом добиться сохранения вводных данных в текущей сессии, если это возможно без использования БД).
  • Как реализовать диалоговый бот на PHP?

    @k1nster Автор вопроса
    Этот вариант уже пробывал. Если я правильно всё понимаю, то проблема в том, что конструкция elseif не позволяет этого сделать. И после того как человек ввёл ссылку, и потом число. В поле $message будет записываться на сколько я понял число, ссылка просто улетает и не считывается.

    # Записываем сообщение пользователя
    $message = mb_strtolower(($data['text'] ? $data['text'] : $data['data']), 'utf-8');
    
    if ($message === '/start') {
        $method = 'sendMessage';
        $send_data = [
            'text' => "Привет! Я бот для анализа активности подписчиков в каналах, чатах и группах."
        ];
    
    } elseif (strpos($message, 'http') === 0) {
        $_SESSION['link'] = $message;
    
        $method = 'sendMessage';
        $send_data = [
            'text' => "Отлично! Отправь мне число:"
        ];
    } elseif (is_numeric($message)) {
        $link = $_SESSION['link'];
    
        $method = 'sendMessage';
        $send_data = [
            'text' => "Отлично! Ссылка: " . $link # вместо ссылки выводится просто пустая строка.
        ];
    }