@denskkk

Как отправлять фото,гиф,видео из одного канала в другой?

Всем добрый день.
У меня есть список пабликов (SOURCE_PUBLICS) из которых приходят посты в канал модерации (PRIVATE_PUBLIC)
Когда приходит пост в канал модерации,мне пишет Post ID 12 added to DB(к примеру), после чего я ввожу 12+ и пост отправляется в основной паблик(PUBLIC_PUBLIC)

До этого код был написан на Pyrogram,но была проблема в том что он не отправлял сообщения из некоторых каналов(я подозреваю ограничения ставят сами каналы,потому что я создавал полностью левые на других аккаунтах и всё приходило)

Я решил переписать под telethon и теперь такая проблема: Когда приходит пост в модерацию,я его подтверждаю(12+) и мне пишет

ERROR: 'TelegramClient' object has no attribute 'send_video' или ERROR: 'TelegramClient' object has no attribute 'send_photo'

Помогите пожалуйста с решением,в документации не нашел.

from telethon import TelegramClient, events
from telethon.tl.types import Document
import shelve
import asyncio

# Настройки
API_ID = 12345678
API_HASH = '2csfdsfdsdsfsdfsfsdfs2ecf52ee'
PHONE_NUMBER = '+333333333'
PRIVATE_PUBLIC = 'modertestasdada'
PUBLIC_PUBLIC = 'griarttest'
SOURCE_PUBLICS = [
    'pixelartlin', 
    'pixels_art',
    'pxlrt',
    'pixelarts',
    'testpublfdgdgdgdfgic',
    'pixelarthub',
    'pixel_artlove',
]

# Инициализация клиента
client = TelegramClient('cyberpunk', API_ID, API_HASH)

db = shelve.open('data.db', writeback=True)

# Функция добавления поста в базу данных
def add_post_to_db(message, media_type, media_id):
    try:
        new_id = max(int(k) for k in db.keys() if k.isdigit()) + 1
    except ValueError:
        new_id = 1

    db[str(new_id)] = {
        'username': message.chat.username,
        'message_id': message.id,
        'text': message.text,
        'media_type': media_type,
        'media_id': media_id,
    }
    db.sync()  # Ensure data is written to disk
    return new_id

@client.on(events.NewMessage(chats=SOURCE_PUBLICS, incoming=True))
async def new_channel_post(event):
    message = event.message
    media_type = None
    media_id = None

    if message.photo:
        media_type = 'photo'
        media_id = message.photo.id
    elif message.video:
        media_type = 'video'
        media_id = message.video.id
    elif message.media and isinstance(message.media, Document):
        doc = message.media
        media_id = doc.id
        if doc.mime_type.startswith('video/'):
            media_type = 'video'
        elif doc.mime_type.startswith('image/'):
            media_type = 'photo'
        elif doc.mime_type.startswith('animation/'):
            media_type = 'animation'
        else:
            await client.send_message(PRIVATE_PUBLIC, 'Unsupported document MIME type')
            return
    else:
        await client.send_message(PRIVATE_PUBLIC, 'Unsupported media type')
        return

    if not media_type or not media_id:
        await client.send_message(PRIVATE_PUBLIC, 'Unsupported media type or missing media_id')
        return

    post_id = add_post_to_db(message, media_type, media_id)
    await client.forward_messages(PRIVATE_PUBLIC, message)
    await client.send_message(PRIVATE_PUBLIC, f'Post ID {post_id} added to DB')

# Обработчик запросов на публикацию сообщения в публичный канал
@client.on(events.NewMessage(chats=PRIVATE_PUBLIC))
async def post_request(event):
    message = event.message
    if not message.text or not message.text.strip().endswith('+'):
        return

    post_id = message.text.strip('+')
    post = db.get(post_id)
    if post is None:
        await client.send_message(PRIVATE_PUBLIC, f'ERROR: No post with ID {post_id} in DB')
        return

    try:
        caption = f"**[GriArt](https://t.me/GRlART)**\n"

        if post['media_type'] == 'animation':
            await client.send_document(PUBLIC_PUBLIC, file=post['media_id'], caption=caption)
        elif post['media_type'] == 'photo':
            await client.send_photo(PUBLIC_PUBLIC, file=post['media_id'], caption=caption)
        elif post['media_type'] == 'video':
            await client.send_video(PUBLIC_PUBLIC, file=post['media_id'], caption=caption)
        else:
            await client.send_message(PRIVATE_PUBLIC, 'ERROR: Unsupported media type')
            return

        await client.send_message(PRIVATE_PUBLIC, 'SUCCESS REPOST!')
    except Exception as e:
        await client.send_message(PRIVATE_PUBLIC, f'ERROR: {e}')


# Запуск клиента
async def main():
    await client.start(phone=PHONE_NUMBER)
    print('Client is running...')
    await client.run_until_disconnected()

if __name__ == '__main__':
    asyncio.run(main())
  • Вопрос задан
  • 72 просмотра
Пригласить эксперта
Ваш ответ на вопрос

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

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