mirror of
https://github.com/Xtao-Labs/iShotaBot.git
synced 2024-11-24 09:15:51 +00:00
✨ 支持 Inline Query MiYouShe Splash
This commit is contained in:
parent
c90c7c41c2
commit
1d4c269bda
@ -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
|
||||
|
10
init.py
10
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")
|
||||
|
22
main.py
22
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())
|
||||
|
@ -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
|
||||
|
@ -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:
|
||||
|
@ -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):
|
||||
|
@ -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):
|
||||
|
@ -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
|
||||
|
@ -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": "美国-佛罗里达州-迈阿密",
|
||||
|
@ -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:
|
||||
|
@ -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
|
||||
|
@ -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")
|
||||
|
@ -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
|
||||
|
@ -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:
|
||||
|
@ -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("正在查询中...")
|
||||
|
@ -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 = ""
|
||||
|
@ -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
|
||||
|
@ -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:
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
||||
|
@ -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()
|
||||
|
@ -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,
|
||||
)
|
||||
|
Loading…
Reference in New Issue
Block a user