Completely disable !help and add second Telegram route

This commit is contained in:
esef committed 2026-06-23 18:47:21 +03:00
1 parent 21d9fd0ec6
commit 0db51f9336
2 files changed
+26 -24

No files matched your search

+6 -7
View File
@@ -13,14 +13,13 @@ load_dotenv('credentials.env')
intents = discord.Intents.default() intents = discord.Intents.default()
intents.message_content = True intents.message_content = True
bot = commands.Bot(command_prefix='!', intents=intents) bot = commands.Bot(command_prefix='!', intents=intents, help_command=None)
bot.remove_command('help')
forwarder = TelegramForwarder( forwarder = TelegramForwarder(token=os.getenv('TELEGRAM_BOT_TOKEN'))
token=os.getenv('TELEGRAM_BOT_TOKEN'), if os.getenv('TELEGRAM_GROUP_ID') and os.getenv('DISCORD_WEBHOOK_URL'):
group_id=int(os.getenv('TELEGRAM_GROUP_ID')), forwarder.add_route(int(os.getenv('TELEGRAM_GROUP_ID')), os.getenv('DISCORD_WEBHOOK_URL'))
webhook_url=os.getenv('DISCORD_WEBHOOK_URL'), if os.getenv('TELEGRAM_GROUP_ID_SHITPOST') and os.getenv('DISCORD_WEBHOOK_URL_SHITPOST'):
) forwarder.add_route(int(os.getenv('TELEGRAM_GROUP_ID_SHITPOST')), os.getenv('DISCORD_WEBHOOK_URL_SHITPOST'))
twitter = TwitterRSSForwarder( twitter = TwitterRSSForwarder(
rss_url=os.getenv('TWITTER_RSS_URL'), rss_url=os.getenv('TWITTER_RSS_URL'),
+20 -17
View File
@@ -5,12 +5,14 @@ import aiohttp
from telegram.ext import Application, MessageHandler, filters from telegram.ext import Application, MessageHandler, filters
class TelegramForwarder: class TelegramForwarder:
def __init__(self, token, group_id, webhook_url): def __init__(self, token):
self.token = token self.token = token
self.group_id = group_id self.routes = {}
self.webhook_url = webhook_url
self._app = None self._app = None
def add_route(self, group_id, webhook_url):
self.routes[group_id] = webhook_url
async def start(self): async def start(self):
self._app = Application.builder().token(self.token).build() self._app = Application.builder().token(self.token).build()
self._app.add_handler(MessageHandler(filters.ALL, self._on_message)) self._app.add_handler(MessageHandler(filters.ALL, self._on_message))
@@ -18,7 +20,7 @@ class TelegramForwarder:
await self._app.initialize() await self._app.initialize()
await self._app.start() await self._app.start()
await self._app.updater.start_polling(drop_pending_updates=True) await self._app.updater.start_polling(drop_pending_updates=True)
print(f'✅ telegram forwarder started — watching group {self.group_id}') print(f'✅ telegram forwarder started — watching {len(self.routes)} groups')
async def stop(self): async def stop(self):
if self._app: if self._app:
@@ -73,7 +75,7 @@ class TelegramForwarder:
filename = tg_file.file_path.split('/')[-1] if tg_file.file_path else 'file' filename = tg_file.file_path.split('/')[-1] if tg_file.file_path else 'file'
return buf.read(), filename return buf.read(), filename
async def _send_to_webhook(self, username, content='', file_data=None, filename=None): async def _send_to_webhook(self, webhook_url, username, content='', file_data=None, filename=None):
async with aiohttp.ClientSession() as session: async with aiohttp.ClientSession() as session:
data = aiohttp.FormData() data = aiohttp.FormData()
payload = {'username': username} payload = {'username': username}
@@ -84,12 +86,12 @@ class TelegramForwarder:
data.add_field('payload_json', json.dumps(payload), content_type='application/json') data.add_field('payload_json', json.dumps(payload), content_type='application/json')
data.add_field('file', file_data, filename=filename) data.add_field('file', file_data, filename=filename)
else: else:
async with session.post(self.webhook_url, json=payload) as resp: async with session.post(webhook_url, json=payload) as resp:
if resp.status not in (200, 204): if resp.status not in (200, 204):
print(f'webhook post failed: {resp.status} {await resp.text()}') print(f'webhook post failed: {resp.status} {await resp.text()}')
return return
async with session.post(self.webhook_url, data=data) as resp: async with session.post(webhook_url, data=data) as resp:
if resp.status not in (200, 204): if resp.status not in (200, 204):
print(f'webhook post failed: {resp.status} {await resp.text()}') print(f'webhook post failed: {resp.status} {await resp.text()}')
@@ -99,10 +101,11 @@ class TelegramForwarder:
if not message: if not message:
return return
# only process messages from the configured group chat_id = update.effective_chat.id if update.effective_chat else None
if update.effective_chat and update.effective_chat.id != self.group_id: if chat_id not in self.routes:
return return
webhook_url = self.routes[chat_id]
sender = self._sender_name(update) sender = self._sender_name(update)
prefix = self._forward_prefix(message) prefix = self._forward_prefix(message)
caption = message.caption or '' caption = message.caption or ''
@@ -112,39 +115,39 @@ class TelegramForwarder:
photo = message.photo[-1] photo = message.photo[-1]
file_data, filename = await self._download_file(photo.file_id) file_data, filename = await self._download_file(photo.file_id)
text = f'{prefix}{caption}'.strip() text = f'{prefix}{caption}'.strip()
await self._send_to_webhook(sender, text, file_data, filename) await self._send_to_webhook(webhook_url, sender, text, file_data, filename)
elif message.video: elif message.video:
file_data, filename = await self._download_file(message.video.file_id) file_data, filename = await self._download_file(message.video.file_id)
text = f'{prefix}{caption}'.strip() text = f'{prefix}{caption}'.strip()
await self._send_to_webhook(sender, text, file_data, filename) await self._send_to_webhook(webhook_url, sender, text, file_data, filename)
elif message.document: elif message.document:
file_data, filename = await self._download_file(message.document.file_id) file_data, filename = await self._download_file(message.document.file_id)
text = f'{prefix}{caption}'.strip() text = f'{prefix}{caption}'.strip()
await self._send_to_webhook(sender, text, file_data, filename) await self._send_to_webhook(webhook_url, sender, text, file_data, filename)
elif message.animation: elif message.animation:
file_data, filename = await self._download_file(message.animation.file_id) file_data, filename = await self._download_file(message.animation.file_id)
text = f'{prefix}{caption}'.strip() text = f'{prefix}{caption}'.strip()
await self._send_to_webhook(sender, text, file_data, filename) await self._send_to_webhook(webhook_url, sender, text, file_data, filename)
elif message.sticker: elif message.sticker:
sticker_text = message.sticker.emoji or '(sticker)' sticker_text = message.sticker.emoji or '(sticker)'
text = f'{prefix}{sticker_text}' text = f'{prefix}{sticker_text}'
try: try:
file_data, filename = await self._download_file(message.sticker.file_id) file_data, filename = await self._download_file(message.sticker.file_id)
await self._send_to_webhook(sender, text, file_data, filename) await self._send_to_webhook(webhook_url, sender, text, file_data, filename)
except Exception: except Exception:
await self._send_to_webhook(sender, text) await self._send_to_webhook(webhook_url, sender, text)
elif message.text: elif message.text:
text = f'{prefix}{message.text}' text = f'{prefix}{message.text}'
await self._send_to_webhook(sender, text) await self._send_to_webhook(webhook_url, sender, text)
else: else:
text = f'{prefix}*(unsupported message type)*' text = f'{prefix}*(unsupported message type)*'
await self._send_to_webhook(sender, text) await self._send_to_webhook(webhook_url, sender, text)
except Exception as e: except Exception as e:
print(f'failed to forward message from {sender}: {e}') print(f'failed to forward message from {sender}: {e}')