From 1d4c269bdaefe83d51200a6ef89b482497b61137 Mon Sep 17 00:00:00 2001 From: xtaodada Date: Fri, 23 Jun 2023 23:37:55 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20=E6=94=AF=E6=8C=81=20Inline=20Query?= =?UTF-8?q?=20MiYouShe=20Splash?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- defs/splash.py | 16 ++++++++++++++++ init.py | 10 +++------- main.py | 22 ++++++++++++++-------- modules/anti_channel.py | 10 +++++----- modules/ask.py | 3 ++- modules/banme.py | 8 ++++---- modules/bilibili.py | 5 +++-- modules/book_of_answers.py | 3 ++- modules/dc.py | 4 ++-- modules/exchange.py | 6 +++--- modules/fanbox.py | 3 ++- modules/fragment.py | 21 +++++++-------------- modules/friend_say.py | 3 ++- modules/geo.py | 8 +++----- modules/guess.py | 6 +++--- modules/ip.py | 4 ++-- modules/lofter.py | 3 ++- modules/luxun.py | 3 ++- modules/post.py | 3 ++- modules/repeater.py | 4 +++- modules/splash.py | 30 ++++++++++++++++++++++++++---- modules/start.py | 27 +++++++++++++++++++++++++-- 22 files changed, 133 insertions(+), 69 deletions(-) diff --git a/defs/splash.py b/defs/splash.py index c3be63f..a635497 100644 --- a/defs/splash.py +++ b/defs/splash.py @@ -4,6 +4,7 @@ from typing import List from pyrogram.enums import ParseMode from pyrogram.errors import FloodWait +from pyrogram.types import InlineQueryResultCachedPhoto from defs.glover import splash_channel from init import bot, request, logger @@ -113,3 +114,18 @@ async def update_splash(): continue await SplashService.add_splash(model) logger.info("Splash updated.") + + +async def get_inline_results() -> List[InlineQueryResultCachedPhoto]: + splash = await SplashService.get_all_splashes() + splash.sort(key=lambda x: x.offline_ts, reverse=True) + splash = splash[:50] + results = [] + for idx, i in enumerate(splash): + results.append( + InlineQueryResultCachedPhoto( + title=f"Splash No.{idx + 1}", + photo_file_id=i.file_id, + ) + ) + return results diff --git a/init.py b/init.py index 1273a37..72a4db7 100644 --- a/init.py +++ b/init.py @@ -21,6 +21,9 @@ logging_handler.setFormatter(ColoredFormatter(logging_format)) root_logger = getLogger() root_logger.setLevel(ERROR) root_logger.addHandler(logging_handler) +# pyro_logger = getLogger() +# pyro_logger.setLevel(INFO) +# pyro_logger.addHandler(logging_handler) basicConfig(level=INFO) logs.setLevel(INFO) logger = logging.getLogger("iShotaBot") @@ -29,13 +32,6 @@ if not scheduler.running: scheduler.start() # Init client - -class UserMe: - username = "iShotaBot" - id = 2144128213 - - -user_me = UserMe() sqlite = Sqlite() bot = pyrogram.Client( "bot", api_id=api_id, api_hash=api_hash, ipv6=ipv6, plugins=dict(root="modules") diff --git a/main.py b/main.py index 916e2b7..e3b9155 100644 --- a/main.py +++ b/main.py @@ -1,13 +1,19 @@ +import asyncio + from pyrogram import idle -from init import logs, user_me, bot, sqlite +from init import logs, bot, sqlite + + +async def main(): + logs.info("连接服务器中。。。") + await bot.start() + bot.loop.create_task(sqlite.create_db_and_tables()) + logs.info(f"@{bot.me.username} 运行成功!") + await idle() + await bot.stop() + sqlite.stop() if __name__ == "__main__": - logs.info(f"@{user_me.username} 连接服务器中。。。") - bot.start() - bot.loop.create_task(sqlite.create_db_and_tables()) - logs.info(f"@{user_me.username} 运行成功!") - idle() - bot.stop() - sqlite.stop() + asyncio.get_event_loop().run_until_complete(main()) diff --git a/modules/anti_channel.py b/modules/anti_channel.py index 4b9c2f3..7654c06 100644 --- a/modules/anti_channel.py +++ b/modules/anti_channel.py @@ -8,12 +8,12 @@ from pyrogram.raw.base import Update from asyncio import sleep from defs.anti_channel import init, add, get_status, check_status, clean -from init import logs, user_me +from init import logs, bot init() -@Client.on_raw_update(filters.incoming & filters.group) +@bot.on_raw_update(filters.incoming & filters.group) async def anti_channel_msg(client: Client, update: Update, _, __: dict): while True: try: @@ -77,10 +77,10 @@ async def anti_channel_msg(client: Client, update: Update, _, __: dict): raise ContinuePropagation from e -@Client.on_message( +@bot.on_message( filters.incoming & filters.group - & filters.command(["anti_channel_msg", f"anti_channel_msg@{user_me.username}"]) + & filters.command(["anti_channel_msg", f"anti_channel_msg@{bot.me.username}"]) ) async def switch_anti_channel_msg(client: Client, message: Message): # Check user @@ -90,7 +90,7 @@ async def switch_anti_channel_msg(client: Client, message: Message): await message.reply("You are not an admin of this chat.") raise ContinuePropagation # Check self - data = await client.get_chat_member(message.chat.id, user_me.id) + data = await client.get_chat_member(message.chat.id, bot.me.id) if data.status not in [ChatMemberStatus.ADMINISTRATOR, ChatMemberStatus.OWNER]: await message.reply("I'm not an admin of this chat.") raise ContinuePropagation diff --git a/modules/ask.py b/modules/ask.py index 4fcf204..bfb3a78 100644 --- a/modules/ask.py +++ b/modules/ask.py @@ -3,10 +3,11 @@ import re from pyrogram import Client, filters, ContinuePropagation from pyrogram.types import Message +from init import bot from defs.ask import how_many, what_time, how_long, hif, handle_pers, who -@Client.on_message(filters.incoming & filters.regex(r"^问")) +@bot.on_message(filters.incoming & filters.regex(r"^问")) async def ask(_: Client, message: Message): msg = message if not message.text: diff --git a/modules/banme.py b/modules/banme.py index 3f06ddd..4e603ff 100644 --- a/modules/banme.py +++ b/modules/banme.py @@ -6,7 +6,7 @@ from datetime import datetime, timedelta from pyrogram import Client, filters from pyrogram.enums import ChatMemberStatus from pyrogram.types import Message, ChatPermissions, CallbackQuery, InlineKeyboardMarkup, InlineKeyboardButton -from init import user_me +from init import bot from scheduler import reply_message @@ -20,10 +20,10 @@ def gen_cancel_button(uid: int): ) -@Client.on_message( +@bot.on_message( filters.incoming & filters.group - & filters.command(["banme", f"banme@{user_me.username}"]) + & filters.command(["banme", f"banme@{bot.me.username}"]) ) async def ban_me_command(client: Client, message: Message): args = str(message.text).strip() @@ -67,7 +67,7 @@ async def ban_me_command(client: Client, message: Message): await reply_message(message, msg, reply_markup=gen_cancel_button(message.from_user.id)) -@Client.on_callback_query( +@bot.on_callback_query( filters.regex(r"^banme_cancel_(\d+)$") ) async def ban_me_cancel(client: Client, callback_query: CallbackQuery): diff --git a/modules/bilibili.py b/modules/bilibili.py index c0bf047..97e6572 100644 --- a/modules/bilibili.py +++ b/modules/bilibili.py @@ -11,9 +11,10 @@ from defs.bilibili import ( get_dynamic_screenshot_pc, ) from defs.button import gen_button, Button +from init import bot -@Client.on_message( +@bot.on_message( filters.incoming & filters.text & filters.regex(r"av(\d{1,12})|BV(1[A-Za-z0-9]{2}4.1.7[A-Za-z0-9]{2})|b23.tv") @@ -41,7 +42,7 @@ async def bili_resolve(_: Client, message: Message): raise ContinuePropagation -@Client.on_message( +@bot.on_message( filters.incoming & filters.text & filters.regex(r"t.bilibili.com/([0-9]*)") ) async def bili_dynamic(_: Client, message: Message): diff --git a/modules/book_of_answers.py b/modules/book_of_answers.py index c05f295..86f31e0 100644 --- a/modules/book_of_answers.py +++ b/modules/book_of_answers.py @@ -6,6 +6,7 @@ from typing import List from pyrogram import Client, filters, ContinuePropagation from pyrogram.types import Message +from init import bot book_of_answers: List[str] @@ -16,7 +17,7 @@ with open( book_of_answers = json.load(file) -@Client.on_message(filters.incoming & filters.regex(r"^答案之书$")) +@bot.on_message(filters.incoming & filters.regex(r"^答案之书$")) async def book_of_answer(_: Client, message: Message): await message.reply_text(f"{choice(book_of_answers)}", quote=True) raise ContinuePropagation diff --git a/modules/dc.py b/modules/dc.py index f08d0d9..a077bfe 100644 --- a/modules/dc.py +++ b/modules/dc.py @@ -1,7 +1,7 @@ from pyrogram import Client, filters from pyrogram.types import Message, Chat -from init import user_me +from init import bot def mention_chat(chat: Chat) -> str: @@ -31,7 +31,7 @@ def get_dc(message: Message): return dc, mention -@Client.on_message(filters.incoming & filters.command(["dc", f"dc@{user_me.username}"])) +@bot.on_message(filters.incoming & filters.command(["dc", f"dc@{bot.me.username}"])) async def dc_command(_: Client, message: Message): geo_dic = { "1": "美国-佛罗里达州-迈阿密", diff --git a/modules/exchange.py b/modules/exchange.py index 6cac6aa..007896b 100644 --- a/modules/exchange.py +++ b/modules/exchange.py @@ -4,7 +4,7 @@ from pyrogram.types import Message from defs.exchange import exchange_client from scheduler import scheduler -from init import user_me +from init import bot @scheduler.scheduled_job("cron", hour="8", id="exchange.refresh") @@ -12,8 +12,8 @@ async def exchange_refresh() -> None: await exchange_client.refresh() -@Client.on_message( - filters.incoming & filters.command(["exchange", f"exchange@{user_me.username}"]) +@bot.on_message( + filters.incoming & filters.command(["exchange", f"exchange@{bot.me.username}"]) ) async def exchange_command(_: Client, message: Message): if not exchange_client.inited: diff --git a/modules/fanbox.py b/modules/fanbox.py index 7b26151..ed92ac3 100644 --- a/modules/fanbox.py +++ b/modules/fanbox.py @@ -3,9 +3,10 @@ from pyrogram.enums import MessageEntityType from pyrogram.types import Message from defs.fanbox import parse_fanbox_url +from init import bot -@Client.on_message(filters.incoming & filters.text & filters.regex(r"fanbox.cc")) +@bot.on_message(filters.incoming & filters.text & filters.regex(r"fanbox.cc")) async def fanbox_check(_: Client, message: Message): if not message.text: return diff --git a/modules/fragment.py b/modules/fragment.py index 7a4d805..4cff253 100644 --- a/modules/fragment.py +++ b/modules/fragment.py @@ -14,14 +14,14 @@ from pyrogram.types import ( from models.fragment import FragmentSubText, FragmentSub, AuctionStatus from defs.fragment import parse_fragment, NotAvailable, parse_sub -from init import user_me, bot +from init import bot from scheduler import scheduler, add_delete_message_job QUERY_PATTERN = re.compile(r"^@\w[a-zA-Z0-9_]{3,32}$") -@Client.on_message( - filters.incoming & filters.command(["username", f"username@{user_me.username}"]) +@bot.on_message( + filters.incoming & filters.command(["username", f"username@{bot.me.username}"]) ) async def fragment_command(client: Client, message: Message): status = None @@ -61,18 +61,9 @@ async def fragment_command(client: Client, message: Message): await message.reply(text) -@Client.on_inline_query() +@bot.on_inline_query(filters=filters.regex(r"^@\w[a-zA-Z0-9_]{3,32}$")) async def fragment_inline(_, inline_query: InlineQuery): username = inline_query.query - if not username.startswith("@"): - username = f"@{username}" - if not QUERY_PATTERN.match(username): - return await inline_query.answer( - results=[], - switch_pm_text="请输入 @username 来查询遗产", - switch_pm_parameter="start", - cache_time=0, - ) username = username[1:] try: user = await parse_fragment(username) @@ -82,12 +73,13 @@ async def fragment_inline(_, inline_query: InlineQuery): except Exception: text = "" if not text: - return await inline_query.answer( + await inline_query.answer( results=[], switch_pm_text="查询失败了 ~ 呜呜呜", switch_pm_parameter="start", cache_time=0, ) + inline_query.stop_propagation() results = [ InlineQueryResultArticle( title=username, @@ -111,6 +103,7 @@ async def fragment_inline(_, inline_query: InlineQuery): switch_pm_parameter="start", cache_time=0, ) + inline_query.stop_propagation() @scheduler.scheduled_job("cron", hour="8", minute="1", id="fragment.sub") diff --git a/modules/friend_say.py b/modules/friend_say.py index ade407d..4252b56 100644 --- a/modules/friend_say.py +++ b/modules/friend_say.py @@ -6,9 +6,10 @@ from pyrogram import Client, filters, ContinuePropagation from pyrogram.types import Message from defs.friend_say import ImageUtil +from init import bot -@Client.on_message(filters.incoming & filters.group & filters.regex(r"^我有个朋友")) +@bot.on_message(filters.incoming & filters.group & filters.regex(r"^我有个朋友")) async def friend_say(client: Client, message: Message): if not message.reply_to_message: raise ContinuePropagation diff --git a/modules/geo.py b/modules/geo.py index 1560452..6195690 100644 --- a/modules/geo.py +++ b/modules/geo.py @@ -1,19 +1,17 @@ import contextlib - from urllib.parse import quote from pyrogram import Client, filters from pyrogram.types import Message from defs.glover import amap_key - -from init import user_me, request +from init import request, bot REQUEST_URL = f"https://restapi.amap.com/v3/geocode/geo?key={amap_key}&" -@Client.on_message( - filters.incoming & filters.command(["geo", f"geo@{user_me.username}"]) +@bot.on_message( + filters.incoming & filters.command(["geo", f"geo@{bot.me.username}"]) ) async def geo_command(_: Client, message: Message): if len(message.command) <= 1: diff --git a/modules/guess.py b/modules/guess.py index de7fbab..b165c04 100644 --- a/modules/guess.py +++ b/modules/guess.py @@ -2,11 +2,11 @@ from pyrogram import Client, filters from pyrogram.types import Message from defs.guess import guess_str -from init import user_me +from init import bot -@Client.on_message( - filters.incoming & filters.command(["guess", f"guess@{user_me.username}"]) +@bot.on_message( + filters.incoming & filters.command(["guess", f"guess@{bot.me.username}"]) ) async def guess_command(_: Client, message: Message): msg = await message.reply("正在查询中...") diff --git a/modules/ip.py b/modules/ip.py index 35ef700..eed71b5 100644 --- a/modules/ip.py +++ b/modules/ip.py @@ -4,10 +4,10 @@ from pyrogram import Client, filters from pyrogram.types import Message from defs.ip import ip_info -from init import user_me, request +from init import request, bot -@Client.on_message(filters.incoming & filters.command(["ip", f"ip@{user_me.username}"])) +@bot.on_message(filters.incoming & filters.command(["ip", f"ip@{bot.me.username}"])) async def ip_command(_: Client, message: Message): msg = await message.reply("正在查询中...") rep_text = "" diff --git a/modules/lofter.py b/modules/lofter.py index 2177e8d..d2dae01 100644 --- a/modules/lofter.py +++ b/modules/lofter.py @@ -3,9 +3,10 @@ from pyrogram.enums import MessageEntityType from pyrogram.types import Message from defs.lofter import get_loft, input_media, get_loft_user, lofter_user_link +from init import bot -@Client.on_message(filters.incoming & filters.text & filters.regex(r"lofter.com")) +@bot.on_message(filters.incoming & filters.text & filters.regex(r"lofter.com")) async def lofter_share(_: Client, message: Message): if not message.text: return diff --git a/modules/luxun.py b/modules/luxun.py index 9eb15dd..6f2066f 100644 --- a/modules/luxun.py +++ b/modules/luxun.py @@ -2,9 +2,10 @@ from pyrogram import Client, filters, ContinuePropagation from pyrogram.types import Message from defs.luxun import process_pic +from init import bot -@Client.on_message(filters.incoming & filters.regex(r"^鲁迅说过")) +@bot.on_message(filters.incoming & filters.regex(r"^鲁迅说过")) async def luxun_say(_: Client, message: Message): args = message.text[4:] if not args: diff --git a/modules/post.py b/modules/post.py index ce883fb..b68e446 100644 --- a/modules/post.py +++ b/modules/post.py @@ -3,9 +3,10 @@ from defs.glover import admin from pyrogram.types import Message from defs.post import LofterPost +from init import bot -@Client.on_message( +@bot.on_message( filters.incoming & filters.private & filters.user(admin) diff --git a/modules/repeater.py b/modules/repeater.py index 2669b87..a1f4581 100644 --- a/modules/repeater.py +++ b/modules/repeater.py @@ -1,12 +1,14 @@ from pyrogram import Client, filters, ContinuePropagation from pyrogram.types import Message +from init import bot + last_msg = {} last_repeat_msg = {} repeat_count = {} -@Client.on_message(filters.incoming & filters.group) +@bot.on_message(filters.incoming & filters.group) async def repeater_handler(client: Client, message: Message): global last_msg, last_repeat_msg, repeat_count diff --git a/modules/splash.py b/modules/splash.py index ba91661..f9dbb2b 100644 --- a/modules/splash.py +++ b/modules/splash.py @@ -1,12 +1,14 @@ from pyrogram import Client, filters -from pyrogram.types import Message +from pyrogram.types import Message, InlineQuery -from defs.splash import update_splash +from defs.glover import admin +from defs.splash import update_splash, get_inline_results +from init import bot from scheduler import scheduler -@Client.on_message( - filters.incoming & filters.command(["splash_update"]) +@bot.on_message( + filters.incoming & filters.user(admin) & filters.command(["splash_update"]) ) async def splash_update(_: Client, message: Message): """ @@ -19,3 +21,23 @@ async def splash_update(_: Client, message: Message): @scheduler.scheduled_job("interval", minutes=30, id="splash_update") async def splash_update_job() -> None: await update_splash() + + +@bot.on_inline_query(filters.regex(r"^m$")) +async def splash_query(_: Client, inline_query: InlineQuery): + results = await get_inline_results() + if not results: + await inline_query.answer( + results=[], + switch_pm_text="暂无启动图数据", + switch_pm_parameter="start", + cache_time=0, + ) + else: + await inline_query.answer( + results=results, + switch_pm_text=f"共 {len(results)} 张启动图", + switch_pm_parameter="start", + cache_time=0, + ) + inline_query.stop_propagation() diff --git a/modules/start.py b/modules/start.py index b2bcec2..f7ea9a2 100644 --- a/modules/start.py +++ b/modules/start.py @@ -1,6 +1,7 @@ from pyrogram import Client, filters -from pyrogram.types import Message +from pyrogram.types import Message, InlineQuery, InlineQueryResultArticle, InputTextMessageContent from defs.button import gen_button, Button +from init import bot des = """本机器人特性: @@ -16,7 +17,7 @@ des = """本机器人特性: """ -@Client.on_message(filters.incoming & filters.private & filters.command(["start"])) +@bot.on_message(filters.incoming & filters.private & filters.command(["start"])) async def start_command(_: Client, message: Message): """ 回应机器人信息 @@ -31,3 +32,25 @@ async def start_command(_: Client, message: Message): ] ), ) + + +@bot.on_inline_query(group=1) +async def empty_inline(_, inline_query: InlineQuery): + results = [ + InlineQueryResultArticle( + title="@username", + input_message_content=InputTextMessageContent("使用 @username 来查询遗产"), + description="使用 @username 来查询遗产", + ), + InlineQueryResultArticle( + title="m", + input_message_content=InputTextMessageContent("使用 m 来查询米游社启动图"), + description="使用 m 来查询米游社启动图", + ), + ] + return await inline_query.answer( + results=results, + switch_pm_text="使用关键词开始查询", + switch_pm_parameter="start", + cache_time=0, + )