diff options
author | Kyomotoi <[email protected]> | 2020-12-20 17:14:41 +0800 |
---|---|---|
committer | Kyomotoi <[email protected]> | 2020-12-20 17:14:41 +0800 |
commit | 9bf222471d34cb756a4878b103ec82c6c4bfb191 (patch) | |
tree | 1420d498c41f71858e74b4926b8d7206b5235fe6 /ATRI/plugins/plugin_anime/__init__.py | |
parent | 9ac2c2eb7ef2eb267e926d599dc077f5afae98f9 (diff) | |
download | ATRI-9bf222471d34cb756a4878b103ec82c6c4bfb191.tar.gz ATRI-9bf222471d34cb756a4878b103ec82c6c4bfb191.tar.bz2 ATRI-9bf222471d34cb756a4878b103ec82c6c4bfb191.zip |
[Update]
- 创建项目结构
Diffstat (limited to 'ATRI/plugins/plugin_anime/__init__.py')
-rw-r--r-- | ATRI/plugins/plugin_anime/__init__.py | 338 |
1 files changed, 0 insertions, 338 deletions
diff --git a/ATRI/plugins/plugin_anime/__init__.py b/ATRI/plugins/plugin_anime/__init__.py deleted file mode 100644 index fea720b..0000000 --- a/ATRI/plugins/plugin_anime/__init__.py +++ /dev/null @@ -1,338 +0,0 @@ -#!/usr/bin/env python3 -# -*- encoding: utf-8 -*- -''' -@File : __init__.py -@Time : 2020/11/07 14:36:53 -@Author : Kyomotoi -@Contact : [email protected] -@Github : https://github.com/Kyomotoi -@License : Copyright © 2018-2020 Kyomotoi, All Rights Reserved. -''' -__author__ = 'kyomotoi' - -import re -import json -import sqlite3 -from pathlib import Path -from random import randint -from datetime import datetime, timedelta -from apscheduler.triggers.date import DateTrigger - -from nonebot.rule import Rule -from nonebot.log import logger -from nonebot.typing import Bot, Event -from nonebot.permission import SUPERUSER -from nonebot_plugin_apscheduler import scheduler -from nonebot.plugin import on_message, on_command, on_regex - -from ATRI.utils.utils_times import countX -from ATRI.utils.utils_yml import load_yaml -from ATRI.utils.utils_error import errorRepo -from ATRI.utils.utils_history import getMessage -from ATRI.utils.utils_translate import toSimpleString -from ATRI.utils.utils_rule import check_banlist, check_switch -from ATRI.utils.utils_request import aio_get_bytes, request_get -from ATRI.utils.utils_img import compress_image, aio_download_pics - -from .data_source import resultRepo - -CONFIG_PATH = Path('.') / 'config.yml' -config = load_yaml(CONFIG_PATH) - -plugin_name_0 = "anime-pic-search" -key_SauceNAO = config['api']['SauceNaoKEY'] - -SaucenaoSearch = on_command('以图搜图', - rule=check_banlist() - & check_switch(plugin_name_0, True)) - - -async def _(bot: Bot, event: Event, state: dict) -> None: - user = str(event.user_id) - group = str(event.group_id) - - state["user"] = user - state["group"] = group - - img = str(event.message).strip() - - if img: - state["img_url"] = img - - [email protected]("img_url", prompt="请发送一张目标图片") -async def _(bot: Bot, event: Event, state: dict) -> None: - img = state["img_url"] - img = re.findall(r"(http://.*?)]", img) - - if len(img): - pass - else: - await SaucenaoSearch.reject("请发送一张目标图片,而非文字或其他非图片成分( -'`-; )") - - await bot.send(event, "别急!正在找图!") - - await SaucenaoSearch.finish(resultRepo(state['user'], key_SauceNAO, - img[0])) - - -SaucenaoSearch_repo = on_message(rule=check_banlist() - & check_switch(plugin_name_0, True)) - - -@SaucenaoSearch_repo.handle() -async def _(bot: Bot, event: Event, state: dict) -> None: - group = str(event.group_id) - msg = str(event.message) - - if "[CQ:reply" in msg: - if "搜图" in msg or "识图" in msg: - if group == "None": - await SaucenaoSearch_repo.finish("ごめんなさい...\n该功能只对群聊开放哦~~") - - try: - repo_info = re.findall(r"CQ:reply,id=([0-9]\S+)]", msg) - msg_id = repo_info[0] - except Exception: - logger.error("Get message_id ERROR!") - await SaucenaoSearch_repo.finish(errorRepo('定位消息内容失败')) - return - - aim = getMessage(msg_id)[f"{msg_id}"]["message"] - img = img = re.findall(r"(http://.*?)]", aim) - - if len(img): - pass - else: - await SaucenaoSearch_repo.finish('这消息内貌似没图片呢...') - - await bot.send(event, "别急!正在找图!") - - await SaucenaoSearch.finish( - resultRepo(state['user'], key_SauceNAO, img[0])) - - -plugin_name_1 = "anime-vid-search" -AnimeSearch = on_command('以图搜番', - rule=check_banlist() - & check_switch(plugin_name_1, True)) - - -async def _(bot: Bot, event: Event, state: dict) -> None: - user = str(event.user_id) - group = str(event.group_id) - - state["user"] = user - state["group"] = group - - img = str(event.message).strip() - - if img: - state["img_url"] = img - - [email protected]("img_url", prompt="请发送一张目标图片") -async def _(bot: Bot, event: Event, state: dict) -> None: - img = state["img_url"] - img = re.findall(r"(http://.*?)]", img) - - if len(img): - pass - else: - await SaucenaoSearch.reject("请发送一张目标图片,而非文字或其他非图片成分(") - - await bot.send(event, "别急!正在搜索!") - req = None - - URL = f'https://trace.moe/api/search?url={img[0]}' - try: - req = await aio_get_bytes(URL) - except: - await AnimeSearch.finish(errorRepo("请求数据失败")) - - d = {} - data = json.loads(req.decode()) - - try: - for i in range(len(data['docs'])): - if data['docs'][i]['title_chinese'] in d: - d[data['docs'][i] - ['title_chinese']][0] += data['docs'][i]['similarity'] - - else: - m = data['docs'][i]['at'] / 60 - s = data['docs'][i]['at'] % 60 - - if data['docs'][i]['episode'] == '': - n = 1 - - else: - n = data['docs'][i]['episode'] - - d[toSimpleString(data['docs'][i]['title_chinese'])] = [ - data['docs'][i]['similarity'], f'第{n}集', - f'{int(m)}分{int(s)}秒处' - ] - except: - await AnimeSearch.finish(errorRepo("处理数据失败")) - - result = sorted( - d.items(), - key=lambda x: x[1], - reverse=True) - - t = 0 - msg0 = f'[CQ:at,qq={state["user"]}]\n根据所提供的图片按照相似度找到{len(d)}个结果:' - - for i in result: - t += 1 - lk = ('%.2f%%' % (i[1][0] * 100)) - msg = ( - f'\n——————————\n({t})\n相似度:{lk}\n动漫名:《{i[0]}》\n时间点:{i[1][1]} {i[1][2]}' - ) - msg0 += msg - - await AnimeSearch.finish(msg0) - - -plugin_name_2 = "anime-setu" -key_LoliconAPI = config['api']['LoliconAPI'] -setu_type = 2 # setu-type: 1(local), 2(url: https://api.lolicon.app/#/setu) -SP_temp_list = [] -SP_list = [] - - -def check_sepi() -> Rule: - """检查目标是否是涩批""" - async def _check_sepi(bot: Bot, event: Event, state: dict) -> bool: - if event.user_id in SP_list: - await bot.send(event, "你可少冲点吧!涩批!哼唧") - return False - else: - return True - return Rule(_check_sepi) - -def add_sepi(user: int) -> None: - """将目标移入涩批名单""" - global SP_list - SP_list.append(user) - -def del_sepi(user: int) -> None: - """将目标移出涩批名单""" - global SP_list - SP_list.remove(user) - - -setu = on_regex( - r"来[点丶张份副个幅][涩色瑟][图圖]|[涩色瑟][图圖]来|[涩色瑟][图圖][gkd|GKD|搞快点]|[gkd|GKD|搞快点][涩色瑟][图圖]", - rule=check_banlist() & check_switch(plugin_name_2, False) & check_sepi()) - - -async def _(bot: Bot, event: Event, state: dict) -> None: - global SP_temp_list - user = event.user_id - group = event.group_id - res = randint(1, 5) - print(1) - - if countX(SP_temp_list, user) == 5: - add_sepi(user) # type: ignore - SP_temp_list = list(set(SP_temp_list)) - delta = timedelta(hours=1) - trigger = DateTrigger(run_date=datetime.now() + delta) - scheduler.add_job(func=del_sepi, - trigger=trigger, - args=(user, ), - misfire_grace_time=60) - return - - if setu_type == 1: - - DATA_PATH = Path('.') / 'ATRI' / 'data' / 'data_Sqlite' / 'setu' / 'nearR18.db' - - if not DATA_PATH.is_file(): - await setu.finish("数据库...她是空的!!!") - - con = sqlite3.connect(DATA_PATH) - cur = con.cursor() - msg = cur.execute('SELECT * FROM nearR18 ORDER BY RANDOM() limit 1;') - - for i in msg: - pid = i[0] - title = i[1] - img = i[7] - - msg0 = "setu info:\n" - msg0 += f"Title: {title}\n" - msg0 += f"Pid: {pid}\n" - msg0 += f"[CQ:image,file=file:///{compress_image(await aio_download_pics(img))}]" - - if 1 <= res < 5: - SP_temp_list.append(user) - await setu.finish(msg0) - - elif res == 5: - await bot.send(event, "我找到涩图了!但我发给主人了\nο(=•ω<=)ρ⌒☆") - - for sup in config['bot']['superusers']: - await bot.send_private_msg( - user_id=sup, - message= - f"主人,从群{group}来的涩图!热乎着!\nTitle: {title}\nPid: {pid}\n[CQ:image,file=file:///{compress_image(await aio_download_pics(img))}]" - ) - - else: - params = {"apikey": key_LoliconAPI, "r18": "0", "num": "1"} - - data = {} - - try: - data = json.loads( - request_get('https://api.lolicon.app/setu/', params)) - except Exception: - await setu.finish(errorRepo("请求数据失败,也可能为接口调用次数达上限")) - - msg0 = "setu info:\n" - msg0 += f'Title: {data["data"][0]["title"]}\n' - msg0 += f'Pid: {data["data"][0]["pid"]}\n' - msg0 += f'[CQ:image,file=file:///{compress_image(await aio_download_pics(data["data"][0]["url"]))}]' - - if 1 <= res < 5: - SP_temp_list.append(user) - await setu.finish(msg0) - - elif res == 5: - await bot.send(event, "我找到涩图了!但我发给主人了\nο(=•ω<=)ρ⌒☆") - - for sup in config['bot']['superusers']: - await bot.send_private_msg( - user_id=sup, - message= - f'主人,从群{group}来的涩图!热乎着!\nTitle: {data["data"][0]["title"]}\nPid: {data["data"][0]["pid"]}\n[CQ:image,file=file:///{compress_image(await aio_download_pics(data["data"][0]["url"]))}]' - ) - - -setuType = on_command("setu-type", permission=SUPERUSER) - - -async def _(bot: Bot, event: Event, state: dict) -> None: - global setu_type - msg = str(event.message).strip() - - if not msg: - await setuType.finish("请查看文档获取帮助(") - - if msg == "local": - setu_type = 1 - - elif msg == "url": - setu_type = 2 - - else: - await setuType.finish("请检查类型是否输入正确嗷!") - - await setuType.finish("Type conversion completed!") |