misskey2telegram/defs/search_user.py

80 lines
2.2 KiB
Python
Raw Normal View History

2023-07-20 14:21:37 +00:00
from datetime import datetime, timedelta
2022-12-25 09:40:41 +00:00
from typing import Optional
from mipac import UserDetailed
2023-07-03 14:39:52 +00:00
from mipac.errors import FailedToResolveRemoteUserError
2022-12-25 09:40:41 +00:00
from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup
2023-01-27 12:36:41 +00:00
from misskey_init import MisskeyBot
2022-12-25 09:40:41 +00:00
template = """<b>Misskey User Info</b>
Name: %s
Username: <a href="%s">@%s</a>
Bio: <code>%s</code>
Joined: <code>%s</code>
Updated: <code>%s</code>
📤 %s 粉丝 %s 关注 %s"""
def gen_text(user: UserDetailed):
def parse_time(time: str) -> str:
if not time:
return "Unknown"
time = datetime.strptime(time, "%Y-%m-%dT%H:%M:%S.%fZ") + timedelta(hours=8)
return time.strftime("%Y-%m-%d %H:%M:%S")
create_at = parse_time(user.created_at)
update_at = parse_time(user.updated_at)
return template % (
user.nickname,
2022-12-26 09:48:13 +00:00
user.api.action.get_profile_link(),
2022-12-25 09:40:41 +00:00
user.username,
user.description or "",
create_at,
update_at,
user.notes_count,
user.followers_count,
user.following_count,
)
def gen_button(user: UserDetailed):
first_line = [
2022-12-26 09:48:13 +00:00
InlineKeyboardButton(text="Link", url=user.api.action.get_profile_link()),
2022-12-25 09:40:41 +00:00
]
second_line = [
InlineKeyboardButton(
text="" if user.is_followed else "",
callback_data=f"follow:{user.id}",
),
]
return InlineKeyboardMarkup([first_line, second_line])
2023-07-03 14:39:52 +00:00
async def search_user(
misskey_bot: MisskeyBot, username: str, host: str = None
) -> Optional[UserDetailed]:
2022-12-25 09:40:41 +00:00
"""
2023-07-03 14:39:52 +00:00
搜索用户
2022-12-25 09:40:41 +00:00
"""
if host:
2023-07-03 14:39:52 +00:00
users = await misskey_bot.core.api.user.action.search_by_username_and_host(
username, host, limit=1
)
if not users:
try:
users = [
await misskey_bot.core.api.user.action.get(
username=username, host=host
)
]
except FailedToResolveRemoteUserError:
pass
2022-12-25 09:40:41 +00:00
else:
users = []
2023-07-03 14:22:02 +00:00
async for user in misskey_bot.core.api.user.action.search(username, limit=1):
2022-12-25 09:40:41 +00:00
users.append(user)
return users[0] if users else None