emm
This commit is contained in:
commit
7b6fa53913
11 changed files with 239 additions and 0 deletions
59
README.md
Normal file
59
README.md
Normal file
|
@ -0,0 +1,59 @@
|
|||
# XZZ
|
||||
小智障,一个拓展 CoolQ HttpApi,快速构建命令式 QQ 机器人的框架.
|
||||
|
||||
## 如何使用
|
||||
|
||||
### 安装配置
|
||||
|
||||
#### 0.自己安装配置好 CoolQ 及其 HttpApi 插件.
|
||||
|
||||
包括上报过滤!
|
||||
|
||||
#### 1.clone 本仓库, 填写 `config.py`
|
||||
|
||||
其中 `APIURL` 为 CoolQ HttpApi 的 URL, `AUTHORIZATION` 为 CoolQ HttpApi 的 `access_token`, `PORT` 和 CoolQ HttpApi `post_url` 中的端口保持一致.
|
||||
|
||||
#### 2.安装依赖, 启动服务
|
||||
|
||||
```shell
|
||||
pip install -r req.txt
|
||||
python main.py
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 拓展功能
|
||||
|
||||
在 `worker` 文件夹中添加 python 模块.文件名即受该文件响应的命令.
|
||||
|
||||
如果要响应 `/ping` 命令的话, 文件名应为 `ping.py`
|
||||
|
||||
|
||||
|
||||
在该模块实现一个 `Ans` 类, 此类继承自 `zzcore`里的 `StdAns` 类.
|
||||
|
||||
在这个类中你可选的重写以下属性和方法:
|
||||
|
||||
`AllowGroup` , int 类型的 list, 在此 list 中的群组可以执行此命令.默认为 [], 全部允许.
|
||||
|
||||
`AllowUser` , int 类型的 list, 在此 list 中的QQ号可以执行此命令.默认为 [], 全部允许.
|
||||
|
||||
`AllowRole` , string 类型的 list, 在此 list 中的角色可以执行此命令.默认为 [], 全部允许, 可选值为 owner、admin、member , 对应 群主、管理员、群员 三种角色.
|
||||
|
||||
`GroupNotAllow`、`UserNotAllow`、`RoleNotAllow` 三个字符串, 分别为当用户因为以上三个原因被拒绝使用本命令时的回复, 自己去看默认值吧..
|
||||
|
||||
`GETMSG()` 方法, 该方法应当返回一个字符串, 在此方法中你可以借助以下变量:
|
||||
|
||||
`self.uid `发起命令的用户的 QQ , int 类型
|
||||
|
||||
`self.gid` 发起命令的群组的群号, int 类型
|
||||
|
||||
`self.role` 发起命令的用户的角色,可能值 'owner'、'admin'、'member'
|
||||
|
||||
`self.parms` 命令详情, string 类型的 list. 看例子
|
||||
|
||||
如果用户发送了 /ping xxx 12
|
||||
|
||||
那么 self.parms 为 ['ping', 'xxx', '12']
|
||||
|
||||
self.raw_msg 详见 example.json
|
7
config.py
Normal file
7
config.py
Normal file
|
@ -0,0 +1,7 @@
|
|||
ALLWORKERS = ['ping','yiyan','mc',]
|
||||
|
||||
APIURL = 'http://127.0.0.1:5700/'
|
||||
|
||||
AUTHORIZATION = ''
|
||||
|
||||
PORT = 5580
|
25
exmple.json
Normal file
25
exmple.json
Normal file
|
@ -0,0 +1,25 @@
|
|||
{
|
||||
"anonymous": "None",
|
||||
"font": 1501544,
|
||||
"group_id": 959613000,
|
||||
"message": "/ping",
|
||||
"message_id": 2071,
|
||||
"message_type": "group",
|
||||
"post_type": "message",
|
||||
"raw_message": "/ping",
|
||||
"self_id": 161795000,
|
||||
"sender": {
|
||||
"age": 18,
|
||||
"area": "济宁",
|
||||
"card": "",
|
||||
"level": "活跃",
|
||||
"nickname": "SiHuan",
|
||||
"role": "owner",
|
||||
"sex": "unknown",
|
||||
"title": "",
|
||||
"user_id": 1318000000
|
||||
},
|
||||
"sub_type": "normal",
|
||||
"time": 1582805370,
|
||||
"user_id": 1318000000
|
||||
}
|
14
main.py
Normal file
14
main.py
Normal file
|
@ -0,0 +1,14 @@
|
|||
from flask import Flask, request
|
||||
from config import PORT
|
||||
from route import ZZRouter
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
@app.route('/', methods=['POST'])
|
||||
def whenmsg():
|
||||
ZZRouter(request.get_json())
|
||||
return ''
|
||||
|
||||
app.run(host='0.0.0.0', port=PORT)
|
||||
if __name__ == '__main__':
|
||||
app.run()
|
19
req.txt
Normal file
19
req.txt
Normal file
|
@ -0,0 +1,19 @@
|
|||
astroid==2.3.3
|
||||
certifi==2019.11.28
|
||||
chardet==3.0.4
|
||||
Click==7.0
|
||||
Flask==1.1.1
|
||||
idna==2.9
|
||||
isort==4.3.21
|
||||
itsdangerous==1.1.0
|
||||
Jinja2==2.11.1
|
||||
lazy-object-proxy==1.4.3
|
||||
MarkupSafe==1.1.1
|
||||
mccabe==0.6.1
|
||||
pylint==2.4.4
|
||||
requests==2.23.0
|
||||
six==1.14.0
|
||||
typed-ast==1.4.1
|
||||
urllib3==1.25.8
|
||||
Werkzeug==1.0.0
|
||||
wrapt==1.11.2
|
20
route.py
Normal file
20
route.py
Normal file
|
@ -0,0 +1,20 @@
|
|||
from worker import emmm
|
||||
|
||||
def ZZRouter(data):
|
||||
uid = data['user_id']
|
||||
gid = data['group_id']
|
||||
role = data['sender']['role']
|
||||
parms = str.split(data['message'][1:])
|
||||
worker = parms[0]
|
||||
|
||||
try:
|
||||
package = __import__(name='worker.'+ worker, fromlist=worker)
|
||||
Ans_ = getattr(package,'Ans')
|
||||
except:
|
||||
Ans_ = emmm.Ans
|
||||
|
||||
Ans = Ans_(parms,uid,gid,role,data)
|
||||
Message = Ans.CheckPermission()
|
||||
if Message == 0:
|
||||
Message = Ans.GETMSG()
|
||||
Ans.sendmsg(Message)
|
8
worker/emmm.py
Normal file
8
worker/emmm.py
Normal file
|
@ -0,0 +1,8 @@
|
|||
from zzcore import StdAns
|
||||
|
||||
class Ans(StdAns):
|
||||
def GETMSG(self):
|
||||
if self.parms:
|
||||
return '咱也不知道' + self.parms[0] + '是啥呢~'
|
||||
else:
|
||||
return '汝再调戏咱,咱可就生气了!!'
|
14
worker/mc.py
Normal file
14
worker/mc.py
Normal file
|
@ -0,0 +1,14 @@
|
|||
from zzcore import StdAns
|
||||
from subprocess import getoutput
|
||||
|
||||
class Ans(StdAns):
|
||||
def GETMSG(self):
|
||||
if self.parms[1] == 'status':
|
||||
return getoutput('spigot status')
|
||||
AllowCmd = ['list','tps']
|
||||
if self.parms[1] in AllowCmd:
|
||||
cmd = 'spigot command '
|
||||
cmd = cmd + self.parms[1]
|
||||
return getoutput(cmd)
|
||||
else:
|
||||
return self.parms[1] + ' 是暂时不被允许的命令!'
|
5
worker/ping.py
Normal file
5
worker/ping.py
Normal file
|
@ -0,0 +1,5 @@
|
|||
from zzcore import StdAns
|
||||
|
||||
class Ans(StdAns):
|
||||
def GETMSG(self):
|
||||
return 'Pong!'
|
22
worker/yiyan.py
Normal file
22
worker/yiyan.py
Normal file
|
@ -0,0 +1,22 @@
|
|||
from zzcore import StdAns
|
||||
import requests
|
||||
|
||||
class Ans(StdAns):
|
||||
def GETMSG(self):
|
||||
url = 'https://v1.hitokoto.cn/?encode=text&'
|
||||
cmdlst = {'动画': 'a', '漫画': 'b', '游戏': 'c', '文学': 'd', '原创': 'e', '来自网络': 'f',
|
||||
'其他': 'g', '影视': 'h', '诗词': 'i', '网易云': 'j', '哲学': 'k', '抖机灵': 'l'}
|
||||
try:
|
||||
cmd = self.parms[1]
|
||||
except :
|
||||
cmd = ''
|
||||
if cmd == '帮助':
|
||||
msg = '您可以使用以下参数:\n 动画,漫画,游戏,文学,原创,来自网络,其他,影视,诗词,网易云,哲学,抖机灵'
|
||||
else:
|
||||
if cmd == '':
|
||||
msg = requests.get(url).text
|
||||
elif cmd in cmdlst:
|
||||
msg = requests.get(url+cmdlst[cmd]).text
|
||||
else:
|
||||
msg = '我不知道 ' + cmd + ' 这个参数,你可以使用"/yiyan 帮助"来获取帮助'
|
||||
return msg
|
46
zzcore.py
Normal file
46
zzcore.py
Normal file
|
@ -0,0 +1,46 @@
|
|||
import requests
|
||||
import json
|
||||
from config import APIURL, ALLWORKERS, AUTHORIZATION
|
||||
from worker import emmm
|
||||
|
||||
class StdAns():
|
||||
AllowGroup = []
|
||||
AllowUser = []
|
||||
AllowRole = []
|
||||
GroupNotAllow = '汝所在的群组不被允许这样命令咱呢.'
|
||||
UserNotAllow = '汝不被允许呢.'
|
||||
RoleNotAllow = '汝的角色不被允许哦.'
|
||||
|
||||
def __init__(self,parms,uid,gid,role,raw_msg):
|
||||
self.parms = parms
|
||||
self.uid = uid
|
||||
self.gid = gid
|
||||
self.role = role
|
||||
self.raw_msg = raw_msg
|
||||
|
||||
|
||||
def CheckPermission(self):
|
||||
if self.AllowGroup and self.gid not in self.AllowGroup:
|
||||
return self.GroupNotAllow
|
||||
if self.AllowUser and self.uid not in self.AllowUser:
|
||||
return self.UserNotAllow
|
||||
if self.AllowRole and self.role not in self.AllowRole:
|
||||
return self.RoleNotAllow
|
||||
return 0
|
||||
|
||||
def GETMSG(self):
|
||||
return self.__module__ +'的话,咱已经知道了,但是还在学习呢!'
|
||||
|
||||
def sendmsg(self,msg):
|
||||
url = APIURL + "send_msg"
|
||||
Headers = {
|
||||
'content-type': 'application/json',
|
||||
'Authorization':'Bearer ' + AUTHORIZATION
|
||||
}
|
||||
|
||||
data = {
|
||||
'message_type' : 'group',
|
||||
'group_id' : self.gid,
|
||||
'message': msg
|
||||
}
|
||||
requests.post(url = url, data = json.dumps(data),headers = Headers)
|
Loading…
Reference in a new issue