Всем добрый день.
У меня есть список пабликов (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())