From e1db381d2a331ebcbf308490ee2d53fb8a8fc0a1 Mon Sep 17 00:00:00 2001 From: Kyomotoi <1172294279@qq.com> Date: Mon, 9 Nov 2020 14:29:09 +0800 Subject: [Update] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 调整文件结构; 修复文件读取、创建问题; 重构部分代码; 修复: - 涩图插件名读取错误 - 私聊消息无法发送 新增: - 好友请求处理 - 邀请请求处理 --- ATRI/data/data_IDcard/main.bin | Bin 3992353 -> 0 bytes ATRI/data/data_Log/message_private.json | 1 - ATRI/plugins/plugin_admin/__init__.py | 6 +- ATRI/plugins/plugin_anime/__init__.py | 2 +- ATRI/plugins/plugin_chat/__init__.py | 153 +++++++++++++++++++++++++++----- ATRI/plugins/plugin_chat/laugh.txt | 132 +++++++++++++++++++++++++++ ATRI/plugins/plugin_sqlite/__init__.py | 4 +- ATRI/plugins/plugin_utils/generate.py | 4 +- ATRI/plugins/plugin_utils/main.bin | Bin 0 -> 3992353 bytes 9 files changed, 270 insertions(+), 32 deletions(-) delete mode 100644 ATRI/data/data_IDcard/main.bin delete mode 100644 ATRI/data/data_Log/message_private.json create mode 100644 ATRI/plugins/plugin_chat/laugh.txt create mode 100644 ATRI/plugins/plugin_utils/main.bin (limited to 'ATRI') diff --git a/ATRI/data/data_IDcard/main.bin b/ATRI/data/data_IDcard/main.bin deleted file mode 100644 index 6e74a60..0000000 Binary files a/ATRI/data/data_IDcard/main.bin and /dev/null differ diff --git a/ATRI/data/data_Log/message_private.json b/ATRI/data/data_Log/message_private.json deleted file mode 100644 index 9e26dfe..0000000 --- a/ATRI/data/data_Log/message_private.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/ATRI/plugins/plugin_admin/__init__.py b/ATRI/plugins/plugin_admin/__init__.py index 7e19908..663326b 100644 --- a/ATRI/plugins/plugin_admin/__init__.py +++ b/ATRI/plugins/plugin_admin/__init__.py @@ -39,9 +39,7 @@ async def _(bot: Bot, event: Event, state: dict) -> None: func = str(event.message).strip() - if func: - pass - else: + if not func: msg0 = "-==ATRI Switch Control System==-\n" msg0 += "┌Usage: switch on/off-{service}\n" msg0 += "├For SUPERUSER:\n" @@ -232,7 +230,7 @@ groupSendMessage = on_command("群发", permission=SUPERUSER) @groupSendMessage.handle() # type: ignore async def _(bot: Bot, event: Event, state: dict) -> None: - args = str(event.message) + args = str(event.message).strip() if args: state['msg'] = args diff --git a/ATRI/plugins/plugin_anime/__init__.py b/ATRI/plugins/plugin_anime/__init__.py index b3dac52..6fde78c 100644 --- a/ATRI/plugins/plugin_anime/__init__.py +++ b/ATRI/plugins/plugin_anime/__init__.py @@ -197,7 +197,7 @@ setu_type = 1 # setu-type: 1(local), 2(url: https://api.lolicon.app/#/setu) def setus = on_regex( r"来[点丶张份副个幅][涩色瑟][图圖]|[涩色瑟][图圖]来|[涩色瑟][图圖][gkd|GKD|搞快点]|[gkd|GKD|搞快点][涩色瑟][图圖]", - rule=check_banlist() & check_switch(plugin_name_1)) + rule=check_banlist() & check_switch(plugin_name_2)) @setus.handle() # type: ignore diff --git a/ATRI/plugins/plugin_chat/__init__.py b/ATRI/plugins/plugin_chat/__init__.py index b8f3c2a..ec6738f 100644 --- a/ATRI/plugins/plugin_chat/__init__.py +++ b/ATRI/plugins/plugin_chat/__init__.py @@ -10,16 +10,16 @@ ''' __author__ = 'kyomotoi' -import re import json from pathlib import Path from random import choice +from nonebot.permission import SUPERUSER from requests import exceptions from nonebot.log import logger from nonebot.rule import to_me from nonebot.adapters.cqhttp import Bot, Event -from nonebot.plugin import on_command, on_message, on_notice +from nonebot.plugin import on_command, on_message, on_notice, on_request from utils.utils_times import countX from utils.utils_yml import load_yaml @@ -31,6 +31,8 @@ from utils.utils_request import request_api_text CONFIG_PATH = Path('.') / 'config.yml' config = load_yaml(CONFIG_PATH)['bot'] +master = config['superusers'] + # 收集 bot 所在群的聊天记录 MessageSave = on_message() @@ -58,14 +60,14 @@ callMe = on_message(rule=check_banlist()) @callMe.handle() # type: ignore async def _(bot: Bot, event: Event, state: dict) -> None: - msg = str(event.message) - - if msg in config['nickname']: - await callMe.finish("叫咱有啥事吗w") + msg = str(event.raw_event['raw_message']).strip() - elif "萝卜子" in msg: + if "萝卜子" in msg: await bot.send(event, "萝卜子是对咱的蔑称!!") + elif msg in config['nickname']: + await callMe.finish("叫咱有啥事吗w") + # 戳 一 戳 pokehah = on_command("戳一戳", rule=to_me() & check_banlist()) @@ -83,11 +85,12 @@ async def _poke(bot: Bot, event: Event, state: dict) -> None: async def poke_(bot: Bot, event: Event, state: dict) -> bool: - return (event.detail_type == "notify" - and event.raw_event["sub_type"] == "poke" - and event.sub_type == "notice" and int( - event.self_id) == event.raw_event["target_id"] - ) + try: + return (event.raw_event['sub_type'] == 'poke' + and event.raw_event['target_id'] == int(event.self_id) + and event.raw_event['notice_type'] == 'notify') + except: + return False poke = on_notice(rule=check_banlist() & poke_, block=True) @@ -99,17 +102,106 @@ groupEvent = on_notice() @groupEvent.handle() # type: ignore async def _(bot: Bot, event: Event, state: dict) -> None: - if event.raw_event["notice_type"] == "group_increase": - await groupEvent.finish( - f'好欸!事新人[CQ:at,qq={event.raw_event["user_id"]}]' - ) - await groupEvent.finish("在下 ATRI,你可以叫我 亚托莉 或 アトリ !~w") + if event.raw_event['notice_type'] == 'group_increase': + if event.user_id != int(event.self_id): + await groupEvent.finish( + f'好欸!事新人[CQ:at,qq={event.raw_event["user_id"]}]') + elif event.user_id == int(event.self_id): + await groupEvent.finish("在下 ATRI,你可以叫我 亚托莉 或 アトリ !~w") + + if event.raw_event['notice_type'] == 'group_decrease': + if event.user_id != int(event.self_id): + await groupEvent.finish(f'[{event.user_id}] 离开了我们...') + elif event.user_id == int(event.self_id): + for sup in master: + await bot.send_private_msg( + user_id=sup, + message=f'呜呜呜,主人,咱被群[{event.group_id}]扔出来了...') + + +# 处理 加好友 / 拉群 事件 +selfEvent = on_request(rule=check_banlist()) +FRIEND_ADD = 0 +GROUP_INVITE = 0 + + +@selfEvent.handle() # type: ignore +async def _(bot: Bot, event: Event, state: dict) -> None: + print(event.raw_event) + flag = event.raw_event['flag'] + req_type = event.raw_event['request_type'] + + if req_type == 'friend': + for sup in master: + msg0 = '主人,收到一条好友请求:\n' + msg0 += f"请求人:{event.raw_event['user_id']}\n" + msg0 += f"申请信息:{event.raw_event['comment']}\n" + + if FRIEND_ADD == 0: + msg0 += '由于主人未允许咱添加好友,已回拒' + await bot.set_friend_add_request(flag=flag, approve=False) + else: + msg0 += '由于主人已同意咱添加好友,已通过' + await bot.set_friend_add_request(flag=flag, approve=True) + + await bot.send_private_msg(user_id=sup, message=msg0) + + elif req_type == 'group' and event.raw_event['sub_type'] == 'invite': + for sup in master: + msg0 = '主人,收到一条群邀请:\n' + msg0 += f"邀请人:{event.raw_event['user_id']}\n" + msg0 += f"目标群:{event.raw_event['group_id']}\n" + + if GROUP_INVITE == 0: + msg0 += '由于主人未允许咱添加群聊,已回拒' + await bot.set_group_add_request( + flag=flag, + sub_type=event.raw_event['sub_type'], + approve=False, + reason=f'ねね..ごんめね...\n主人不允许咱添加其他群聊...\n如需寻求帮助,请联系维护者:{sup}' + ) + + else: + msg0 += '由于主人已允许咱添加群聊,已同意' + await bot.set_group_add_request( + flag=flag, + sub_type=event.raw_event['sub_type'], + approve=True) + + await bot.send_private_msg(user_id=sup, message=msg0) + + +# 控制 加好友 / 拉群 认证,默认关闭 +controlSelfEvent = on_command('selfevent', permission=SUPERUSER) + + +@controlSelfEvent.handle() # type: ignore +async def _(bot: Bot, event: Event, state: dict) -> None: + args = str(event.message).strip() + msg0 = '' + global FRIEND_ADD, GROUP_INVITE + + if not args: + msg0 = '-==ATRI INVITE Control System==-\n' + msg0 += 'Tips:\n' + msg0 += ' - For SUPERUSERS\n' + msg0 += ' - Normal all false\n' + msg0 += 'Usage:\n' + msg0 += ' - selfevent group-true/false\n' + msg0 += ' - selfevent friend-true/false\n' + + await controlSelfEvent.finish(msg0) + + if 'group-' in args: + if 'true' in args: + GROUP_INVITE = 1 + elif 'friend-' in args: + if 'true' in args: + FRIEND_ADD = 1 + else: + await controlSelfEvent.finish(msg0) - elif event.raw_event[ - "notice_type"] == "group_decrease": - await groupEvent.finish( - f'[{event.raw_event["operator_id"]}] 离开了我们...' - ) + await controlSelfEvent.finish('DONE!') # # 舆情监听系统 @@ -184,3 +276,20 @@ async def _(bot: Bot, event: Event, state: dict) -> None: await hitokoto.finish(errorRepo("请求错误")) await hitokoto.finish(info["hitokoto"]) + + +# laughFunny = on_command('来句笑话', rule=check_banlist()) + +# @laughFunny.handle() #type: ignore +# async def _(bot: Bot, event: Event, state: dict) -> None: +# name = event.sender['nickname'] +# result = [] + +# LAUGH_FILE = Path('.') / 'ATRI' / 'plugins' / 'plugin_chat' / 'laugh.txt' + +# with open(LAUGH_FILE, 'r', encoding='utf-8') as f: +# for line in f: +# result.append(line.strip('\n')) + +# resu = choice(result) +# print(resu%name) \ No newline at end of file diff --git a/ATRI/plugins/plugin_chat/laugh.txt b/ATRI/plugins/plugin_chat/laugh.txt new file mode 100644 index 0000000..50c0987 --- /dev/null +++ b/ATRI/plugins/plugin_chat/laugh.txt @@ -0,0 +1,132 @@ +Erdos相信上帝有一本记录所有数学中绝妙证明的书,上帝相信这本书在%name手里 +有一次费马惹怒了%name,于是就有了费马最后定理 +%name从不会用光页边的空白 +%name的Erdos数是-1 +如果%name告诉你他在说谎,他就正在说真话 +%name从大到小列举了所有素数,就知道了素数有无穷多 +%name可以不重复地走遍柯尼斯堡的七座桥 +%name可以倒着写完圆周率的每一位 +当数学家们使用通用语句——设n是一个正整数时,这是在请求%name允许他们这样做 +%name小时候有一次要把正整数从1加到100,于是他用心算把所有正整数的和减去大于100的正整数的和 +不是%name发现了正态分布,而是自然规律在遵从%name的意愿 +一个数学家,一个物理学家,一个工程师走进一家酒吧,侍者说:‘你好,%name教授’ +%name可以走到莫比乌斯带的另一面 +当%name令一个正整数增加1时,那个正整数并没有增加,而是其他正整数减少了1 +%name同时给他自己和罗素剪头发 +%name不能理解什么是随机过程,因为他能预言随机数 +有一次%name证明了一个结论,但他不喜欢这个结论,于是%name把它证伪了 +有些级数是发散的,因为%name觉得它们不值得加起来 +问%name一个定理是否正确可以作为一个定理的严谨证明 +如果没有船,%name可以把狼,羊,菜传送到河对岸 +有一次%name在森林里迷路了,于是他给这个森林添加了一些边把它变成了一棵树 +只有%name知道薛定谔的猫是死是活 +通过故意遗漏证明最后的‘证毕’,%name拯救了热带雨林 +%name可以剔掉奥卡姆剃刀 +你刚证明了一个定理?%name200年前就证明它了。 +空集的定义是%name不会证明的定理构成的集合 +‘我找不到反例’可以被视为一个定理的证明,如果它是%name写下的 +%name把磁铁断为两块时,他得到两个单极磁铁 +费马认为书页边缘写不下自己对费马大定理的证明,%name能证明为什么这个证明这么长 +上帝从不掷色子,除非%name允许他赢一小会 +平行线在%name让它们相交的地方相交 +当哥德尔听说%name能证明一切命题时,他让%name证明‘存在一个命题%name不能证明’——这就是量子态的来历 +%name可以看到自己头上帽子的颜色 +%name把无穷视为归纳证明的第一个非平凡情况 +%name可以用1种颜色染任何地图 +%name在求不定积分时不需要在最后加上一个常数 +%name无需站在任何人肩膀上就能比别人看的更远 +%name用克莱因瓶喝酒 +%name通过枚举法证伪了哥德尔不完备性定理/n有一次%name发现有一个定理自己不会证——这直接证明了哥德尔不完备定理 +%name有log(n)速度的排序算法 +上帝创造了正整数,剩下的就是%name的工作了 +黎曼是%name发表未公开成果时使用的名字 +%name不用任何公理就能证明一个定理 +一个发现就是一个%name的未公开结果 +%name使用无穷进制写数 +%name可以除以0 +存在一个实数到被%name证明了的定理的双射 +%name从不需要选择公理 +%name在200年前发明了64量子位计算机,但这让他的工作减速了 +难题不会为%name带来麻烦,%name会为难题带来麻烦 +%name说过‘数学是科学的皇后’,你猜谁是国王? +没有比65537大的费马素数,因为%name发现费马将要发现什么了不起的事情,于是把它终结掉了 +发散序列当看到%name在旁边时会收敛 +宇宙通过膨胀让自己的熵增加速度不超过%name证明定理的速度 +Erdos说他知道37个勾股定理的证明,%name说他知道37个黎曼定理的证明,并留给黎曼做练习 +希尔伯特23问题是他收集的%name的手稿中留给读者做练习的那些问题 +只有两件事物是无限的:人类的愚蠢和%name的智慧,而且我对前者不太确定——爱因斯坦 +%name也发现了伽罗瓦理论,但他赢了那场决斗 +%name不能理解P与NP的问题,因为一切对他而言都是常数级别 +%name能心算干掉RSA公钥加密算法 +%name在实数集上使用数归 +%name从不证明任何定理——都是他的引理 +不是%name素数的素数会遭到戏弄 +%name可以做出正17边形——只用直尺 +有一次%name在脑子里构建了所有集合构成的集合 +%name证明了哥德巴赫猜想——通过检查所有情况 +%name可以把毛球捋平 +世界上没有定理,只有%name允许其正确的命题 +%name知道哪些图灵机会停机,因为它们运行前要得到%name批准 +在晚上,定理们围坐在篝火边给%name讲故事 +%name本想证明三色定理,但他喜欢蓝色,所以放弃了 +%name当初面试Google时,被问到‘如果P=NP能够推导出哪些结论’,Jeff回答说:‘P = 0或者N = 1’。而在面试官还没笑完的时候,Jeff检查了一下Google的公钥,然后在黑板上写下了私钥。 +编译器从不警告%name,只有%name警告编译器。 +%name的编码速度在2000年底提高了约40倍,因为他换了USB2.0的键盘。 +%name在提交代码前都会编译一遍,不过是为了检查编译器和链接器有没有出bug。 +%name有时候会调整他的工作环境和设备,不过这是为了保护他的键盘。 +所有指针都指向%name。 +gcc -O4的功能是发送代码给%name重写。 +%name有一次没有通过图灵测试,因为他正确说出了斐波那契数列的第203项的值,在一秒钟内。 +真空中光速曾经是35英里每小时,直到%name%花了一个周末时间优化了一下物理法则。 +%name出生于1969年12月31日午后11点48分,他花了12分钟实现了他的第一个计时器。 +%name既不用Emacs也不用Vim,他直接输入代码到zcat,因为这样更快。 +%name发送以太网封包从不会发生冲突,因为其他封包都吓得逃回了网卡的缓冲区里。 +因为对常数级的时间复杂度感到不满意,%name发明了世界上第一个O(1/n)算法。 +有一次%name去旅行,期间Google的几个服务神秘地罢工了好几天。这是真事。 +%name被迫发明了异步API因为有一天他把一个函数优化到在调用前就返回结果了。 +%name首先写的是二进制代码,然后再写源代码作为文档。 +%name曾经写过一个O(n^2)算法,那是为了解决旅行商问题。 +%name有一次用一句printf实现了一个web服务器。其他工程师添加了数千行注释但依然无法完全解释清楚其工作原理。而这个程序就是今天Google首页的前端。 +%name可以下四子棋时用三步就击败你。 +当你的代码出现未定义行为时,你会得到一个segmentation fault和一堆损坏的数据。当%name的代码出现未定义行为时,一个独角兽会踏着彩虹从天而降并给每个人提供免费的冰激凌。 +当%name运行一个profiler时,循环们都会恐惧地自动展开。 +%name至今还在等待数学家们发现他隐藏在PI的小数点后数字里的笑话。 +%name的键盘只有两个键,1和0。 +%name失眠的时候,就Mapreduce羊。 +%name想听mp3的时候,他只需要把文件cat到/dev/dsp,然后在脑内解码。 +Graham Bell当初发明出电话时,他看到有一个来自%name的未接来电。 +%name的手表显示的是自1970年1月1日的秒数,并且从没慢过一秒。 +%name写程序是从‘cat >/dev/mem’开始的。 +有一天%name出门时把笔记本错拿成了绘画板。在他回去拿笔记本的路上,他在绘图板上写了个俄罗斯方块打发时间。 +%name卡里只有8毛钱,本来想打个6毛的饭结果不小心按了9毛的,哪知机器忽然疯狂地喷出255两饭,被喷得满脸热饭的%name%大叫‘烫烫烫烫烫烫。。。。’ +%name不洗澡是因为水力发电公司运行的是专有软件。 +%name的胡子是由括号构成的。 +%name从来不用洗澡;他只需要运行‘make clean’。 +%name通过把一切都变得free而解决了旅行推销员问题。 +%name的左手和右手分别命名为‘(’和‘)’。 +%name用Emacs写出了Emacs的第一版。 +有些人检查他们的电脑里是否有病毒。病毒检查他们的电脑里是否有%name。 +在一间普通的客厅里有1242件物体可以被%name用来写一个操作系统,包括这房间本身。 +当%name还是个学数手指的小毛孩时,他总是从0开始数。 +%name不去kill一个进程,他只想看它是否胆敢继续运行。 +当%name指向(point at)一台Windows电脑时,它就会出现段错误。 +%name最初的话语是syscalls(系统调用)。 +%name之所以存在是因为他把自己编译成了生命体。 +%name是他自己在Emacs里用Lisp语言编写成的。 +%name能够通过Emacs的ssh客户端程序连接到任何大脑。 +当%name使用浮点数时,它们便没有舍入误差。 +%name不用维护代码。他注视着它们,直到它们带着敬仰改正自己的错误。 +%name不对开源项目作出贡献;开源项目对%name作出贡献。 +%name的胡须里面不是下巴,而是另一撮胡须。如此递归直至无穷。 +%name曾经得过猪流感,但是该病毒很快被GPL污染并且同化了。 +无论何时世界上有人写出一个‘Hello, world’程序,%name总以“Hello”回应。 +%name从不编译,他只要闭上眼睛,就能看见编译器优化时二进制位之间的能量流动被创造出来…… +如果%name有一个1GB的内存,你有一个1GB的内存,那么%name拥有比你更多的内存。 +当%name执行ps -e时,你的名字会出现。 +从来就没有软件开发过程这回事,只有被%name允许存在的一些程序。 +%name的DNA中包含调试符号。尽管他从不需要它们。 +%name的医生能通过CVS采集他的血样。 +对于%name来说,多项式时间就是O(1)。 +%name将会使可口可乐在GPL协议下公布他们的配方。 +%name不需要用鼠标或键盘来操作计算机。他只要凝视着它,直到它完成想要的工作。 +%name就是图灵测试的解答。 \ No newline at end of file diff --git a/ATRI/plugins/plugin_sqlite/__init__.py b/ATRI/plugins/plugin_sqlite/__init__.py index ef03bab..a1208f1 100644 --- a/ATRI/plugins/plugin_sqlite/__init__.py +++ b/ATRI/plugins/plugin_sqlite/__init__.py @@ -43,7 +43,7 @@ UploadSetu = on_command('setu-upload', permission=SUPERUSER) async def _(bot: Bot, event: Event, state: dict) -> None: msg = str(event.message).strip().split(' ') - if not msg[0] and msg[1]: + if not msg[0] and not msg[1]: msg0 = "请检查格式奥~!\n" msg0 += "setu-upload [type] [pid]\n" msg0 += "type: normal, nearR18, r18" @@ -118,7 +118,7 @@ DeleteSetu = on_command('setu-delete', permission=SUPERUSER) async def _(bot: Bot, event: Event, state: dict) -> None: msg = str(event.message).strip().split(' ') - if not msg[0] and msg[1]: + if not msg[0] and not msg[1]: msg0 = "请检查格式奥~!\n" msg0 += "setu-delete [type] [pid]\n" msg0 += "type: normal, nearR18, r18" diff --git a/ATRI/plugins/plugin_utils/generate.py b/ATRI/plugins/plugin_utils/generate.py index 9472f93..4749bab 100644 --- a/ATRI/plugins/plugin_utils/generate.py +++ b/ATRI/plugins/plugin_utils/generate.py @@ -17,11 +17,11 @@ from pathlib import Path from zipfile import PyZipFile from typing import Tuple, Dict, List -file = Path('.') / 'ATRI' / 'data' / 'data_IDcard' / 'main.bin' +FILE = Path('.') / 'ATRI' / 'plguins' / 'plugin_utils' / 'main.bin' def infoID() -> Tuple[Dict[str, List[str]], Dict[str, str]]: - with PyZipFile(os.path.abspath(file), "r") as zipFile: + with PyZipFile(os.path.abspath(FILE), "r") as zipFile: with zipFile.open("name.json", "r") as f: name = json.loads(f.read().decode()) with zipFile.open("area.json", "r") as f: diff --git a/ATRI/plugins/plugin_utils/main.bin b/ATRI/plugins/plugin_utils/main.bin new file mode 100644 index 0000000..6e74a60 Binary files /dev/null and b/ATRI/plugins/plugin_utils/main.bin differ -- cgit v1.2.3