Skip to content

Commit aae224c

Browse files
authored
feat: 增加插件插ID;增加模糊查找用户 (#18)
1 parent 043a067 commit aae224c

File tree

7 files changed

+123
-2
lines changed

7 files changed

+123
-2
lines changed

engine/plugins/plugins.go

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

engine/robot/api.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -390,3 +390,14 @@ func (ctx *Ctx) GetMPs(isRefresh ...bool) (MPs, error) {
390390
defer ctx.mutex.Unlock()
391391
return ctx.Bot.self.MPs(isRefresh...)
392392
}
393+
394+
// FuzzyGetByRemarkOrNick 模糊查询好友、群组、公众号
395+
func (ctx *Ctx) FuzzyGetByRemarkOrNick(remarkOrNick string) []*User {
396+
ctx.mutex.Lock()
397+
defer ctx.mutex.Unlock()
398+
var users []*User
399+
friends := ctx.Bot.self.friends.FuzzyGetByRemarkOrNick(remarkOrNick).AsUsers()
400+
groups := ctx.Bot.self.groups.FuzzyGetByRemarkOrNick(remarkOrNick).AsUsers()
401+
mps := ctx.Bot.self.mps.FuzzyGetByRemarkOrNick(remarkOrNick).AsUsers()
402+
return append(append(append(users, friends...), groups...), mps...)
403+
}

engine/robot/relation.go

Lines changed: 64 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package robot
22

3-
import "time"
3+
import (
4+
"strings"
5+
"time"
6+
)
47

58
// Friend 好友对象
69
type Friend struct{ *User }
@@ -83,6 +86,15 @@ func (f Friends) Count() int {
8386
return len(f)
8487
}
8588

89+
// AsUsers 将好友列表转换为User列表
90+
func (f Friends) AsUsers() []*User {
91+
var users []*User
92+
for _, friend := range f {
93+
users = append(users, friend.User)
94+
}
95+
return users
96+
}
97+
8698
// GetByWxId 根据微信ID获取好友
8799
func (f Friends) GetByWxId(wxId string) *Friend {
88100
for _, friend := range f {
@@ -188,6 +200,17 @@ func (f Friends) GetByRemarkOrNicks(remarkOrNicks []string) Friends {
188200
return result
189201
}
190202

203+
// FuzzyGetByRemarkOrNick 根据备注或昵称模糊匹配好友列表
204+
func (f Friends) FuzzyGetByRemarkOrNick(remarkOrNick string) Friends {
205+
var result Friends
206+
for _, friend := range f {
207+
if strings.Contains(friend.Remark, remarkOrNick) || strings.Contains(friend.Nick, remarkOrNick) {
208+
result = append(result, friend)
209+
}
210+
}
211+
return result
212+
}
213+
191214
// SendText 依次发送文本消息, delays为每个好友发送消息的间隔时间, 默认为1秒, 为0时不间隔
192215
func (f Friends) SendText(content string, delays ...time.Duration) error {
193216
for _, friend := range f {
@@ -464,6 +487,15 @@ func (g Groups) Count() int {
464487
return len(g)
465488
}
466489

490+
// AsUsers 将群组列表转换为User列表
491+
func (g Groups) AsUsers() []*User {
492+
users := make([]*User, len(g))
493+
for i, group := range g {
494+
users[i] = group.AsUser()
495+
}
496+
return users
497+
}
498+
467499
// GetByWxId 根据微信ID获取群组
468500
func (g Groups) GetByWxId(wxId string) *Group {
469501
for _, group := range g {
@@ -569,6 +601,17 @@ func (g Groups) GetByRemarkOrNicks(remarkOrNicks []string) Groups {
569601
return result
570602
}
571603

604+
// FuzzyGetByRemarkOrNick 根据备注或昵称模糊匹配好友列表
605+
func (g Groups) FuzzyGetByRemarkOrNick(remarkOrNick string) Groups {
606+
var result Groups
607+
for _, group := range g {
608+
if strings.Contains(group.Remark, remarkOrNick) || strings.Contains(group.Nick, remarkOrNick) {
609+
result = append(result, group)
610+
}
611+
}
612+
return result
613+
}
614+
572615
// SendText 依次发送文本消息, delays为每个好友发送消息的间隔时间, 默认为1秒, 为0时不间隔
573616
func (g Groups) SendText(content string, delays ...time.Duration) error {
574617
for _, group := range g {
@@ -854,6 +897,15 @@ func (m MPs) Count() int {
854897
return len(m)
855898
}
856899

900+
// AsUsers 将当前对象转换为User对象
901+
func (m MPs) AsUsers() []*User {
902+
var users []*User
903+
for _, mp := range m {
904+
users = append(users, mp.AsUser())
905+
}
906+
return users
907+
}
908+
857909
// GetByWxId 根据微信ID获取公众号
858910
func (m MPs) GetByWxId(wxId string) *MP {
859911
for _, mp := range m {
@@ -959,6 +1011,17 @@ func (m MPs) GetByRemarkOrNicks(remarkOrNicks []string) MPs {
9591011
return result
9601012
}
9611013

1014+
// FuzzyGetByRemarkOrNick 根据备注或昵称模糊匹配好友列表
1015+
func (m MPs) FuzzyGetByRemarkOrNick(remarkOrNick string) MPs {
1016+
var result MPs
1017+
for _, mp := range m {
1018+
if strings.Contains(mp.Remark, remarkOrNick) || strings.Contains(mp.Nick, remarkOrNick) {
1019+
result = append(result, mp)
1020+
}
1021+
}
1022+
return result
1023+
}
1024+
9621025
// SendText 依次发送文本消息, delays为每个好友发送消息的间隔时间, 默认为1秒, 为0时不间隔
9631026
func (m MPs) SendText(content string, delays ...time.Duration) error {
9641027
for _, mp := range m {

plugins.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,5 @@
99
- "github.com/yqchilde/wxbot/plugins/plmm" # 漂亮妹妹
1010
- "github.com/yqchilde/wxbot/plugins/weather" # 天气查询
1111
- "github.com/yqchilde/wxbot/plugins/zaobao" # 每日早报
12-
- "github.com/yqchilde/wxbot/plugins/wordcloud" # 聊天热词
12+
- "github.com/yqchilde/wxbot/plugins/wordcloud" # 聊天热词
13+
- "github.com/yqchilde/wxbot/plugins/chaid" # 查wxId

plugins/chaid/README.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
## 介绍
2+
3+
**🔔 注意:以下`[]`符号内代表此处是需要填写内容,并且不需要`[]`符号**
4+
5+
* 插件名:查好友微信ID,支持模糊匹配,
6+
* 权限:仅限配置的管理员使用,不区分私聊和群聊中使用
7+
* 指令:
8+
* [x] `查id [昵称/备注]``id`不区分大小写
9+
10+
## 预览:
11+
12+
![img](preview.jpg)

plugins/chaid/main.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package chaid
2+
3+
import (
4+
"fmt"
5+
6+
"github.com/yqchilde/wxbot/engine/control"
7+
"github.com/yqchilde/wxbot/engine/robot"
8+
)
9+
10+
func init() {
11+
engine := control.Register("chaid", &control.Options{
12+
Alias: "查ID",
13+
Help: "模糊查用户ID\n用法:查ID [昵称/备注]",
14+
})
15+
16+
// 查系统ID,只能由管理员使用
17+
engine.OnRegex(`^查(?i:id) (.+)$`, robot.AdminPermission).SetBlock(true).Handle(func(ctx *robot.Ctx) {
18+
id, reply := ctx.State["regex_matched"].([]string)[1], ""
19+
findUsers := ctx.FuzzyGetByRemarkOrNick(id)
20+
for _, user := range findUsers {
21+
if user.IsFriend() {
22+
reply += fmt.Sprintf("类别:%s\nID:%s\n昵称:%s\n\n", "好友", user.WxId, user.Nick)
23+
} else if user.IsGroup() {
24+
reply += fmt.Sprintf("类别:%s\nID:%s\n昵称:%s\n\n", "群组", user.WxId, user.Nick)
25+
} else if user.IsMP() {
26+
reply += fmt.Sprintf("类别:%s\nID:%s\n昵称:%s\n\n", "公众号", user.WxId, user.Nick)
27+
}
28+
}
29+
ctx.ReplyTextAndAt(reply)
30+
})
31+
}

plugins/chaid/preview.jpg

78.6 KB
Loading

0 commit comments

Comments
 (0)