Compare commits

...
7 Commits
Author SHA1 Message Date
YoursFunny 87f0d16028 fix regex https pattern 2024-07-16 14:28:49 +08:00
YoursFunny 197993e522 bump version 2024-07-16 14:27:15 +08:00
YoursFunny 02abcd899e update pixiv regex 2024-07-16 14:21:43 +08:00
YoursFunny ebb48d2bb5 fix forward channel check admin user 2024-07-09 16:27:13 +08:00
YoursFunny be77a33e9d use large instead of origin for pixiv 2024-06-24 20:02:35 +08:00
YoursFunny 0439adefa0 add refresh token if expire 2024-06-24 15:57:30 +08:00
YoursFunny 81e5d2dbd1 add log 2024-06-24 15:47:12 +08:00
5 changed files with 26 additions and 10 deletions
+7 -2
View File
@@ -17,7 +17,7 @@ from utils.pixiv import ProcessPixiv
from utils.telegram import Telegram
if TYPE_CHECKING:
from telegram import Chat, Message, Update
from telegram import Message, Update
from telegram.ext import Application, ContextTypes
logger = get_logger(__name__)
@@ -141,7 +141,7 @@ async def cmd_set_forward_channel(update: Update, context: ContextTypes.DEFAULT_
return
channel = context.args[0]
try:
channel: Chat = await context.bot.get_chat(channel)
channel = await context.bot.get_chat(channel)
except Exception as e:
await update.effective_message.reply_text(str(e))
return
@@ -153,6 +153,11 @@ async def cmd_set_forward_channel(update: Update, context: ContextTypes.DEFAULT_
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 = filter(lambda x: x.user.id == update.effective_user.id, channel_admin)
user = next(user, None)
if not user:
await update.effective_message.reply_text("You are not an admin of the channel.")
return
user_bot = filter(lambda x: x.user.id == context.bot.id, channel_admin)
user_bot = next(user_bot, None)
if user_bot.can_post_messages:
+1 -1
View File
@@ -1,4 +1,4 @@
python-telegram-bot[webhooks]~=21.3
python-telegram-bot[webhooks]~=21.4
httpx[http2]~=0.27
uvloop~=0.19.0; sys_platform != 'win32'
async-pixiv @ git+https://github.com/TheFunny/async-pixiv@main
+14 -3
View File
@@ -5,6 +5,7 @@ from typing import Generator, Literal, TYPE_CHECKING
from uuid import uuid4
from async_pixiv import PixivClient
from async_pixiv.error import ApiError
from telegram import InlineQueryResultPhoto, InputMediaPhoto
from utils.logger import get_logger
@@ -68,7 +69,7 @@ class Pixiv:
@property
def author_url(self) -> str:
return str(self._illust.user.link)
return str(self._illust.user.link).rstrip('/')
@property
def description(self) -> str:
@@ -118,11 +119,16 @@ class ProcessPixiv:
async def init_client(cls, token: str) -> None:
cls._client = PixivClient()
await cls._client.login_with_token(token)
cls._token = token
@classmethod
async def close_client(cls) -> None:
await cls._client.close()
@classmethod
async def refresh_token(cls):
await cls._client.login_with_token(cls._token)
def __init__(self, url: str):
self._url: str = url
@@ -135,7 +141,11 @@ class ProcessPixiv:
async def _fetch_illust(self) -> Illust:
illust_id = self._parse_illust_id()
return (await self._client.ILLUST.detail(illust_id)).illust
try:
return (await self._client.ILLUST.detail(illust_id)).illust
except ApiError:
await self.refresh_token()
return (await self._client.ILLUST.detail(illust_id)).illust # TODO use retry here
def _parse_illust_id(self) -> int:
return int(self._url.split("/")[-1])
@@ -192,9 +202,10 @@ class TelegramPixiv:
def message_media_generator(self) -> Generator[TypeMessageMediaResult, None, None]:
pixiv = self._pixiv
for media in pixiv.images:
logger.info(str(media))
if pixiv.type in ("illust", "manga"):
yield InputMediaPhoto(
media=media.url,
media=media.large,
has_spoiler=pixiv.is_nsfw
)
else:
+3 -3
View File
@@ -1,8 +1,8 @@
import re
x_url = re.compile(r"^(?:https?://)?(?:www\.|mobile\.)?(?:x|twitter|fixvx|vxtwitter)\.com/(.+)/status/(\d+)")
x_media_url = re.compile(r"^(?:https?://)(pbs|video)\.twimg\.com/(.*)")
x_tco_url = re.compile(r"(?:https?://)t\.co/.+$", re.M)
x_media_url = re.compile(r"^(?:https?://)?(pbs|video)\.twimg\.com/(.*)")
x_tco_url = re.compile(r"(?:https?://)?t\.co/.+$", re.M)
message_url = re.compile(r"\[.+]", re.S)
pixiv_url = re.compile(r"^(?:https?://)?(?:www\.)?pixiv\.net/(?:en/)?artworks/(\d+)")
pixiv_url = re.compile(r"^(?:https?://)?(?:www\.)?pixiv\.net/(?:en/)?(?:artworks/|i/)(\d+)")
+1 -1
View File
@@ -18,7 +18,7 @@ class Telegram:
async with TelegramPixiv(self._url) as pixiv:
return pixiv
else:
return None
return None # TODO add raise and catch
async def __aexit__(self, exc_type, exc_val, exc_tb):
pass