• Ошибка в боте, который отправляет комментарии.Что делать?

    Во первых не светите свой ID и Hash на форумах, это как логин и пароль от аккаунта)

    Ошибка у вас из-за того, что в цикле переменная msg это и есть сообщение чата. Нужно сделать так:
    print(f”Пропускаем уже обработанное message _id={msg.id}”)


    Для отладки в следующий раз можете делать вывод переменной в консоль, чтобы понять какие там есть поля и как к ним обращаться.
    Ответ написан
    Комментировать
  • Как в Telegram сделать бота, который будет отправлять сообщения подписчику после его вступления в канал?

    Возможно вы имеете в виду Чат? Если да, то схема такая:
    1. Создаём бота
    2. Добавляем в чат
    Работа кода:
    3. Ловим служебное сообщение о новом пользователе
    4. Выполняем необходимые действия.

    Это всё работает внутри чата, тк:
    1. Служебные сообщения присутствуют только в чате.
    2. Бот не может писать пользователю в личные сообщения первым. Только отвечать в чате.

    Код зависит от библиотеки.
    Ответ написан
    Комментировать
  • Pyrogram bot: как отправить фото по айди?

    EntireMusic
    @EntireMusic Автор вопроса
    (:
    Всем большое спасибо за подсказки, особенно User . Проблема была как раз в фильтре. Нужно было искать photo и photo.file_id.
    Универсальный вариант - скачивать и отправлять фото, т.к. пересылка не будет работать из закрытых чатов. Вот такую функцию по-быстрому сообразил для загрузки фото.
    async def dl_last_photo(target):    #передаём в функцию ID или Username чата
        async for msg in app.get_chat_history(target, limit = 50, offset_id = -1):    #ищем в истории с конца, обрабатываем 50 сообщений
            if msg.photo:    #если есть фото
                print(msg.photo.file_id)    #в консоль выводим ID - не обязательно
                await app.download_media(msg.photo) #скачиваем фото из сообщения в стандартный каталог (папка_бота/downloads)


    По аналогии можно фильтровать и другие типы файлов. Так же можно менять папку, куда скачивается файл. И если вы уверены, что чат открыт и разрешена пересылка - можно и сразу переслать фото по ID куда нужно.
    Ответ написан
    Комментировать
  • Пишу тг бота для отправки комментариев на pyrogram. Выдаёт ошибку,что делать?

    В такой каше сложно разобраться. Но если я правильно понимаю, ты пытаешься проверить несуществующий атрибут:
    Выдаёт ошибку: if (msg.from_user is None and msg.forward_from_chat.id == public.id):
    AttributeError: ‘NoneType’ object has no attribute ‘I’d’

    Из твоего кода:
    if (msg.from_user is None) # если сообщение не имеет автора
    # и это репост из паблика (проверка по id)


    Это так не работает. Если нет автора, то такого атрибута нет вообще, эта часть не работает. Вот тебе пример на Pyrogram как из сообщения вытащить ID.
    any_sender_id = message.from_user.id if message.from_user else message.sender_chat.id #вытаскиваем ID
    if any_sender_id == public.id: #проверяем что это нужный паблик
        #дальше твоя логика

    Если сообщение "from_user", значит принимает его ID. Иначе - принимает ID чата/канала.

    этот же код чуть понятнее:
    any_sender_id = None    #объявляем переменную для хранения ID
    if message.from_user:    #если у нас есть параметр from_user
        any_sender_id = message.from_user.id    #присваеваем ID юзера
    else:    #иначе
        any_sender_id = message.sender_chat.id    #присваеваем ID канала или чата
    
    if any_sender_id == public.id:    #проверяем что это нужный паблик
        #дальше твоя логика
    Ответ написан
    Комментировать
  • Как найти бота или чат по id в Telegram?

    Смотря какой библиотекой будешь пользоваться.
    Ответ написан
  • Telegram userbot на Telethon не редактирует пересланные сообщения. Как исправить?

    EntireMusic
    @EntireMusic Автор вопроса
    (:
    Проблема решена! Само собой как-то заработало, в коде ничего не менял.

    Возможно, это какой-то глюк с сессиями, если ты в ТГ с этого же аккаунта в данный момент. Хотя в консоли никаких ошибок небыло, когда тестировал.

    Сейчас функция работает и с текстом, и с пересланными сообщениями. Иногда долговато - несколько секунд (бота залил на Heroku).
    Ответ написан
  • Aiogram: как обработать только одно "сообщение" из message.content_group?

    EntireMusic
    @EntireMusic Автор вопроса
    (:
    ec4b39bd9159b4972c016d7384e84ee0.jpg
    Решение проблемы из разряда "зато работает":
    # к тому что есть добавил это
    from time import sleep
    # список, где будет храниться message.media_group_id
    check_mess = []
    
    @dp.channel_post_handler(content_types=['any'])
    async def auto_redactor(message: types.Message):
        
        text = message.text
        if isinstance(message.caption, str):
            caption = message.caption
        else:
            caption = ''
    
        if hasattr(message, 'text') and isinstance(text, str):
            await message.edit_text(f'{text}\n\nподпись к тексту',parse_mode="HTML")
    # добавил проверку, что media_group_id ещё не в списке
        elif hasattr(message, 'caption') and message.media_group_id not in check_mess:
    # добавляем в список наш media_group_id
            check_mess.append(message.media_group_id)
            await message.edit_caption(f'подпись к медиа',parse_mode="HTML")
    # чищу список после 5 сек ожидания, чтобы хендлер успел обработать все медиа
            sleep(5)
            check_mess.clear()
    Ответ написан
    Комментировать
  • Aiogram: Нет InlineKeyboardButton под постами с несколькими фото. В чём проблема?

    EntireMusic
    @EntireMusic Автор вопроса
    (:
    В общем, я сдался.
    Сегодня протестировал ручную отправку медиагруппы и оказалось, что для bot.send_media_group просто-напросто нет аргумента reply_markup, как и на уровне прикрепления фото. Поэтому, без костылей уж точно не получится написать код, где к группе медиа прикрепляется InlineKeyboardButton. А может и вовсе нет такой возможности.
    Ответ написан
    Комментировать