Spero che qualcuno qui possa aiutarmi con un problema che sto riscontrando nel mio progetto del bot su Telegram. Sto lavorando su un bot che dovrebbe inoltrare i messaggi inviati in un canale Telegram, dove il bot è stato aggiunto, su un server Discord tramite webhook.
Ho configurato correttamente il bot su Telegram e ottenuto con successo il webhook su Discord. Tuttavia, non riesco a far sì che i messaggi inviati nel canale Telegram vengano inoltrati correttamente al server Discord tramite il webhook. Stranamente, il bot riesce a rilevare i messaggi dalle chat private con il bot, ma non dal canale.
Ho verificato attentamente la documentazione di entrambe le piattaforme e seguito tutti i passaggi necessari, ma non sono riuscito a risolvere il problema.
Apprezzerei molto se qualcuno con esperienza in questo settore potesse darmi una mano o suggerirmi dove potrei aver commesso degli errori. Qualsiasi aiuto o consiglio sarebbe estremamente utile.
Grazie in anticipo per il vostro tempo e assistenza.
import os
import logging
import requests
from telegram import Update, Bot
from telegram.ext import Updater, CallbackContext, CommandHandler, MessageHandler, Filters
# Set up logging
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO)
logger = logging.getLogger(__name__)
# Set up Telegram bot and Discord webhook
TELEGRAM_BOT_TOKEN = ''
DISCORD_WEBHOOK_URL = ''
# Create Telegram bot updater and dispatcher
updater = Updater(token=TELEGRAM_BOT_TOKEN, use_context=True)
dispatcher = updater.dispatcher
# Define function to send messages to Discord webhook
def send_to_discord(message):
# Prepare the data to send
data = {
"content": message
}
# Send the POST request
response = requests.post(DISCORD_WEBHOOK_URL, json=data)
# Check if the request was successful
if response.status_code == 204:
logger.info("Message sent to Discord successfully")
else:
logger.error(f"Failed to send message to Discord: {response.status_code} {response.reason}")
# Define function to handle messages and forward them to Discord
def handle_message(update: Update, context: CallbackContext):
message = update.message
if message is not None:
message_text = message.text
logger.info(f"Received message from Telegram: {message_text}")
# Forward the message to Discord
send_to_discord(message_text)
else:
logger.warning("Received an update without a message")
# Add a message handler to the dispatcher
message_handler = MessageHandler(Filters.text & (~Filters.command), handle_message)
dispatcher.add_handler(message_handler)
# Define function to forward existing messages in the channel
def forward_existing_messages():
# Create a Telegram bot instance
bot = Bot(token=TELEGRAM_BOT_TOKEN)
# Retrieve the last update ID
updates = bot.get_updates()
last_update_id = updates[-1].update_id if updates else 0
# Retrieve the messages in the channel with an offset
updates = bot.get_updates(offset=last_update_id + 1)
# Loop through the messages and forward them to Discord
for update in updates:
message = update.message
message_text = message.text
logger.info(f"Forwarding existing message from Telegram: {message_text}")
# Forward the message to Discord
send_to_discord(message_text)
# Forward existing messages in the channel
forward_existing_messages()
# Start the bot
updater.start_polling()
updater.idle()