Skip to content

Commit a983897

Browse files
author
MZI
committed
Transfer the haruno-plugin-turing from github.com/haruno-bot/haruno
1 parent 15d4d48 commit a983897

File tree

4 files changed

+188
-0
lines changed

4 files changed

+188
-0
lines changed

config.example.toml

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
[turing]
2+
version = "0.0.1"
3+
name = "haruno-plugin-turing"
4+
groupNums = [123456, 123456]
5+
token = "123456789abcdef"

config.go

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package turing
2+
3+
// Config 插件总的入口
4+
type Config struct {
5+
Turing Cfg `toml:"turing"`
6+
}
7+
8+
// Cfg 插件配置信息
9+
type Cfg struct {
10+
Name string `toml:"name"`
11+
Token string `toml:"token"`
12+
Version string `toml:"version"`
13+
GroupNums []int64 `toml:"groupNums"`
14+
}

turing.go

+162
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
1+
package turing
2+
3+
import (
4+
"encoding/json"
5+
"fmt"
6+
"log"
7+
"net/url"
8+
"strconv"
9+
"strings"
10+
11+
"github.com/haruno-bot/haruno/logger"
12+
13+
"github.com/haruno-bot/haruno/clients"
14+
15+
"github.com/BurntSushi/toml"
16+
17+
"github.com/haruno-bot/haruno/coolq"
18+
)
19+
20+
var groupNums = make(map[int64]bool)
21+
var token string
22+
var client = clients.NewHTTPClient("")
23+
var name string
24+
var version string
25+
26+
// 没有问题的回答
27+
var unReply = coolq.NewTextSection("我听不清,你在说什么呀?")
28+
29+
// Turing 结合图灵机器人api的插件
30+
type Turing struct {
31+
coolq.Plugin
32+
}
33+
34+
// Name 插件名字+版本号
35+
func (_plugin Turing) Name() string {
36+
return fmt.Sprintf("%s@%s", name, version)
37+
}
38+
39+
func (_plugin *Turing) loadConfig() error {
40+
cfg := new(Config)
41+
toml.DecodeFile("cofig.toml", cfg)
42+
_, err := toml.DecodeFile("config.toml", cfg)
43+
if err != nil {
44+
return err
45+
}
46+
pcfg := cfg.Turing
47+
name = pcfg.Name
48+
version = pcfg.Version
49+
token = pcfg.Token
50+
for _, groupID := range pcfg.GroupNums {
51+
groupNums[groupID] = true
52+
}
53+
return nil
54+
}
55+
56+
// Filters 过滤酷Q上报事件用,利于提升插件性能
57+
func (_plugin Turing) Filters() map[string]coolq.Filter {
58+
filters := make(map[string]coolq.Filter)
59+
filters["turing"] = func(event *coolq.CQEvent) bool {
60+
if event.PostType != "message" ||
61+
event.MessageType != "group" ||
62+
event.SubType != "normal" {
63+
return false
64+
}
65+
if !groupNums[event.GroupID] {
66+
return false
67+
}
68+
msg := new(coolq.Message)
69+
err := coolq.Unmarshal([]byte(event.Message), msg)
70+
if err != nil {
71+
fmt.Println(err)
72+
}
73+
for _, section := range *msg {
74+
if section.Type == "at" {
75+
qqNum, _ := strconv.ParseInt(section.Data["qq"], 10, 64)
76+
if qqNum == event.SelfID {
77+
return true
78+
}
79+
}
80+
}
81+
return false
82+
}
83+
return filters
84+
}
85+
86+
// Handlers 处理酷Q上报事件用
87+
func (_plugin Turing) Handlers() map[string]coolq.Handler {
88+
handlers := make(map[string]coolq.Handler)
89+
handlers["turing"] = func(event *coolq.CQEvent) {
90+
msg := new(coolq.Message)
91+
err := coolq.Unmarshal([]byte(event.Message), msg)
92+
if err != nil {
93+
return
94+
}
95+
var question string
96+
for _, section := range *msg {
97+
if section.Type == "text" {
98+
question = strings.TrimSpace(section.Data["text"])
99+
if len(question) > 0 {
100+
break
101+
}
102+
}
103+
}
104+
reply := coolq.NewMessage()
105+
replto := coolq.NewSection("at", map[string]string{
106+
"qq": fmt.Sprintf("%d", event.UserID),
107+
})
108+
reply = coolq.AddSection(reply, replto)
109+
110+
if len(question) > 0 {
111+
qsURL := fmt.Sprintf("http://www.tuling123.com/openapi/api?key=%s&info=%s&userid=%d", token, url.QueryEscape(question), event.UserID)
112+
res, err := client.Get(qsURL)
113+
if err != nil {
114+
errMsg := err.Error()
115+
fmt.Println(errMsg)
116+
logger.Service.AddLog(logger.LogTypeError, errMsg)
117+
return
118+
}
119+
defer res.Body.Close()
120+
ans := new(Answer)
121+
err = json.NewDecoder(res.Body).Decode(ans)
122+
if err != nil {
123+
errMsg := err.Error()
124+
fmt.Println(errMsg)
125+
logger.Service.AddLog(logger.LogTypeError, errMsg)
126+
return
127+
}
128+
var text string
129+
if ans.Code == 100000 {
130+
text = ans.Text
131+
} else {
132+
text = "?"
133+
}
134+
reply = coolq.AddSection(reply, coolq.NewTextSection(text))
135+
replyMsg := string(coolq.Marshal(reply))
136+
coolq.Client.SendGroupMsg(event.GroupID, replyMsg)
137+
logMsg := fmt.Sprintf("向酷Q发送:%s", replyMsg)
138+
log.Println(logMsg)
139+
logger.Service.AddLog(logger.LogTypeSuccess, logMsg)
140+
} else {
141+
reply = coolq.AddSection(reply, unReply)
142+
replyMsg := string(coolq.Marshal(reply))
143+
coolq.Client.SendGroupMsg(event.GroupID, replyMsg)
144+
}
145+
}
146+
return handlers
147+
}
148+
149+
// Load 加载插件
150+
func (_plugin Turing) Load() error {
151+
return _plugin.loadConfig()
152+
}
153+
154+
// Loaded 加载完成
155+
func (_plugin Turing) Loaded() {
156+
logMsg := fmt.Sprintf("%s已成功加载", _plugin.Name())
157+
log.Println(logMsg)
158+
logger.Service.AddLog(logger.LogTypeInfo, logMsg)
159+
}
160+
161+
// Instance 实体
162+
var Instance = Turing{}

type.go

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package turing
2+
3+
// Answer 图灵机器人返回格式
4+
type Answer struct {
5+
Code int `json:"code"`
6+
Text string `json:"text"`
7+
}

0 commit comments

Comments
 (0)