Найти - Пользователи
Полная версия: Не работает мост между Discord и Telegram
Начало » Python для экспертов » Не работает мост между Discord и Telegram
1 2
Dober_Show
Проблема заключается в том что программа втыкается на месте подключения к Discord боту. При этом ошибок никаких не выдаёт. На всякий скажу что похожий код используя те же библиотеки работает.

 import asyncio
from telethon import TelegramClient, events, errors as telethon_errors
import discord
from discord import Intents
import traceback
 
# Замените на ваши данные
TELEGRAM_API_ID = TELEGRAM_API_ID
TELEGRAM_API_HASH = "TELEGRAM_API_HASH"
DISCORD_TOKEN = "DISCORD_TOKEN_BOT" 
 
# ID каналов Discord
DISCORD_CHANNEL_ALFA_ID = CHANNEL_ALFA
DISCORD_CHANNEL_BETA_ID = CHANNEL_BETA
 
async def main():
    try:
        async with TelegramClient('my_telegram_session', TELEGRAM_API_ID, TELEGRAM_API_HASH) as telegram_client:
            intents = Intents.default()
            intents.message_content = True # Важно!  Разрешает чтение содержимого сообщений
 
            async with discord.Client(intents=intents) as discord_client:
                try:
                    await discord_client.wait_until_ready()
                    print(f'Logged in as {discord_client.user}')
                except asyncio.CancelledError:
                    print("Discord connection cancelled.")
                    return
 
                @telegram_client.on(events.NewMessage(pattern=r'#alfa\s+.*'))
                async def handler_alfa(event):
                    try:
                        message = event.raw_text[5:]
                        alfa_channel = discord_client.get_channel(DISCORD_CHANNEL_ALFA_ID)
                        if alfa_channel:
                            await alfa_channel.send(message)
                    except Exception as e:
                        print(f"Ошибка при отправке сообщения в Alfa канал: {e}")
                        traceback.print_exc()
 
                @telegram_client.on(events.NewMessage(pattern=r'#beta\s+.*'))
                async def handler_beta(event):
                    try:
                        message = event.raw_text[5:]
                        beta_channel = discord_client.get_channel(DISCORD_CHANNEL_BETA_ID)
                        if beta_channel:
                            await beta_channel.send(message)
                    except Exception as e:
                        print(f"Ошибка при отправке сообщения в Beta канал: {e}")
                        traceback.print_exc()
 
 
                print("Telegram bot started.  Waiting for messages...")
                await telegram_client.run_until_disconnected()
 
    except telethon_errors.SessionPasswordNeededError:
        print("Two-factor authentication required. Enter the code from Telegram.")
    except telethon_errors.rpcerrorlist.RpcError as e:
        print(f"Telegram API error: {e}")
        traceback.print_exc()
    except discord.errors.LoginFailure as e:
        print(f"Discord login failed: {e}")
        traceback.print_exc()
    except discord.errors.HTTPException as e:
        print(f"Discord HTTP error: {e}")
        traceback.print_exc()
    except Exception as e:
        print(f"An unexpected error occurred: {e}")
        traceback.print_exc()
 
if __name__ == "__main__":
    asyncio.run(main())
py.user.next
Сделай отдельный скрипт. В нём напиши подключение к Discord'у. Убедись, что подключение происходит и ответ из Discord'а приходит.
Если не получается асинхронный скрипт написать, который бы работал, то напиши синхронный скрипт.

Dober_Show
На всякий скажу что похожий код используя те же библиотеки работает.
Конкретизируй, какой код работает.
Dober_Show
py.user.next
Сделай отдельный скрипт. В нём напиши подключение к Discord. Убедись, что подключение происходит и ответ от Discord приходит. Если не получается написать асинхронный скрипт, который бы работал, то напиши синхронный скрипт.
Я написал код взяв в пример код с GitHub. И хотел написать похожий с возможностью отправлять сообщения из Telegram по “#”. Например “#alfa Привет” должно отправиться в чат с id привязанным к этому #.
Вот ссылка на проект с которого я брал пример:
https://github.com/the-overclock-bakery/tob-telegramtodiscord
py.user.next
То есть ты его не запускал. Так что сделай скрипт подключения к Discord-боту и отправки в него сообщения. Если у тебя простейший скрипт не подключится к Discord'у, то более сложный тем более не подключится.
Rodegast
Специально для тех кто не смотрит телевизор
https://www.rbc.ru/technology_and_media/08/10/2024/67054cbf9a79474670135b84
Dober_Show
Rodegast
Специально для тех кто не смотрит телевизор https://www.rbc.ru/technology_and_media/08/10/2024/67054cbf9a79474670135b84
Скажу тебе так, Discord далеко не у всех заблокирован) И у меня в том числе)
Dober_Show
py.user.next
То есть ты его не запускал. Так что сделай скрипт подключения к Discord-боту и отправки в него сообщения. Если у тебя простейший скрипт не подключится к Discord'у, то более сложный тем более не подключится.
Я как раз запускал его, а вот отдельно лично мой скрипт у меня не получается. Возможно я чего то не указал в коде. Чужие скрипты работают.
py.user.next
Dober_Show
Возможно я чего то не указал в коде.
Добавь вывод сообщений в консоль на каждом шаге.

Например, вошёл к контекст - добавь сообщение “вошёл в контекст”, вошёл в обработчик - добавь сообщение “вошёл в обработчик”. И так для каждого этапа.
Dober_Show
py.user.next
Добавь вывод сообщений в консоль на каждом шаге.
Почитайте код, там все возможные ошибки прописаны.
Да и проблема была обнаружена. В логике подключения к Дискорд боту тупо отсутствует токен для подключения + ещё не прописана логика отправки сообщений. Если бы вы читали код наверняка увидели это так как полагаю у вас опыта в программировании гораздо больше чем у меня.
py.user.next
Dober_Show
В логике подключения к Дискорд боту тупо отсутствует токен для подключения
Ну да, именно это ты бы и обнаружил, если бы сделал вот это.

Dober_Show
Почитайте код, там все возможные ошибки прописаны
Я говорю про пустой экран, который ты наблюдаешь, хоть все ошибки и прописаны. Нужно, чтобы там был не пустой экран, а отладочные информативные сообщения.

Dober_Show
как полагаю у вас опыта в программировании гораздо больше чем у меня
Ну если ты отлаживать код не умеешь, то, конечно, это видно. Почему я и взялся отлаживать твой код вместо тебя, сам ведь ты бы не догадался.

Так что print() должен стоять на входах всех. Тогда на экране будет видно, докуда доходит программа, а докуда не доходит. И значения в переменных тоже заодно можно будет посмотреть.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB