Compare commits

...
9 Commits
Author SHA1 Message Date
YoursFunny 18f1f00259 fix docker compose file 2024-03-22 19:46:30 +08:00
YoursFunny 04da6eb3d9 fix reply message 2024-03-22 19:45:26 +08:00
YoursFunny 7a35b06d4e fix channel check 2024-03-22 19:04:30 +08:00
YoursFunny a5ae2321c5 fix regex pattern 2024-03-22 19:02:38 +08:00
YoursFunny d263071946 add assert message 2024-03-22 18:57:59 +08:00
YoursFunny 0491d8c3fc fix pers_data 2024-03-22 18:55:48 +08:00
YoursFunny 3afea136a4 update docker.yml 2024-03-22 18:41:09 +08:00
YoursFunny 87108b2ac8 fix await 2024-03-22 18:41:07 +08:00
YoursFunny 4613e4c825 remove version in compose 2024-03-22 17:56:59 +08:00
5 changed files with 16 additions and 16 deletions
+2
View File
@@ -4,6 +4,8 @@ on:
push: push:
tags: tags:
- v* - v*
branches:
- master
env: env:
APP_NAME: telegram-twitter-media-bot APP_NAME: telegram-twitter-media-bot
+1 -1
View File
@@ -14,7 +14,7 @@ if WEBHOOK:
WEBHOOK_CERT = os.getenv("WEBHOOK_CERT", "cert/cert.pem") WEBHOOK_CERT = os.getenv("WEBHOOK_CERT", "cert/cert.pem")
WEBHOOK_SECRET_TOKEN = os.getenv("WEBHOOK_SECRET_TOKEN") WEBHOOK_SECRET_TOKEN = os.getenv("WEBHOOK_SECRET_TOKEN")
x_url_regex = re.compile(r"^(?:https?://)(?:www\.|mobile\.|)(x|twitter)\.com/.+/status/(\d+)") x_url_regex = re.compile(r"^(?:https?://)(?:www\.|mobile\.|)(?:x|twitter)\.com/.+/status/(\d+)")
x_media_regex = re.compile(r"^(?:https?://)(pbs|video)\.twimg\.com/(.*)") x_media_regex = re.compile(r"^(?:https?://)(pbs|video)\.twimg\.com/(.*)")
x_tco_regex = re.compile(r"(?:https?://)t\.co/.+$", re.M) x_tco_regex = re.compile(r"(?:https?://)t\.co/.+$", re.M)
+2 -2
View File
@@ -1,4 +1,3 @@
version: '3.7'
services: services:
tgxmb: image: yoursfunny/telegram-twitter-media-bot: latest tgxmb: image: yoursfunny/telegram-twitter-media-bot: latest
restart: always restart: always
@@ -16,6 +15,7 @@ services:
WEBHOOK_CERT: './cert/cert.pem' WEBHOOK_CERT: './cert/cert.pem'
WEBHOOK_SECRET_TOKEN: 'secret-token' WEBHOOK_SECRET_TOKEN: 'secret-token'
# LOG_LEVEL: 'WARNING' # LOG_LEVEL: 'WARNING'
# volumes: volumes:
- ./pers_data: /app/pers_data
# - ./cert:/app/cert # - ./cert:/app/cert
container_name: tgxmb container_name: tgxmb
+9 -12
View File
@@ -1,6 +1,6 @@
from aiohttp import ClientSession from aiohttp import ClientSession
from telegram import Update, Chat from telegram import Update, Chat
from telegram.constants import ParseMode, ChatAction from telegram.constants import ParseMode, ChatAction, ChatType
from telegram.ext import ( from telegram.ext import (
Application, Application,
ApplicationBuilder, ApplicationBuilder,
@@ -33,7 +33,7 @@ async def reply_media(update: Update, context: ContextTypes.DEFAULT_TYPE) -> Non
media = list(tweet.pm_media_generator) media = list(tweet.pm_media_generator)
message_sent = await update.effective_message.reply_media_group( message_sent = await update.effective_message.reply_media_group(
media, caption=tweet.message_text, media, caption=tweet.message_text,
# reply_to_message_id=update.message.message_id reply_to_message_id=update.message.message_id
) )
if 'forward_channel_id' in context.user_data: if 'forward_channel_id' in context.user_data:
try: try:
@@ -52,19 +52,20 @@ async def cmd_set_forward_channel(update: Update, context: ContextTypes.DEFAULT_
return return
channel = context.args[0] channel = context.args[0]
try: try:
channel: Chat = context.bot.get_chat(channel) channel: Chat = await context.bot.get_chat(channel)
except Exception as e: except Exception as e:
await update.effective_message.reply_text(str(e)) await update.effective_message.reply_text(str(e))
return return
if channel.type != "CHANNEL": if channel.type != ChatType.CHANNEL:
await update.effective_message.reply_text("That is not a channel.") await update.effective_message.reply_text("That is not a channel.")
return return
channel_admin = await channel.get_administrators() try:
channel_admin = await channel.get_administrators()
except Exception as e:
await update.effective_message.reply_text(str(e) + "\nPlease add the bot to the channel and set as admin")
return
user_bot = filter(lambda x: x.user.id == context.bot.id, channel_admin) user_bot = filter(lambda x: x.user.id == context.bot.id, channel_admin)
user_bot = next(user_bot, None) user_bot = next(user_bot, None)
if not user_bot:
await update.effective_message.reply_text("I am not an admin in that channel.")
return
if user_bot.can_post_messages: if user_bot.can_post_messages:
context.user_data['forward_channel_id'] = channel.id context.user_data['forward_channel_id'] = channel.id
await update.effective_message.reply_text("Add successfully.") await update.effective_message.reply_text("Add successfully.")
@@ -101,7 +102,6 @@ async def post_shutdown(application: Application) -> None:
def main(): def main():
defaults = Defaults(parse_mode=ParseMode.HTML, allow_sending_without_reply=True) defaults = Defaults(parse_mode=ParseMode.HTML, allow_sending_without_reply=True)
persistence = PicklePersistence(filepath='pers_data') persistence = PicklePersistence(filepath='pers_data')
# proxy_url = 'http://127.0.0.1:10809'
application = (ApplicationBuilder() application = (ApplicationBuilder()
.token(common.BOT_TOKEN) .token(common.BOT_TOKEN)
.defaults(defaults) .defaults(defaults)
@@ -109,8 +109,6 @@ def main():
.post_init(post_init) .post_init(post_init)
.post_stop(post_stop) .post_stop(post_stop)
.post_shutdown(post_shutdown) .post_shutdown(post_shutdown)
# .proxy(proxy_url)
# .get_updates_proxy(proxy_url)
.build() .build()
) )
@@ -119,7 +117,6 @@ def main():
handlers = [ handlers = [
MessageHandler(filters.Regex(common.x_url_regex) & filters.ChatType.PRIVATE, reply_media), MessageHandler(filters.Regex(common.x_url_regex) & filters.ChatType.PRIVATE, reply_media),
# MessageHandler(None, reply_media),
InlineQueryHandler(inline_query, common.x_url_regex), InlineQueryHandler(inline_query, common.x_url_regex),
CommandHandler("set_forward_channel", cmd_set_forward_channel), CommandHandler("set_forward_channel", cmd_set_forward_channel),
CommandHandler("remove_forward_channel", cmd_remove_forward_channel), CommandHandler("remove_forward_channel", cmd_remove_forward_channel),
+2 -1
View File
@@ -7,6 +7,7 @@ from telegram import (
InputMediaPhoto, InputMediaPhoto,
InputMediaVideo InputMediaVideo
) )
from common import x_url_regex, x_media_regex, x_tco_regex from common import x_url_regex, x_media_regex, x_tco_regex
twimg_url = 'https://pbs.twimg.com/' twimg_url = 'https://pbs.twimg.com/'
@@ -19,7 +20,7 @@ message_raw_text = """{url}
async def fetch_json(session: ClientSession, url: str) -> dict: async def fetch_json(session: ClientSession, url: str) -> dict:
async with session.get(url) as response: async with session.get(url) as response:
assert response.status == 200 assert response.status == 200, f"Failed to fetch {url}, status code {response.status}"
return await response.json() return await response.json()