Merge pull request #2 from sihuan/master

合并
This commit is contained in:
xmengnet 2021-09-22 17:55:12 +08:00 committed by GitHub
commit 2da71764f7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 295 additions and 5 deletions

View file

@ -1,17 +1,36 @@
# XZZ # XZZ
小智障,一个拓展 CoolQ HttpApi,快速构建命令式 QQ 机器人的框架. 小智障,一个拓展 go-cqhttp ,快速构建命令式 QQ 机器人的框架.
## 如何使用 ## 如何使用
> 阅读完以下内容后可以参考我的 blog -> [部署一个自己的智障机器人](https://blog.sakuya.love/archives/xzz/)
> 其中 go-cqhttp 配置文件部分格式可能有点过时,但是不影响理解🙈
### 安装配置 ### 安装配置
#### 0.自己安装配置好 CoolQ 及其 HttpApi 插件. #### 0.自己安装配置好 go-cqhttp.
包括上报过滤! `XZZ` 需要的配置有
- 相对应的上报地址与 `go-cqhttp` api 地址
- 上报消息类型为 `array`
- 上报消息过滤为以下条件
```json
{
"message_type": "group",
"raw_message":{
".regex":"^\/"
},
"user_id":{
".neq": 80000000
}
}
```
#### 1.clone 本仓库, 填写 `config.py` #### 1.clone 本仓库, 填写 `config.py`
其中 `APIURL` 为 CoolQ HttpApi 的 URL, `AUTHORIZATION` 为 CoolQ HttpApi 的 `access_token`, `PORT` 和 CoolQ HttpApi `post_url` 中的端口保持一致. 其中 `APIURL`go-cqhttp 的 api 地址, `AUTHORIZATION` 为 go-cqhttp 的 `access_token`, `PORT` 和 go-cqhttp 反向 http post 设置的端口保持一致.
#### 2.安装依赖, 启动服务 #### 2.安装依赖, 启动服务
@ -21,7 +40,6 @@ python main.py
``` ```
### 拓展功能 ### 拓展功能
`worker` 文件夹中添加 python 模块.文件名即受该文件响应的命令. `worker` 文件夹中添加 python 模块.文件名即受该文件响应的命令.

16
sample_config.py Normal file
View file

@ -0,0 +1,16 @@
from config import BINGKEY
ALLWORKERS = ['ping','yiyan','mc',]
APIURL = 'http://127.0.0.1:5700/'
AUTHORIZATION = ''
HOST = '0.0.0.0'
PORT = 5580
REMOTE_MC_URL = ''
BINGKEY = ''

29
worker/hhsh.py Normal file
View file

@ -0,0 +1,29 @@
from zzcore import StdAns, mysakuya
import requests
class Ans(StdAns):
def GETMSG(self):
if len(self.parms) < 2:
return '不加参数是坏文明!'
if mysakuya(self, self.raw_msg['raw_message']) == False:
return "不许你们说咲夜!!"
msg = f"[CQ:reply,id={self.raw_msg['message_id']}]"
r = nbnhhsh(self.parms[1])
try:
msg += f'''{(str(r['trans'])[1:-1]).replace("'","").replace(","," ")}'''
except:
msg += "没查到("
return msg
def nbnhhsh(text):
url = 'https://lab.magiconch.com/api/nbnhhsh/guess'
data = {
'text': text,
}
r = requests.post(url=url, data=data).json()
return r[0]

50
worker/lsp.py Normal file
View file

@ -0,0 +1,50 @@
from zzcore import StdAns, mysakuya
import requests
from config import LOLIKEY
class Ans(StdAns):
AllowGroup = [959613860, 125733077]
def GETMSG(self):
if self.parms[-1] == 'p':
flash = ''
self.parms = self.parms[0:-1]
else:
flash = ',type=flash'
if len(self.parms) == 1:
code, picurl, pid = getsetu()
else:
keyword = self.parms[1]
if mysakuya(self, keyword) == False:
return "不许你们看咲夜的涩图!!"
code, picurl, pid = getsetu(keyword)
if code == 0:
self.sendmsg(f'[CQ:reply,id={self.mid}]Pixiv ID:{pid}')
return f'[CQ:image,file={picurl}{flash}]'
else:
return f'[CQ:reply,id={self.mid}] 什么东西出错了code:{code}'
def getsetu(keyword=''):
url = 'https://api.lolicon.app/setu/'
params = {
'apikey': LOLIKEY,
'keyword': keyword,
}
try:
resp = requests.get(url=url, params=params, timeout=5).json()
except:
return 500, '',0
picurl = ''
pid = 0
if resp['code'] == 0:
picurl = "https://r.zjuyk.site/" + resp['data'][0]['url']
pid = resp['data'][0]['pid']
return resp['code'], picurl, pid

27
worker/mner.py Normal file
View file

@ -0,0 +1,27 @@
import requests
from zzcore import StdAns
class Ans(StdAns):
def GETMSG(self):
if len(self.parms) < 2:
msg = '请输入包名 如:/mner yjun'
return msg
else:
msg = ''
req = requests.get(
url='https://aur.archlinux.org/rpc/?v=5&type=search&by=maintainer&arg=' + self.parms[1]).json()
count = req['resultcount']
if count != 0:
msg += '工具人 ' + self.parms[1] + ' 打包了' + str(count) + '个软件\n'
soft=''
if count < 5:
# soft = list()
for i in range(count):
soft= req['results'][i]['Name']
else:
for i in range(5):
soft+=req['results'][i]['Name']+'\n'
soft+='....'
return msg+soft

72
worker/pkg.py Normal file
View file

@ -0,0 +1,72 @@
import requests
import time
from zzcore import StdAns
class Ans(StdAns):
# AllowGroup = [874769998,596678277,7343311]
def GETMSG(self):
if len(self.parms) < 2:
msg = '请输入包名 如:/pkg linux testing 查询 Testing 的 linux 软件'
return msg
elif self.parms[1] == 'help':
msg = '使用 /pkg 包名 查询Core, Extra, Testing, Multilib, Multilib-Testing, ' \
'Community, Community-Testing仓库以及AUR的软件 '
return msg
else:
repo = str()
try:
if len(self.parms) > 1:
repo = '&repo=' + self.parms[2].capitalize()
except:
print('repo empty')
def timeTrans(value):
temp = time.localtime(int(value))
timeValue = time.strftime("%Y-%m-%d %H:%M:%S", temp)
return timeValue[:16]
req = requests.get(
url='https://archlinux.org/packages/search/json/?name=' + self.parms[1] + repo).json()
if not req['results']:
req = requests.get(
url='https://aur.tuna.tsinghua.edu.cn/rpc/?v=5&type=info&arg=' + self.parms[1]).json()
if req['resultcount'] == 0:
req = requests.get(
url='https://aur.tuna.tsinghua.edu.cn/rpc/?v=5&type=search&arg=' + self.parms[1]).json()
# print(req)
if req['resultcount'] > 0:
name = '包名:' + req['results'][0]['Name']
# pkgname = req['results'][0]['pkgname']
version = '版本:' + req['results'][0]['Version']
description = '描述:' + req['results'][0]['Description']
maintainer = '维护:' + str(req['results'][0]['Maintainer'])
numvotes = '投票:' + str(req['results'][0]['NumVotes'])
updatetime = '更新日期:' + timeTrans(req['results'][0]['LastModified'])
outofdate = req['results'][0]['OutOfDate']
if outofdate is not None:
outofdate=timeTrans(outofdate)
updatetime = updatetime + '\n过期日期:' + outofdate
url = req['results'][0]['URL']
if url is None:
url = '链接None'
else:
url = '链接:' + url
msg = '仓库AUR\n' + name + '\n' + version + '\n' + description + '\n' + maintainer \
+ '\n' + numvotes + '\n' + updatetime + '\n' + url
return msg
else:
repo = req['results'][0]['repo']
pkgname = req['results'][0]['pkgname']
pkgver = req['results'][0]['pkgver'] + '\n'
pkgdesc = req['results'][0]['pkgdesc']
url = req['results'][0]['url']
updatetime = req['results'][0]['last_update']
updatetime = updatetime.replace('T', ' ')
updatetime = updatetime[0:16] + '\n'
# return repo,pkgname,pkgver,pkgdesc,url
# print('仓库:' + repo + '\n包名' + pkgname + '\n版本' + pkgver + '\n描述' + pkgdesc + '\n上游' + url + '\n')
msg = '仓库:' + repo + '\n包名:' + pkgname + '\n版本:' + pkgver + '描述:' + pkgdesc + '\n更新日期:' \
+ updatetime + '上游:' + url
return msg

78
worker/zhaoan.py Normal file
View file

@ -0,0 +1,78 @@
from zzcore import StdAns
import requests
import sxtwl
from datetime import datetime
from config import HFWEATHERKEY
class Ans(StdAns):
def GETMSG(self):
msg = f'早上好,今天是{calendar()}\n\n'
msg += getWeather() + '\n\n'
# t = requests.get('https://v1.hitokoto.cn/?c=k&encode=text').text
t =("只要不失去你的崇高,整个世界都会向你敞开")
msg += t
return msg
def getWeather(id='101120206'):
def wemoji(text):
if '' in text:
return text + '🌨'
if '' in text:
return text + '🌧️'
if '' in text:
return text + ''
if '' in text:
return text + '🌤'
if '' in text:
return text + '☀️'
return text
url = 'https://devapi.heweather.net/v7/weather/3d'
params = {
'location': id,
'key': HFWEATHERKEY,
}
r = requests.get(url=url, params=params).json()
tdw = r['daily'][0]
# ndw = r['daily'][1]
# weather = f"今日日间{wemoji(tdw['textDay'])},温度{tdw['tempMin']}{tdw['tempMax']}℃,{tdw['windDirDay']}{tdw['windScaleDay']}级;夜间{wemoji(tdw['textNight'])}{tdw['windDirNight']}{tdw['windScaleNight']}级。明日日间{wemoji(ndw['textDay'])},温度{ndw['tempMin']}{ndw['tempMax']}℃。"
weather = f"今日日间{wemoji(tdw['textDay'])},温度{tdw['tempMin']}{tdw['tempMax']}℃,{tdw['windDirDay']}{tdw['windScaleDay']}级;夜间{wemoji(tdw['textNight'])}{tdw['windDirNight']}{tdw['windScaleNight']}级。"
if float(tdw['precip']) > 0:
weather += '\n记得收好衣服,出门带伞~'
return weather
def calendar():
# 可选 教学、寒假、暑假 等
NowStatus = "暑假"
# 开始周次是今年的第几周
StartWeek = 28
# 今年考研开始日期
KaoYanDate = datetime(2021, 12, 25)
ymc = ["", "", "", "", "", "", "", "", "", "", "", ""]
rmc = ["初一", "初二", "初三", "初四", "初五", "初六", "初七", "初八", "初九", "初十", "十一", "十二", "十三", "十四", "十五",
"十六", "十七", "十八", "十九", "二十", "廿一", "廿二", "廿三", "廿四", "廿五", "廿六", "廿七", "廿八", "廿九", "三十", "卅一"]
zmc = ["", "", "", "", "", "", ""]
nowdate = datetime.now()
djs = (KaoYanDate - nowdate).days -1
y = nowdate.year
m = nowdate.month
d = nowdate.day
zc = int(nowdate.strftime("%W")) - StartWeek
z = zmc[nowdate.weekday()]
lunar = sxtwl.Lunar()
lunarday = lunar.getDayBySolar(y, m, d)
lunardaychinese = f"{ymc[lunarday.Lmc]}{rmc[lunarday.Ldi]}"
if lunarday.Lleap:
lunardaychinese = "" + lunardaychinese
cal = f"{m}{d}日,{lunardaychinese}{NowStatus}{zc}周,星期{z}\n\n距离 2022 考研还有 {djs}"
return cal