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

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Нет, нельзя. TG сам ровняет текст в кнопках, беспокоится об этом не нужно.
    Ответ написан
    Комментировать
  • Как решить ошибку python. RuntimeWarning: coroutine 'some_name' was never awaited?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Данная ошибка возникает, когда вызывается корутина (асинхронная функция), но не ждется ее завершение. В вашем случае это функция main.

    Чтобы решить эту проблему, нужно дождаться завершения функции main. Для этого вы можете использовать конструкцию await main() или asyncio.run(main()).

    После этого запустите бота снова и проверьте, что ошибка больше не возникает.
    Ответ написан
    Комментировать
  • Как достать 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)
    Ответ написан
    Комментировать
  • Проблема с машиной состояний в aiogram. Как это можно исправить?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Чтобы избежать этой проблемы, вы можете пометить каждую команду, которая вызывает машину состояний, с помощью @dp.message_handler(state=None). Таким образом, если пользователь вызывает эту команду, машина состояний будет начинаться сначала, а не продолжать с текущего состояния.
    Ответ написан
    Комментировать
  • [aiogram] Как получить упомянутого пользователя?

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

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    ля того, чтобы сохранить сообщение пользователя в переменную в цикле, вы можете использовать декоратор @dp.message_handler(), который позволяет обрабатывать сообщения в цикле. Например, так:
    from aiogram import Dispatcher, types
    
    @dp.message_handler()
    async def handle_message(message: types.Message):
        # Здесь можете проверить, что пользователь является админом
        if user_is_admin(message.from_user.id):
            # Сохраняем сообщение в переменную
            message_text = message.text
            # Отправляем сообщение в канал
            await bot.send_message(channel_id, message_text)

    В этом примере handle_message() функция будет вызываться каждый раз, когда пользователь отправит сообщение боту. Внутри функции вы можете проверить, что пользователь является админом, и сохранить сообщение в переменную message_text.
    Ответ написан
    Комментировать
  • Как написать бот для Одноклассников на Python?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Чтобы написать бота для Одноклассников на Python, вам понадобится использовать библиотеку okpy, которая является официальным API для разработки ботов в Одноклассниках.

    Для того чтобы установить библиотеку okpy, выполните следующую команду:

    pip install okpy

    После установки библиотеки вы можете начать работу с ней, импортировав ее в свой скрипт:

    import okpy

    Далее, чтобы авторизоваться в Одноклассниках, вам нужно будет создать экземпляр класса Client и вызвать метод auth(), передав в него логин и пароль:

    client = okpy.Client()
    client.auth('login', 'password')


    После успешной авторизации вы сможете вызывать различные методы API Одноклассников, чтобы отправлять сообщения, получать информацию о пользователях и т. д.

    Вот пример простого бота на Python, который использует библиотеку okpy для авторизации в Одноклассниках и отправки сообщений:

    import okpy
    
    # авторизуемся в Одноклассниках
    client = okpy.Client()
    client.auth('login', 'password')
    
    # отправляем сообщение в чат
    client.messages.send('chat_id', 'Привет, я бот!')
    Ответ написан
    1 комментарий
  • Как создать много пригласительных ссылку с помощью бота?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Для создания пригласительных ссылок в Telegram канале с помощью Python и библиотеки Telethon вам нужно выполнить следующие шаги:

    • Установите Telethon:

    pip install telethon

    • Получите ключи API и секретный ключ для работы с API Telegram. Для этого нужно зарегистрировать свое приложение на сайте https://my.telegram.org/auth.


    • Импортируйте необходимые модули:

    from telethon import TelegramClient
    from telethon.tl.functions.channels import InviteToChannelRequest


    • Создайте экземпляр клиента Telethon:


    client = TelegramClient('session_name', api_id, api_hash)


    • Подключитесь к API:

    client.start()
    • Получите информацию о канале, в который вы хотите добавить пригласительную ссылку:

    channel = client.get_entity('channel_name')
    • Создайте пригласительную ссылку:


    result = client(InviteToChannelRequest(channel=channel))

    • Получите ссылку из ответа:


    invite_link = result.link
    print(invite_link)
    Ответ написан
    Комментировать
  • Как получить 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}')


    Код написан довольно костыльно, не могу не согласится, но для примера сгодится.
    Ответ написан
  • Как воспользоваться методом messages.report из API телеграмм?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    1, 2, 3

    Выжимка:
    from pyrogram.raw.functions.account import ReportPeer
    from pyrogram.raw.types import *
    
    
    # Edited. Forgot to replace types2 classes you've putted in your code 
    def get_report_reason(text):
        if text == "Report for child abuse.":
            return InputReportReasonChildAbuse()
        elif text == "Report for impersonation.":
            return InputReportReasonFake()
        elif text == "Report for copyrighted content.":
            return InputReportReasonCopyright()
        elif text == "Report an irrelevant geogroup.":
            return InputReportReasonGeoIrrelevant()
        elif text == "Other.":
            return InputReportReasonOther()
    
    
    peer        = app.resolve_peer("@test")
    peer_id     = peer["channel_id"]
    access_hash = peer["access_hash"]
    
    # Also you have to determine here what type of peer is that. 
    # Lets take channel.
    channel = InputPeerChannel(channel_id=peer_id, access_hash=access_hash)
    reason  = get_report_reason(report_reason)
    
    report_peer = ReportPeer(
        peer=channel, 
        reason=reason, 
        message="text"
    )
    report = app.send(report_peer)
    Ответ написан
    Комментировать
  • Пытаюсь создать телеграм бот для скачивания видео с Youtube но выдает ошибку. Что делать?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Проблема кроется в keyboard.py
    Вы передаете в callback_data url:
    Звук в лучшем качестве.', callback_data=f'best_audio|{url}')

    Telegram ругается именно на это.
    Советую вам просто сначала запрашивать качество, а потом ссылку на видео. Это решит вашу проблему.

    Еще вместо bot.send_message(...) и bot.delete_message(...) используйте message.answer(...) и message.delete()
    Ответ написан
    Комментировать
  • Почему бот не пересылает сообщения?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Я советую не писать ботов на telebot даже как обучение. Эта библиотека прививает плохие привычки, от которых потом нужно избавляться. Советую перейти на aiogram

    А Дмитрий Касаткин правильно сказал.
    Немного не правильно составлен код.
    Нужно использовать next_step для перехода в другую функцию. И там уже обрабатываешь то что ввел юзер.
    Ответ написан
  • Есть ли Telegram-бот, который делает forward сообщения из канала в группу каждый час?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Если канал твой, то можешь привязать чат для комментариев. Туда автоматически будут попадать все посты из канала.

    Если же это чужой канал, то копай в сторону telethon и pyrogram (юзерботы).
    Опишу примерный алгоритм действий:
    • Получить последний пост из канала
    • Поверить его на наличие в чате (то есть уже переслали). Можно использовать базу данных и хеши (md5/sha512 и др.)
    • Если пост новый, тогда fowrward в чат.
    • Подождать 1 час и начать с начала
    Ответ написан
    Комментировать
  • Ошибка в aiogram :'cannot import name 'executor' from 'aiogram'', почему?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Проблема в том, что вы используете beta-версию aiogram, а там все по-другому и нестабильно.
    Советую сменить версию с 3.0.0b5 на 2.23.1.
    Это можно сделать так:
    pip uninstall aiogram
    pip install aiogram
    Ответ написан
    4 комментария
  • Как на telebot скачивать картинки с сайтов и отправлять человеку который введет команду?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Я думаю так
    import requests
    # Импорты aiogram
    
    image = requests.get('https://picsum.photos/200/300').text
    
    @dp.message_handler(command='/pic')
    async def img_send(message):
    	await bot.send_photo(message.from_user.id, image)
    Ответ написан
    Комментировать
  • Бот не отправляет видео telegram?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Скорее всего это поможет:
    @dp.message_handler(commands=['test'])
    async def cmd_image(message: types.Message):
        with open('video/' + random.choice(os.listdir('video')), 'rb') as video:
            await message.answer_video(video, caption = 'Лови' )
    Ответ написан
    Комментировать
  • Как подключить платежную систему QIWI к Telrgram боту?

    gnifajio
    @gnifajio Автор вопроса
    Совершенствуюсь каждый день
    Спасибо тебе, LXSTVAYNE , но я написал для этого библиотеку gQiwiAPI
    Ответ написан
    Комментировать