Ответы пользователя по тегу Telegram
  • Как сделать выравнивание в inline-кнопках telegram-бота?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Нет, нельзя. TG сам ровняет текст в кнопках, беспокоится об этом не нужно.
    Ответ написан
    Комментировать
  • Как получить и скачать .gif в Telebot Python, отправленное пользователем?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Для того чтобы получить и скачать файл .gif, отправленный пользователем в Telegram, вы можете использовать метод bot.download_file(file_path), где file_path - это путь к файлу, который вы получили из объекта сообщения.

    В вашем коде, вместо message.animation[len(message.animation) - 1].file_id нужно использовать message.animation.file_id (или message.animation[-1].file_id, чтобы получить идентификатор файла .gif). Затем, вы можете использовать метод bot.download_file(file_path) для загрузки файла по его пути. Далее, вы можете сохранить его локально и обработать с помощью библиотеки MyQR.

    Примерно такой код может получить и сохранить файл .gif, отправленный пользователем:

    @bot.message_handler(content_types=['animation'])
    def get_gif2(message):
        file_id = message.animation.file_id
        file_info = bot.get_file(file_id)
        downloaded_file = bot.download_file(file_info.file_path)
        src = str(message.from_user.id) + '.gif'
        with open(src, 'wb') as new_file:
            new_file.write(downloaded_file)
        bot.reply_to(message, "Фото добавлено")
        myqr.run(src)
        with open(src, 'rb') as photo:
            bot.send_animation(message.chat.id, photo)
        get_menu(message)
    Ответ написан
  • В чем ошибка Python - aiogram?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Ошибка указывает, что в коде происходит попытка вызвать функцию logging.INFO с аргументами {user_id=} {user_full_name=}, однако logging.INFO является числовым значением уровня логгирования, а не функцией. Вместо этого нужно использовать функцию logging.info, чтобы вывести сообщение в лог:
    logging.info(f'{user_id=} {user_full_name=} {time.asctime()}')
    Ответ написан
    2 комментария
  • Возможно ли узнать свои права?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Да, возможно. Для этого можно использовать метод getChatMember из библиотеки telebot. Этот метод возвращает объект типа ChatMember, содержащий информацию о статусе и правах члена беседы.

    Пример использования:

    import telebot
    
    bot = telebot.TeleBot(TOKEN)
    
    chat_id = 12345
    user_id = 67890
    
    chat_member = bot.get_chat_member(chat_id, user_id)
    print(chat_member.status)  # статус члена беседы (например, "creator" или "member")
    print(chat_member.can_send_messages)  # True/False - может ли член беседы отправлять сообщения
    print(chat_member.can_change_info)  # True/False - может ли член беседы изменять информацию о беседе

    Обратите внимание, что для вызова этого метода вам нужно будет указать chat_id - идентификатор беседы, в которой вы хотите узнать права, и user_id - идентификатор пользователя (в этом случае это идентификатор бота.
    Ответ написан
    Комментировать
  • Как правильно отредактировать исходный код готового телеграмм бота на php?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Для того, чтобы бот ответил "Есть ответ" в любом случае, если в тексте сообщения содержится слово "нет", нужно использовать функцию stripos вместо оператора ==. Функция stripos ищет первое вхождение подстроки в строку без учета регистра.

    Пример:

    if (stripos($text, "нет") !== false) {
        bot('sendMessage',[
            'chat_id'=>$update->message->from->id,
            'text'=>"Есть ответ",
        ]);
    }


    В этом случае бот отправит сообщение "Есть ответ", если в тексте сообщения содержится слово "нет", независимо от того, где оно расположено в тексте.
    Ответ написан
    Комментировать
  • Как достать user_id из ссылки на профиль?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Чтобы достать user_id из ссылки, содержащейся в переменной mention, нужно спарсить строку с помощью регулярных выражений.

    Вот пример кода, который можете использовать:
    import re
    
    # Используем регулярное выражение, чтобы найти user_id в ссылке
    match = re.search(r'tg://user\?id=(\d+)', mention)
    
    # Если ссылка была найдена
    if match:
        # Извлекаем user_id из ссылки
        user_id = int(match.group(1))
        print(user_id)
    Ответ написан
    Комментировать
  • Telethon выдает ошибку, что не может найти entity, в чем проблема?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Ошибка "Cannot find any entity corresponding to "-12345"" означает, что указанное число (-12345) не соответствует ни одной сущности (entity) в Telegram. Сущность (entity) в Telethon это любой объект, с которым можно взаимодействовать через API, например, пользователь, группа, канал и т.д.

    Чтобы решить эту проблему, нужно убедиться, что вы передаете правильный идентификатор сущности в метод get_participants.
    Ответ написан
    Комментировать
  • Как конвертировать channel_id в ссылку или юзернейм? Телеграм?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Чтобы получить юзернейм канала из channel_id, вы можете воспользоваться методом get_entity класса TelegramClient. Этот метод принимает channel_id и возвращает объект типа Channel, у которого есть свойство username.

    Вот пример кода, который получает юзернейм канала:

    from telethon import TelegramClient
    
    # Инициализируем клиент
    client = TelegramClient('session_name', api_id, api_hash)
    
    # Получаем канал по его channel_id
    channel = client.get_entity(channel_id)
    
    # Выводим юзернейм канала
    print(channel.username)

    Чтобы получить ссылку на канал, вы можете сконструировать ее самостоятельно, используя юзернейм канала. Например, так:
    link = f't.me/{channel.username}'
    После этого в переменной link будет храниться ссылка на канал вида t.me/username. Вы можете использовать ее для перехода на канал в телеграме.
    Ответ написан
    2 комментария
  • Как получить messageID отправленого сообщения в телеграм?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Чтобы получить messageID отправленного сообщения в Telegram с помощью библиотеки pyrogram, нужно использовать метод send_message и передать ему чат и текст сообщения. Этот метод возвращает объект Message, у которого есть атрибут message_id, содержащий ID сообщения.

    Пример:
    import pyrogram
    
    # Создаем клиент pyrogram
    client = pyrogram.Client("my_account")
    
    # Отправляем сообщение
    message = client.send_message(chat_id=12345678, text="Hello, world!")
    message_id = message.message_id
    Ответ написан
    Комментировать
  • [aiogram] Как получить упомянутого пользователя?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Да, это возможно. В объекте Message есть атрибут entities, который содержит список сущностей, найденных в тексте сообщения. Сущности могут быть разных типов, например, хештеги, ссылки и имена пользователей. Чтобы получить упомянутого пользователя, нужно обработать список сущностей, найти там сущность типа MessageEntityMentionName и взять из нее user_id.
    Ответ написан
  • Почему при запуске скрипта telethon завершаются все сессии?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Проблема может быть в том, что вы неправильно используете файл сессии. Сессия хранится в файле на компьютере, а не в телеграме. При каждом запуске скрипта вы должны указывать файл сессии с помощью аргумента session_name. Если вы хотите использовать тот же файл сессии, что и в предыдущем запуске, укажите тот же самый аргумент. Если вы хотите создать новый файл сессии, укажите новое имя файла.
    Ответ написан
  • Как вернуть публичный паблик в поиск в Telegram после "теневого бана"?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Если ваш публичный паблик был удален из глобального поиска в Telegram (так называемый "теневой бан"), то, увы, нет никакого способа вернуть его обратно. Теневой бан в Telegram - это прямое решение специалистов поддержки, которое не объясняется и не обсуждается. Обычно такое решение принимается, если паблик нарушает правила Telegram.
    Ответ написан
    Комментировать
  • При отправке неправильного значения он пишет "Что введите корректные данные" Вводишь данные и не чего не происходит в чем проблема?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Ваш вопрос не корректен, но я постараюсь ответить на него:

    Возможно, проблема заключается в том, что в функции currency вы не указываете, что нужно делать, если полученное сообщение не равно 'Калькулятор цен'. В этом случае функция вызывает саму себя снова, но уже с новым сообщением, которое, вероятно, также не равно 'Калькулятор цен'. И так происходит бесконечное количество раз.
    Ответ написан
    Комментировать
  • Срок действия ссылки истёк телеграм, что делать?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Когда тебя выганяют из группы, ты попадаешь в черный список, поэтому не можешь вступить в группу снова.
    Можешь передать администратору чата, что нужно зайти в "Управление группой" -> "Разрешения" -> "Черный список", найти нужного пользователя и нажать кнопку "Удалить".
    Ответ написан
    Комментировать
  • Зачем каждый телеграм бот требует создавать своего телеграм бота?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Можно, но тогда ты не сможешь персонализировать бота, например указать в его описании ссылку на какой-нибудь канал или другую информацию. Не сможешь грамотно настроить сообщения, которые получает пользователь при заходе в бота, не сможешь установить боту аватар и т.д.
    Надеюсь суть ясна.
    Ответ написан
  • Можно ли отправить сообщение пользователю от имени бота, используя только username?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Нет, нельзя. Но вы можете сохранять username вместе с telegram_id в базе данных, а при надобности извлекать эти данные.
    Ответ написан
    Комментировать
  • Каким образом можно инвайтить пользователей в Телеграм канал с нескольких аккаунтов?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Вот код с комментариями:

    from telethon import TelegramClient
    from telethon import TelegramClient
    
    # Настройка первого клиента
    client_1 = TelegramClient("session_name_1", API_ID_1, API_HASH_1)
    
    # Настройка второго клиента
    client_2 = TelegramClient("session_name_2", API_ID_2, API_HASH_2)
    
    # Настройка третьего клиента
    client_3 = TelegramClient("session_name_3", API_ID_3, API_HASH_3)
    
    # Авторизуйтесь с помощью каждого из клиентов:
    client_1.start()
    client_2.start()
    client_3.start()
    
    # Получение информации о канале
    channel = client_1.get_entity("@channel_username")
    
    # Получение списка пользователей, которых нужно инвайтить
    users = [client_1.get_entity("@user1_username"), client_1.get_entity("@user2_username")]
    
    # Инвайт пользователей с первого аккаунта
    for user in users:
        client_1(InviteToChannelRequest(channel, [user]))
    
    # Инвайт пользователей со второго аккаунта
    for user in users:
        client_2(InviteToChannelRequest(channel, [user]))
    
    # Инвайт пользователей с третьего аккаунта
    for user in users:
        client_3(InviteToChannelRequest(channel, [user]))
    Ответ написан
    Комментировать
  • Как получить список пользователей канала Telegram используя Telethon?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Вот пример кода, который позволит вам получить полный список пользователей канала Telegram с помощью python и библиотеки Telethon:
    # Импортируйте необходимые модули:
    from telethon import TelegramClient
    from telethon.tl.functions.channels import GetParticipantsRequest
    
    # Получите ключи API и секретный ключ для работы с API Telegram. 
    # Для этого нужно зарегистрировать свое приложение на сайте https://my.telegram.org/auth.
    api_id = 123456
    api_hash = 'your_api_hash'
    
    # Создайте экземпляр клиента Telethon:
    client = TelegramClient('session_name', api_id, api_hash)
    
    # Подключитесь к API:
    client.start()
    
    # 6. Получите информацию о канале, в котором вы хотите получить список пользователей. 
    # Для этого можно использовать метод `get_entity`:
    channel = client.get_entity('channel_name')
    
    # Определите функцию для получения списка пользователей:
    def get_channel_users(channel):
        offset = 0
        limit = 100
        all_users = []
    
        while True:
            result = client(GetParticipantsRequest(
                channel=channel,
                filter=ChannelParticipantsSearch(''),
                offset=offset,
                limit=limit,
                hash=0
            ))
            users = result.users
            all_users.extend(users)
            if len(users) < limit:
                break
            offset += limit
        return all_users
    
    # Получите список пользователей канала:
    users = get_channel_users(channel)
    
    # Выведите их на экран:
    for user in users:
        print(user.first_name, user.last_name, user.username)
    Ответ написан
    Комментировать
  • Можно ли с помощью Telethon нажимать или отправлять запросы по Inline клавиатуре?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Чтобы нажать inline кнопку с помощью Telethon, вы можете воспользоваться методом
    client.send_callback_query(callback_query_id: str, text: Optional[str] = None, show_alert: Optional[bool] = None, url: Optional[str] = None, cache_time: Optional[int] = None)
    клиента Telethon.

    Пример использования:

    from telethon import TelegramClient, events
    
    API_ID = 12345
    API_HASH = 'your_api_hash'
    
    client = TelegramClient('session_name', api_id, api_hash)
    client.start()
    
    @client.on(events.CallbackQuery)
    async def callback_query_handler(event):
        # Получаем ID inline кнопки
        callback_query_id = event.data
    
        # Нажимаем кнопку
        await client.send_callback_query(callback_query_id)

    В этом примере мы создаем хендлер события CallbackQuery, который будет вызываться каждый раз, когда пользователь нажимает inline кнопку. Мы получаем ID inline кнопки из события, а затем нажимаем кнопку с помощью метода send_callback_query().
    Ответ написан
    Комментировать
  • Как получить id пользователя через @упоминание в telegram?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Чтобы получить id пользователя через упоминание в Telegram с помощью aiogram, вам нужно будет сначала извлечь упоминание из сообщения, а затем использовать метод resolve_peer клиента для получения id пользователя.

    Вот пример того, как это можно сделать:
    import re
    from aiogram import Bot, Dispatcher, types
    
    # Инициализируем бота и диспетчер
    bot = Bot(token='your_bot_token')
    dp = Dispatcher(bot)
    
    @dp.message_handler()
    async def handle_message(message: types.Message):
        # Извлекаем упоминание из сообщения
        mention = re.search(r'@(\w+)', message.text)
        if mention:
            # Получаем id пользователя через resolve_peer
            user_id = await bot.resolve_peer(mention.group(1))
            # Теперь можем использовать user_id для выполнения нужных действий
            await message.reply(f'User ID: {user_id}')


    Код написан довольно костыльно, не могу не согласится, но для примера сгодится.
    Ответ написан