Compare commits

..
4 Commits
Author SHA1 Message Date
YoursFunny 4083b09093 add gif support 2024-03-23 14:54:22 +08:00
YoursFunny 8fb53e8412 fix session 2024-03-23 00:17:59 +08:00
YoursFunny 5c0ee8b491 fix data 2024-03-22 23:06:21 +08:00
YoursFunny af561ed0a0 fix pers_data 2024-03-22 23:03:04 +08:00
5 changed files with 33 additions and 15 deletions
+1 -1
View File
@@ -27,5 +27,5 @@
.python-version
LICENSE
README.md
pers_data
data/
cert/
+1 -1
View File
@@ -1,6 +1,6 @@
**/.idea
__pycache__/
cert/
pers_data
data/
docker-compose.yml
x.py
+1 -1
View File
@@ -16,6 +16,6 @@ services:
WEBHOOK_SECRET_TOKEN: 'secret-token'
# LOG_LEVEL: 'WARNING'
volumes:
- ./pers_data: /app/pers_data
- ./data: /app/data
# - ./cert:/app/cert
container_name: tgxmb
+5 -5
View File
@@ -22,7 +22,7 @@ async def inline_query(update: Update, context: ContextTypes.DEFAULT_TYPE) -> No
if query == "":
return
common.logger.info(f"Query: {query}")
async with TGTweet(context.bot_data['client'], query) as tweet:
async with TGTweet(query) as tweet:
result = list(tweet.inline_query_generator)
await update.inline_query.answer(result)
@@ -32,7 +32,7 @@ async def reply_media(update: Update, context: ContextTypes.DEFAULT_TYPE) -> Non
# url = update.message.text.split(" ")[0]
url = update.message.text
common.logger.info(f"Receiving url: {url}")
async with TGTweet(context.bot_data['client'], url) as tweet:
async with TGTweet(url) as tweet:
media = list(tweet.pm_media_generator)
message_sent = await update.effective_message.reply_media_group(
media,
@@ -92,7 +92,7 @@ async def post_init(application: Application) -> None:
DESCRIPTION = "A bot to fetch tweets from Twitter."
await application.bot.set_my_description(DESCRIPTION)
await application.bot.set_my_short_description(DESCRIPTION)
application.bot_data['client'] = ClientSession()
TGTweet.set_session(ClientSession())
async def post_stop(application: Application) -> None:
@@ -100,12 +100,12 @@ async def post_stop(application: Application) -> None:
async def post_shutdown(application: Application) -> None:
await application.bot_data['client'].close()
await TGTweet.close_session()
def main():
defaults = Defaults(parse_mode=ParseMode.HTML, allow_sending_without_reply=True)
persistence = PicklePersistence(filepath='pers_data')
persistence = PicklePersistence(filepath='data/pers.pkl')
application = (ApplicationBuilder()
.token(common.BOT_TOKEN)
.defaults(defaults)
+25 -7
View File
@@ -5,7 +5,7 @@ from telegram import (
InlineQueryResultPhoto,
InlineQueryResultVideo,
InputMediaPhoto,
InputMediaVideo
InputMediaVideo, InputMediaAnimation, InlineQueryResultMpeg4Gif
)
from common import x_url_regex, x_media_regex, x_tco_regex, logger
@@ -109,8 +109,9 @@ class Tweet:
class TGTweet(Tweet):
def __init__(self, session: ClientSession, url: str):
self._session: ClientSession = session
_session: ClientSession
def __init__(self, url: str):
self._url: str = url
self._api_param: tuple[str] = self._tweet_id
assert self._api_param
@@ -123,6 +124,14 @@ class TGTweet(Tweet):
async def __aexit__(self, exc_type, exc_val, exc_tb):
pass
@classmethod
def set_session(cls, session: ClientSession) -> None:
cls._session = session
@classmethod
async def close_session(cls) -> None:
await cls._session.close()
async def _fetch_tweet(self, api_param: tuple[str]) -> dict:
return await fetch_json(self._session, vx_api_url.format(*api_param))
@@ -177,8 +186,6 @@ class TGTweet(Tweet):
id=str(i),
photo_url=tweet_media.url,
thumbnail_url=tweet_media.thumb,
title=self.url,
description=self.text,
caption=self.message_text if not i else None
)
elif tweet_media.type == "video":
@@ -187,8 +194,13 @@ class TGTweet(Tweet):
video_url=tweet_media.url,
mime_type="video/mp4",
thumbnail_url=tweet_media.thumb,
title=self.url,
description=self.text,
caption=self.message_text if not i else None
)
elif tweet_media.type == "gif":
yield InlineQueryResultMpeg4Gif(
id=str(i),
mpeg4_url=tweet_media.url,
thumbnail_url=tweet_media.thumb,
caption=self.message_text if not i else None
)
@@ -207,3 +219,9 @@ class TGTweet(Tweet):
has_spoiler=self.sensitive,
thumbnail=tweet_media.thumb
)
elif tweet_media.type == "gif":
yield InputMediaAnimation(
media=tweet_media.url,
has_spoiler=self.sensitive,
thumbnail=tweet_media.thumb
)