mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2026-10-06 04:10:02 +08:00
refactor code
This commit is contained in:
+25
-37
@@ -2,13 +2,13 @@ from nonebot import on_command
|
||||
from nonebot.adapters.cqhttp.permission import PRIVATE
|
||||
from .data_source import from_reimu_get_info
|
||||
from services.log import logger
|
||||
from nonebot.adapters.cqhttp import Bot, Event
|
||||
from nonebot.adapters.cqhttp import Bot, Event, PrivateMessageEvent
|
||||
from nonebot.typing import T_State
|
||||
from utils.utils import is_number, get_message_text, UserExistLimiter, scheduler
|
||||
from models.count_user import UserCount
|
||||
from configs.config import COUNT_PER_DAY_REIMU
|
||||
|
||||
__plugin_name__ = '上车'
|
||||
__plugin_name__ = "上车"
|
||||
__plugin_usage__ = r"""
|
||||
* 请各位使用后不要转发 *
|
||||
* 大部分解压密码是⑨ *
|
||||
@@ -22,49 +22,48 @@ ps: 请尽量提供具体的目的地名称
|
||||
|
||||
_ulmt = UserExistLimiter()
|
||||
|
||||
reimu = on_command('上车', permission=PRIVATE, block=True, priority=1)
|
||||
reimu = on_command("上车", permission=PRIVATE, block=True, priority=1)
|
||||
|
||||
|
||||
@reimu.args_parser
|
||||
async def _(bot: Bot, event: Event, state: T_State):
|
||||
if get_message_text(event.json()) in ['取消', '算了']:
|
||||
async def _(bot: Bot, event: PrivateMessageEvent, state: T_State):
|
||||
if get_message_text(event.json()) in ["取消", "算了"]:
|
||||
await reimu.finish("已取消操作..", at_sender=True)
|
||||
if not get_message_text(event.json()):
|
||||
await reimu.reject('没时间等了!快说你要去哪里?', at_sender=True)
|
||||
state['keyword'] = get_message_text(event.json())
|
||||
state['page'] = 1
|
||||
await reimu.reject("没时间等了!快说你要去哪里?", at_sender=True)
|
||||
state["keyword"] = get_message_text(event.json())
|
||||
state["page"] = 1
|
||||
|
||||
|
||||
@reimu.handle()
|
||||
async def _(bot: Bot, event: Event, state: T_State):
|
||||
if str(event.get_message()) in ['帮助']:
|
||||
async def _(bot: Bot, event: PrivateMessageEvent, state: T_State):
|
||||
if str(event.get_message()) in ["帮助"]:
|
||||
await reimu.finish(__plugin_usage__)
|
||||
if await UserCount.check_count(event.user_id, 'reimu', COUNT_PER_DAY_REIMU):
|
||||
await reimu.finish('今天已经没车了,请明天再来...', at_sender=True)
|
||||
if await UserCount.check_count(event.user_id, "reimu", COUNT_PER_DAY_REIMU):
|
||||
await reimu.finish("今天已经没车了,请明天再来...", at_sender=True)
|
||||
if _ulmt.check(event.user_id):
|
||||
await reimu.finish('您还没下车呢,请稍等...', at_sender=True)
|
||||
await reimu.finish("您还没下车呢,请稍等...", at_sender=True)
|
||||
_ulmt.set_True(event.user_id)
|
||||
msg = get_message_text(event.json())
|
||||
args = msg.split(" ")
|
||||
if msg in ['!', '!', '?', '?', ',', ',', '.', '。']:
|
||||
if msg in ["!", "!", "?", "?", ",", ",", ".", "。"]:
|
||||
await reimu.finish(__plugin_usage__)
|
||||
if msg:
|
||||
if len(args) > 1 and is_number(args[0]):
|
||||
state['keyword'] = args[1]
|
||||
state['page'] = args[0]
|
||||
state["keyword"] = args[1]
|
||||
state["page"] = args[0]
|
||||
else:
|
||||
state['keyword'] = msg
|
||||
state['page'] = 1
|
||||
state["keyword"] = msg
|
||||
state["page"] = 1
|
||||
|
||||
|
||||
@reimu.got('keyword', '你的目的地是哪?')
|
||||
async def _(bot: Bot, event: Event, state: T_State):
|
||||
@reimu.got("keyword", "你的目的地是哪?")
|
||||
async def _(bot: Bot, event: PrivateMessageEvent, state: T_State):
|
||||
try:
|
||||
keyword = state['keyword']
|
||||
page = state['page']
|
||||
print(keyword, page)
|
||||
await UserCount.add_count(event.user_id, 'reimu')
|
||||
await reimu.send('已经帮你关好车门了,请等待发车(不加真寻好友的话是欣赏不到旅途的风景的)', at_sender=True)
|
||||
keyword = state["keyword"]
|
||||
page = state["page"]
|
||||
await UserCount.add_count(event.user_id, "reimu")
|
||||
await reimu.send("已经帮你关好车门了,请等待发车(不加真寻好友的话是欣赏不到旅途的风景的)", at_sender=True)
|
||||
reimu_report = await from_reimu_get_info(keyword, page)
|
||||
if reimu_report:
|
||||
await reimu.send(reimu_report)
|
||||
@@ -77,20 +76,9 @@ async def _(bot: Bot, event: Event, state: T_State):
|
||||
|
||||
|
||||
@scheduler.scheduled_job(
|
||||
'cron',
|
||||
# year=None,
|
||||
# month=None,
|
||||
# day=None,
|
||||
# week=None,
|
||||
# day_of_week="mon,tue,wed,thu,fri",
|
||||
"cron",
|
||||
hour=0,
|
||||
minute=1,
|
||||
# second=None,
|
||||
# start_date=None,
|
||||
# end_date=None,
|
||||
# timezone=None,
|
||||
)
|
||||
async def _():
|
||||
await UserCount.reset_count()
|
||||
|
||||
|
||||
|
||||
@@ -11,106 +11,102 @@ from asyncio.exceptions import TimeoutError
|
||||
async def from_reimu_get_info(key_word: str, page: int) -> str:
|
||||
if "miku" in key_word.lower():
|
||||
logger.warning("Taboo words are being triggered")
|
||||
return None
|
||||
return ''
|
||||
repass = ""
|
||||
url = 'https://blog.reimu.net/search/' + key_word + '/page/' + str(page)
|
||||
url_s = 'https://blog.reimu.net/'
|
||||
try:
|
||||
if key_word == "最近的存档":
|
||||
logger.debug("Now starting get the {}".format(url_s))
|
||||
repass = await get_repass(url_s)
|
||||
else:
|
||||
logger.debug("Now starting get the {}".format(url))
|
||||
repass = await get_repass(url)
|
||||
except TimeoutError as e:
|
||||
logger.error("Timeout! {}".format(e))
|
||||
|
||||
return repass
|
||||
url = f"https://blog.reimu.net/search/{key_word}/page/{page}"
|
||||
url_s = "https://blog.reimu.net/"
|
||||
# try:
|
||||
# if key_word == "最近的存档":
|
||||
# logger.debug("Now starting get the {}".format(url_s))
|
||||
# repass = await get_repass(url_s)
|
||||
# else:
|
||||
# logger.debug("Now starting get the {}".format(url))
|
||||
# repass = await get_repass(url)
|
||||
# except TimeoutError as e:
|
||||
# logger.error("Timeout! {}".format(e))
|
||||
#
|
||||
# return repass
|
||||
|
||||
|
||||
async def get_repass(url: str) -> str:
|
||||
repass = ""
|
||||
info = "[Note]注意大部分资源解压密码为⑨\n"
|
||||
fund = None
|
||||
print(url)
|
||||
async with aiohttp.ClientSession(headers=get_user_agent()) as session:
|
||||
async with session.get(url, proxy=get_local_proxy(), timeout=15) as response:
|
||||
html = etree.HTML(await response.text())
|
||||
|
||||
fund_l = html.xpath('//h1[@class="page-title"]/text()')
|
||||
if fund_l:
|
||||
fund = fund_l[0]
|
||||
if fund == "未找到":
|
||||
return "老司机也找不到路了……"
|
||||
else:
|
||||
pass
|
||||
|
||||
headers = html.xpath('//article/header/h2/a/text()')
|
||||
urls = html.xpath('//article/header/h2/a/@href')
|
||||
logger.debug("Now get {} post from search page".format(len(headers)))
|
||||
|
||||
headers_d = []
|
||||
urls_d = []
|
||||
for i, header in enumerate(headers):
|
||||
if check_need_list(header):
|
||||
headers_d.append(headers[i])
|
||||
urls_d.append(urls[i])
|
||||
else:
|
||||
logger.debug("This title {} does not meet the requirements".format(header))
|
||||
|
||||
header_len = len(headers_d)
|
||||
logger.debug("Get {} post after processing".format(header_len))
|
||||
if header_len > MAXINFO_REIMU:
|
||||
headers_d = headers_d[:MAXINFO_REIMU]
|
||||
urls_d = urls_d[:MAXINFO_REIMU]
|
||||
|
||||
for h_s, url_s in zip(headers_d, urls_d):
|
||||
if h_s != "审核结果存档":
|
||||
time.sleep(1.5)
|
||||
putline = await get_son_html_info(h_s, url_s)
|
||||
if putline:
|
||||
if repass:
|
||||
repass = "\n\n- - - - - - - - \n".join([repass, putline])
|
||||
else:
|
||||
repass = putline
|
||||
else:
|
||||
logger.info("审核归档页面已跳过")
|
||||
|
||||
if repass:
|
||||
repass = info + repass
|
||||
return repass
|
||||
# async def get_repass(url: str) -> str:
|
||||
# repass = ""
|
||||
# info = "[Note]注意大部分资源解压密码为⑨\n"
|
||||
# fund = None
|
||||
# print(url)
|
||||
# async with aiohttp.ClientSession(headers=get_user_agent()) as session:
|
||||
# async with session.get(url, proxy=get_local_proxy(), timeout=15) as response:
|
||||
# html = etree.HTML(await response.text())
|
||||
#
|
||||
# fund_l = html.xpath('//h1[@class="page-title"]/text()')
|
||||
# if fund_l:
|
||||
# fund = fund_l[0]
|
||||
# if fund == "未找到":
|
||||
# return "老司机也找不到路了……"
|
||||
# else:
|
||||
# pass
|
||||
#
|
||||
# headers = html.xpath("//article/header/h2/a/text()")
|
||||
# urls = html.xpath("//article/header/h2/a/@href")
|
||||
# logger.debug("Now get {} post from search page".format(len(headers)))
|
||||
#
|
||||
# headers_d = []
|
||||
# urls_d = []
|
||||
# for i, header in enumerate(headers):
|
||||
# if check_need_list(header):
|
||||
# headers_d.append(headers[i])
|
||||
# urls_d.append(urls[i])
|
||||
# else:
|
||||
# logger.debug(
|
||||
# "This title {} does not meet the requirements".format(header)
|
||||
# )
|
||||
#
|
||||
# header_len = len(headers_d)
|
||||
# logger.debug("Get {} post after processing".format(header_len))
|
||||
# if header_len > MAXINFO_REIMU:
|
||||
# headers_d = headers_d[:MAXINFO_REIMU]
|
||||
# urls_d = urls_d[:MAXINFO_REIMU]
|
||||
#
|
||||
# for h_s, url_s in zip(headers_d, urls_d):
|
||||
# if h_s != "审核结果存档":
|
||||
# time.sleep(1.5)
|
||||
# putline = await get_son_html_info(h_s, url_s)
|
||||
# if putline:
|
||||
# if repass:
|
||||
# repass = "\n\n- - - - - - - - \n".join([repass, putline])
|
||||
# else:
|
||||
# repass = putline
|
||||
# else:
|
||||
# logger.info("审核归档页面已跳过")
|
||||
#
|
||||
# if repass:
|
||||
# repass = info + repass
|
||||
# return repass
|
||||
#
|
||||
#
|
||||
# async def get_son_html_info(h_s, url_s) -> str:
|
||||
# repass = ""
|
||||
# logger.debug("Now starting get the {}".format(url_s))
|
||||
# async with aiohttp.ClientSession(headers=get_user_agent()) as session:
|
||||
# async with session.get(url_s, proxy=get_local_proxy(), timeout=15) as response:
|
||||
# html = etree.HTML(await response.text())
|
||||
# pres = html.xpath('//div[@class="entry-content"]/pre/text()')
|
||||
# a_texts = html.xpath('//div[@class="entry-content"]/pre//a/text()')
|
||||
# a_hrefs = html.xpath('//div[@class="entry-content"]/pre//a/@href')
|
||||
#
|
||||
# if pres and a_texts and a_hrefs:
|
||||
# while "" in pres:
|
||||
# pres.remove("")
|
||||
#
|
||||
# repass = "【资源名称】 {}\n\n{}".format(h_s, pres[0].strip())
|
||||
# for i, (a_t_s, a_h_s) in enumerate(zip(a_texts, a_hrefs)):
|
||||
# a = "\n {} {} {} ".format(a_t_s, a_h_s, pres[i + 1].strip())
|
||||
# repass += a
|
||||
# else:
|
||||
# logger.warning("Not get putline from {}".format(url_s))
|
||||
#
|
||||
# return repass
|
||||
|
||||
|
||||
async def get_son_html_info(h_s, url_s) -> str:
|
||||
repass = ""
|
||||
logger.debug("Now starting get the {}".format(url_s))
|
||||
async with aiohttp.ClientSession(headers=get_user_agent()) as session:
|
||||
async with session.get(url_s, proxy=get_local_proxy(), timeout=15) as response:
|
||||
html = etree.HTML(await response.text())
|
||||
pres = html.xpath('//div[@class="entry-content"]/pre/text()')
|
||||
a_texts = html.xpath('//div[@class="entry-content"]/pre//a/text()')
|
||||
a_hrefs = html.xpath('//div[@class="entry-content"]/pre//a/@href')
|
||||
|
||||
if pres and a_texts and a_hrefs:
|
||||
while "" in pres:
|
||||
pres.remove("")
|
||||
|
||||
repass = "【资源名称】 {}\n\n{}".format(h_s, pres[0].strip())
|
||||
for i, (a_t_s, a_h_s) in enumerate(zip(a_texts, a_hrefs)):
|
||||
a = "\n {} {} {} ".format(a_t_s, a_h_s, pres[i + 1].strip())
|
||||
repass += a
|
||||
else:
|
||||
logger.warning("Not get putline from {}".format(url_s))
|
||||
|
||||
return repass
|
||||
|
||||
|
||||
def check_need_list(header: str) -> bool:
|
||||
not_need = ['音乐', '御所动态']
|
||||
for nd in not_need:
|
||||
if nd in header:
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
# print(asyncio.get_event_loop().run_until_complete(from_reimu_get_info('萝莉')))
|
||||
Reference in New Issue
Block a user