Как исправить пересылку сообщений без имени в тг бот?
Сообщения пересылаются без имени отправителя. Либо None, либо нет имени пользователя. Хотелось бы чтобы бы ссылка ника была кликабельна.Как исправить?
from telethon import TelegramClient, events from telegram import Bot api_id = 00000000 api_hash = "000000000000000000000..." phone = "+70000000000" bot_token = "00000000000000000..." # Вставьте сюда токен вашего бота # Создаем клиент Telegram client = TelegramClient('session_name', api_id, api_hash) bot = Bot(token=bot_token) async def monitor_messages(): # Определяем ключевые слова, по которым будем фильтровать сообщения ключевые_слова = ['авито'] # Задаем список названий каналов для мониторинга целевые_каналы = ['КЛИЕНТЫ || РАБОТА ОНЛАЙН'] @client.on(events.NewMessage) async def handler(event): try: if event.is_channel and event.chat: if event.chat.title in целевые_каналы: for ключ in ключевые_слова: if ключ.lower() in event.raw_text.lower(): имя_отправителя = event.sender.username if event.sender else "Нет имени пользователя" сообщение = f'Новое сообщение в канале {event.chat.title}:n' сообщение += f'{имя_отправителя} написал(а): {event.raw_text}' # Отправляем сообщение в чат-бот await bot.send_message(chat_id=2072351966, text=сообщение) # Замените YOUR_CHAT_ID на ID вашего чата except Exception as e: if "AuthKeyUnregisteredError" not in str(e): print(e) print("Старт мониторинга сообщений...") await client.run_until_disconnected() async def main(): # Запускаем мониторинг сообщений в фоновом режиме await monitor_messages() # Запускаем клиент Telegram и основную программу with client: client.loop.run_until_complete(main()) |
from telethon import TelegramClient, events from telegram import Bot api_id = 00000000 api_hash = "000000000000000000000..." phone = "+70000000000" bot_token = "00000000000000000..." # Вставьте сюда токен вашего бота # Создаем клиент Telegram client = TelegramClient('session_name', api_id, api_hash) bot = Bot(token=bot_token) async def monitor_messages(): # Определяем ключевые слова, по которым будем фильтровать сообщения ключевые_слова = ['авито'] # Задаем список названий каналов для мониторинга целевые_каналы = ['КЛИЕНТЫ || РАБОТА ОНЛАЙН'] @client.on(events.NewMessage) async def handler(event): try: if event.is_channel and event.chat: if event.chat.title in целевые_каналы: for ключ in ключевые_слова: if ключ.lower() in event.raw_text.lower(): имя_отправителя = event.sender.username if event.sender else "Нет имени пользователя" сообщение = f'Новое сообщение в канале {event.chat.title}:n' сообщение += f'{имя_отправителя} написал(а): {event.raw_text}' # Отправляем сообщение в чат-бот await bot.send_message(chat_id=2072351966, text=сообщение) # Замените YOUR_CHAT_ID на ID вашего чата except Exception as e: if "AuthKeyUnregisteredError" not in str(e): print(e) print("Старт мониторинга сообщений...") await client.run_until_disconnected() async def main(): # Запускаем мониторинг сообщений в фоновом режиме await monitor_messages() # Запускаем клиент Telegram и основную программу with client: client.loop.run_until_complete(main())
Дополнительно:
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для исправления проблемы пересылки сообщений без имени в Telegram боте, вам необходимо добавить проверку на наличие имени пользователя в сообщении перед его отправкой.
Пример кода на PHP:
// Получаем данные о сообщении $update = json_decode(file_get_contents("php://input"), true); $message = $update['message']; // Проверяем, есть ли имя пользователя в сообщении if(isset($message['from']['username'])) { $username = $message['from']['username']; } else { $username = 'Аноним'; } // Отправляем сообщение с именем пользователя sendMessage($username, $message['text']); function sendMessage($username, $text) { // Отправка сообщения в Telegram // Здесь должен быть ваш код отправки сообщения }
В данном примере мы проверяем, есть ли у пользователя имя пользователя (username) в сообщении. Если оно есть, то мы используем его для отправки сообщения. Если его нет, то мы присваиваем имя "Аноним".
Не забудьте заменить функцию sendMessage() на вашу собственную функцию отправки сообщений в Telegram боте.
Таким образом, добавив данную проверку перед отправкой сообщения, вы сможете исправить проблему пересылки сообщений без имени в Telegram боте.