Как передавать сообщение от бота в Telegram с помощью библиотеки Telethon?

Как сделать так, чтобы бот пересылал сообщения из одного канала в другой и изменял их форматирование, а именно убирал сноски, сохраняя указанную структуру?
  • 25 марта 2024 г. 17:49
Ответы на вопрос 2
Для передачи сообщений от бота в Telegram с помощью библиотеки Telethon, вы можете воспользоваться следующим кодом:

```python
from telethon import TelegramClient, events

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

@client.on(events.NewMessage)
async def forward_message(event):
    source_channel = 'source_channel_username'
    destination_channel = 'destination_channel_username'
    
    if event.is_private and event.message.peer_id.channel_id == source_channel:
        await client.send_message(destination_channel, event.message)
        
client.start()
client.run_until_disconnected()
```

Чтобы бот пересылал сообщения из одного канала в другой и изменял их форматирование, вам нужно добавить функцию для обработки текста сообщения. Например, можно использовать регулярные выражения для удаления сносок:

```python
import re

def remove_citations(text):
    updated_text = re.sub(r'<sup>\d+</sup>', '', text)
    return updated_text

@client.on(events.NewMessage)
async def forward_message(event):
    source_channel = 'source_channel_username'
    destination_channel = 'destination_channel_username'
    
    if event.is_private and event.message.peer_id.channel_id == source_channel:
        updated_message = remove_citations(event.message.message)
        await client.send_message(destination_channel, updated_message)
```

Теперь бот будет пересылать сообщения из одного канала в другой, удаляя сноски и сохраняя указанную структуру текста.
@client.on(events.NewMessage(chats=source_channel))
async def forward_messages(event):
    if trigger_emoji in event.raw_text:
        message_words = event.raw_text.split()
        for word in message_words:
            if word in word_list:
                new_message = f'✅ [{word}]({event.message.buttons[0][0].url})'
                # Удалить сноски
                new_message = new_message.replace('@', '')
                await client.send_message(destination_channel, new_message)
                logging.info(f"Переслано сообщение: {new_message}")
                messages_logger.info(f"Переслано сообщение: {event.message.raw_text}")
                break
Похожие вопросы