Задать вопрос
@mizanok

Pyrogram не копирует сообщения?

Есть код на pyrogram для прослушивания каналов. Все отлично работает, бот копирует сообщения с целевого канала и пересылает в мой канал, кроме каналов типа https://t.me/nn_liquidation. Почему-то сообщения именно из этого канала не забираются и бот их вообще не видит. Пытался настроить логирование и принтовал все входящие сообщения, но ничего не происходит, словно сообщения не приходят. Есть мысли,что что-то не так с кодировкой, но пока не могу осилить. Пример текстового сообщения из канала: #GMT Liquidated Short: $31.9K at $0.226⠀Bybit [NN]
import os
import tgcrypto
import sys
import logging
import asyncio
from pyrogram import Client, filters, idle # idle модуль для прослушивания входящих сообщений
from pyrogram.types import Message
from pyrogram.handlers import MessageHandler
from typing import List
from pyrogram import utils


# Открываем текстовый файл с API данными
api = open('Api.txt').read().split(':')

# Ключи доступа к API Telegram
api_id = int(api[0])
api_hash = str(api[1])
bot_token: str = open('Token.txt').read()

donors_ids = int(input('Откуда парсить, введите id канала: '))
technical_channel = int(input('Куда парсить, введите id канала: '))
target_channel = int(input('Введите id целевого канала: '))

if int(target_channel) == 0:
    print()
def get_peer_type_new(peer_id: int) -> str:
    peer_id_str = str(peer_id)
    if not peer_id_str.startswith("-"):
        return "user"
    elif peer_id_str.startswith("-100"):
        return "channel"
    else:
        return "chat"

utils.get_peer_type = get_peer_type_new
async def new_post(client: Client, message: Message): # Функция будет запускаться при поступлении новых сообщений
    await client.copy_message(chat_id=technical_channel, from_chat_id=message.chat.id, message_id=message.id) # Копируем сообщения

async def forward_media(client: Client, message: Message): # Функция для работы с видео и аудиофайлами
    if message.audio or message.video:
        media_file = message.audio or message.video
    await client.copy_message(chat_id=technical_channel, from_chat_id=message.chat.id, message_id=message.message_id)

async def forward_post(client: Client, message: Message): # Функция для модерирования контента и отправки его в целевой канал
    await client.copy_message(chat_id=target_channel, from_chat_id=message.chat.id, message_id=message.reply_to_message_id) # reply_to_message.id для отправки ответа на ранее созданное сообщения
    await message.delete() # Удаляем сообщения из технического канала
    await message.reply_to_message.delete() # Удаляем цитируемое сообщение

async def start(): # Функция запуска программы
    logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(name)s - %(message)s") # basicConfig выполняет базовую настройку системы ведения журнала

    user_bot = Client(name='user_bot', api_id=api_id, api_hash=api_hash) # Копируем сообщения из каналов доноров в технический канал
    bot_content = Client(name='bot_content', api_id=api_id, api_hash=api_hash, bot_token=bot_token) # Публикация контента из технического канала в целевой

    user_bot.add_handler(MessageHandler(new_post, filters.chat(chats=donors_ids))) # add_handler отвечает за передачу различных видов сообщений
    bot_content.add_handler(MessageHandler(forward_post, filters.reply)) # MessageHandler предназначен для обработки всех сообщений Telegram

    # Запускаем 2-х клиентов
    await user_bot.start()
    await bot_content.start()
    await idle() # Вызываем метод idle асинхронно

    # Останавливаем оба клиента
    await user_bot.stop()
    await bot_content.stop()

    # Запускаем программу
if __name__ == '__main__':
    asyncio.run(start())
  • Вопрос задан
  • 61 просмотр
Подписаться 2 Средний Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы