mirror of
https://github.com/TheFunny/TelegramTwitterMediaBot.git
synced 2026-09-23 23:32:05 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5c0ee8b491
|
||
|
|
af561ed0a0
|
||
|
|
985fe3fbfe
|
||
|
|
19fb5b9822
|
||
|
|
1185d4bc5f
|
||
|
|
c3faecf640
|
||
|
|
76e0ffe58c
|
+1
-1
@@ -27,5 +27,5 @@
|
||||
.python-version
|
||||
LICENSE
|
||||
README.md
|
||||
pers_data
|
||||
data/
|
||||
cert/
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
**/.idea
|
||||
__pycache__/
|
||||
cert/
|
||||
pers_data
|
||||
data/
|
||||
docker-compose.yml
|
||||
x.py
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -21,6 +21,7 @@ async def inline_query(update: Update, context: ContextTypes.DEFAULT_TYPE) -> No
|
||||
query = update.inline_query.query
|
||||
if query == "":
|
||||
return
|
||||
common.logger.info(f"Query: {query}")
|
||||
async with TGTweet(context.bot_data['client'], query) as tweet:
|
||||
result = list(tweet.inline_query_generator)
|
||||
await update.inline_query.answer(result)
|
||||
@@ -30,6 +31,7 @@ async def reply_media(update: Update, context: ContextTypes.DEFAULT_TYPE) -> Non
|
||||
await update.effective_chat.send_action(ChatAction.UPLOAD_PHOTO)
|
||||
# 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:
|
||||
media = list(tweet.pm_media_generator)
|
||||
message_sent = await update.effective_message.reply_media_group(
|
||||
@@ -103,7 +105,7 @@ async def post_shutdown(application: Application) -> None:
|
||||
|
||||
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)
|
||||
|
||||
@@ -8,10 +8,10 @@ from telegram import (
|
||||
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, logger
|
||||
|
||||
twimg_url = 'https://pbs.twimg.com/'
|
||||
vx_api_url = 'https://api.vxtwitter.com/status/{0}/status/{1}'
|
||||
vx_api_url = 'https://api.vxtwitter.com/{0}/status/{1}'
|
||||
|
||||
message_raw_text = """{url}
|
||||
<a href="{author_url}">{author}</a>: {text}
|
||||
@@ -19,6 +19,7 @@ message_raw_text = """{url}
|
||||
|
||||
|
||||
async def fetch_json(session: ClientSession, url: str) -> dict:
|
||||
logger.info(f"Fetching {url}")
|
||||
async with session.get(url) as response:
|
||||
assert response.status == 200, f"Failed to fetch {url}, status code {response.status}"
|
||||
return await response.json()
|
||||
@@ -30,18 +31,21 @@ class TweetMedia:
|
||||
self._thumb: str = thumb
|
||||
self._type: str = media_type
|
||||
|
||||
def __str__(self):
|
||||
return f"Media[url: {self.url} thumb: {self.thumb} type: {self.type}]"
|
||||
|
||||
@property
|
||||
def _uri(self) -> str | None:
|
||||
match = x_media_regex.match(self._url)
|
||||
if match:
|
||||
return match.group(2).removesuffix('.jpg')
|
||||
return match.group(2).removesuffix('.jpg').removesuffix('.png')
|
||||
return None
|
||||
|
||||
@property
|
||||
def url(self) -> str:
|
||||
match self._type:
|
||||
case "image":
|
||||
return f"{twimg_url}{self._uri}?format=jpg&name=orig"
|
||||
return f"{twimg_url}{self._uri}?format=jpg&name=4096x4096"
|
||||
case "video":
|
||||
return self._url
|
||||
|
||||
@@ -167,6 +171,7 @@ class TGTweet(Tweet):
|
||||
@property
|
||||
def inline_query_generator(self) -> Generator[InlineQueryResultPhoto | InlineQueryResultVideo, None, None]:
|
||||
for i, tweet_media in enumerate(self.media):
|
||||
logger.info(str(tweet_media))
|
||||
if tweet_media.type == "image":
|
||||
yield InlineQueryResultPhoto(
|
||||
id=str(i),
|
||||
@@ -190,6 +195,7 @@ class TGTweet(Tweet):
|
||||
@property
|
||||
def pm_media_generator(self) -> Generator[InputMediaPhoto | InputMediaVideo, None, None]:
|
||||
for tweet_media in self.media:
|
||||
logger.info(str(tweet_media))
|
||||
if tweet_media.type == "image":
|
||||
yield InputMediaPhoto(
|
||||
media=tweet_media.url,
|
||||
|
||||
Reference in New Issue
Block a user