Compare commits

...

16 Commits

Author SHA1 Message Date
李寻欢
f396a7f674 Merge pull request 'hotfix' (#67) from hotfix into main
Reviewed-on: https://gitee.ltd/lxh/go-wxhelper/pulls/67
2024-07-05 09:17:03 +08:00
李寻欢
42ac0a5ae0 Merge remote-tracking branch 'origin/hotfix' into hotfix 2024-07-05 09:16:49 +08:00
李寻欢
a905c3ca99 推送邀请加群消息到配置的用户 2024-07-05 09:16:43 +08:00
李寻欢
c881a1c395 🎨 新闻消息推送格式优化 2024-07-05 09:06:38 +08:00
李寻欢
df05070e0b Merge pull request '🐛 Fix a bug.' (#66) from hotfix into main
Reviewed-on: https://gitee.ltd/lxh/go-wxhelper/pulls/66
2024-07-04 21:18:06 +08:00
李寻欢
703e183424 🐛 Fix a bug. 2024-07-04 21:17:29 +08:00
李寻欢
5afe50975b Merge pull request '🐛 修复修改 AI 模型和角色无法设置为默认的 BUG' (#65) from hotfix into main
Reviewed-on: https://gitee.ltd/lxh/go-wxhelper/pulls/65
2024-07-04 19:42:42 +08:00
李寻欢
83458e649a 🐛 修复修改 AI 模型和角色无法设置为默认的 BUG 2024-07-04 19:41:42 +08:00
李寻欢
28f111c812 Merge pull request '🔥 修改每日早报接口 Token 为手动配置' (#64) from hotfix into main
Reviewed-on: https://gitee.ltd/lxh/go-wxhelper/pulls/64
2024-06-24 08:40:53 +08:00
李寻欢
0adc2ff628 🔥 修改每日早报接口 Token 为手动配置 2024-06-24 08:40:24 +08:00
李寻欢
4c08c5caeb Merge pull request '🐛 Fix a bug.' (#63) from hotfix into main
Reviewed-on: https://gitee.ltd/lxh/go-wxhelper/pulls/63
2024-06-22 08:50:01 +08:00
李寻欢
de278f25e9 🐛 Fix a bug. 2024-06-22 08:49:28 +08:00
李寻欢
4fcf1779de Merge pull request '🎨 页面美化' (#62) from hotfix into main
Reviewed-on: https://gitee.ltd/lxh/go-wxhelper/pulls/62
2024-06-19 14:21:33 +08:00
李寻欢
f39f46bfbf 🎨 页面美化 2024-06-19 14:21:07 +08:00
李寻欢
f946044f13 Merge pull request '🎨 页面美化' (#61) from hotfix into main
Reviewed-on: https://gitee.ltd/lxh/go-wxhelper/pulls/61
2024-06-19 08:42:35 +08:00
李寻欢
5819ac3c04 🎨 页面美化 2024-06-19 08:41:58 +08:00
11 changed files with 94 additions and 11 deletions

View File

@@ -19,8 +19,8 @@ type changeStatusParam struct {
// changeUseAiModelParam
// @description: 修改使用的AI模型用的参数集
type changeUseAiModelParam struct {
WxId string `json:"wxid" binding:"required"` // 群Id或微信Id
Model string `json:"model" binding:"required"` // 模型代码
WxId string `json:"wxid" binding:"required"` // 群Id或微信Id
Model string `json:"model"` // 模型代码
}
// autoClearMembers

View File

@@ -1,4 +1,7 @@
system:
# 每日新闻接口 Token
# 获取地址: https://admin.alapi.cn/api_manager/token_manager
alApiToken: xxx
# 添加新好友或群之后通知给指定的人
newFriendNotify:
enable: true

View File

@@ -2,6 +2,7 @@ package config
// 系统配置
type system struct {
AlApiToken string `json:"alApiToken" yaml:"alApiToken"` // AL API Token
NewFriendNotify newFriendNotify `json:"newFriendNotify" yaml:"newFriendNotify"` // 新好友通知
DefaultRule defaultRule `json:"defaultRule" yaml:"defaultRule"` // 默认规则
}

View File

@@ -32,6 +32,39 @@ type systemMsgDataXml struct {
Type string `xml:"type,attr"`
}
// appMsgDataXml
// @description: 微信app消息的xml结构
type appMsgDataXml struct {
XMLName xml.Name `xml:"msg"`
Text string `xml:",chardata"`
AppMsg struct {
Text string `xml:",chardata"`
Appid string `xml:"appid,attr"`
SdkVer string `xml:"sdkver,attr"`
Title string `xml:"title"`
Des string `xml:"des"`
Action string `xml:"action"`
Type string `xml:"type"`
ShowType string `xml:"showtype"`
Content string `xml:"content"`
URL string `xml:"url"`
ThumbUrl string `xml:"thumburl"`
LowUrl string `xml:"lowurl"`
AppAttach struct {
Text string `xml:",chardata"`
TotalLen string `xml:"totallen"`
AttachId string `xml:"attachid"`
FileExt string `xml:"fileext"`
} `xml:"appattach"`
ExtInfo string `xml:"extinfo"`
} `xml:"appmsg"`
AppInfo struct {
Text string `xml:",chardata"`
Version string `xml:"version"`
AppName string `xml:"appname"`
} `xml:"appinfo"`
}
// atMsgDataXml
// @description: 微信@消息的xml结构
type atMsgDataXml struct {
@@ -163,3 +196,20 @@ func (m Message) CleanContentStartWith(prefix string) bool {
return strings.HasPrefix(content, prefix)
}
// IsInvitationJoinGroup
// @description: 是否是邀请入群消息
// @receiver m
// @return bool 是否是邀请入群消息
// @return string 邀请入群消息内容
func (m Message) IsInvitationJoinGroup() (flag bool, str string) {
if m.Type == types.MsgTypeApp {
// 解析xml
var md appMsgDataXml
if err := xml.Unmarshal([]byte(m.Content), &md); err != nil {
return
}
return md.AppMsg.Type == "5" && strings.Contains(md.AppMsg.Content, "邀请你加入群聊"), md.AppMsg.Des
}
return
}

View File

@@ -3,8 +3,10 @@ package mq
import (
"encoding/json"
"go-wechat/common/current"
"go-wechat/config"
"go-wechat/model"
"go-wechat/types"
"go-wechat/utils"
"log"
"strings"
)
@@ -37,6 +39,16 @@ func parse(msg []byte) {
}
log.Printf("收到新微信消息\n消息来源: %s\n群成员: %s\n消息类型: %v\n消息内容: %s", m.FromUser, m.GroupUser, m.Type, m.Content)
// 如果是邀请进群,推送到配置的用户
if flag, dec := m.IsInvitationJoinGroup(); flag {
for _, user := range config.Conf.System.NewFriendNotify.ToUser {
if user != "" {
// 发送一条新消息
utils.SendMessage(user, "", dec, 0)
}
}
}
// 插件不为空,开始执行
if p := current.GetRobotMessageHandler(); p != nil {
p(&m)

View File

@@ -38,7 +38,7 @@ func ClearGroupUser() {
memberMap[member.Nickname] = member.LastActive.Format("2006-01-02 15:04:05")
}
// 调用接口
utils.DeleteGroupMember(group.Wxid, strings.Join(deleteIds, ","), 0)
utils.DeleteGroupMember(group.Wxid, strings.Join(deleteIds, ","), 0, false)
// 发送通知到群里
ms := make([]string, 0)
for k, v := range memberMap {

View File

@@ -24,7 +24,7 @@ func DailyNews() {
return
}
newsStr := fmt.Sprintf("#每日早报\n\n又是新的一天了让我们康康一觉醒来世界又发生了哪些变化~\n\n%s", strings.Join(news, "\n"))
newsStr := fmt.Sprintf("#每日早报\n\n又是新的一天了让我们康康一觉醒来世界又发生了哪些变化~\n\n%s", strings.Join(news, "\n \n"))
// 循环发送新闻
for _, group := range groups {

View File

@@ -3,8 +3,10 @@ package tcpserver
import (
"encoding/json"
"go-wechat/common/current"
"go-wechat/config"
"go-wechat/model"
"go-wechat/types"
"go-wechat/utils"
"log"
"net"
"strings"
@@ -38,6 +40,16 @@ func parse(remoteAddr net.Addr, msg []byte) {
}
log.Printf("%s\n消息来源: %s\n群成员: %s\n消息类型: %v\n消息内容: %s", remoteAddr, m.FromUser, m.GroupUser, m.Type, m.Content)
// 如果是邀请进群,推送到配置的用户
if flag, dec := m.IsInvitationJoinGroup(); flag {
for _, user := range config.Conf.System.NewFriendNotify.ToUser {
if user != "" {
// 发送一条新消息
utils.SendMessage(user, "", dec, 0)
}
}
}
// 插件不为空,开始执行
if p := current.GetRobotMessageHandler(); p != nil {
p(&m)

View File

@@ -2,6 +2,7 @@ package utils
import (
"github.com/go-resty/resty/v2"
"go-wechat/config"
"go-wechat/model"
"log"
)
@@ -33,7 +34,7 @@ func (news) MorningPost() (records []string) {
res := resty.New()
resp, err := res.R().
SetHeader("Content-Type", "application/json;chartset=utf-8").
SetQueryParam("token", "cFoMZNNBxT4jQovS").
SetQueryParam("token", config.Conf.System.AlApiToken).
SetResult(&newsResp).
Post("https://v2.alapi.cn/api/zaobao")
if err != nil {

View File

@@ -126,7 +126,9 @@ func SendEmotion(toId, emotionHash string, retryCount int) {
// @description: 删除群成员
// @param chatRoomId 群Id
// @param memberIds 成员id,用','分隔
func DeleteGroupMember(chatRoomId, memberIds string, retryCount int) {
// @param retryCount 重试次数
// @param isSure 是否确认删除
func DeleteGroupMember(chatRoomId, memberIds string, retryCount int, isSure bool) {
if retryCount > 5 {
log.Printf("重试五次失败,停止发送")
return
@@ -148,9 +150,11 @@ func DeleteGroupMember(chatRoomId, memberIds string, retryCount int) {
log.Printf("删除群成员失败: %s", err.Error())
// 休眠五秒后重新发送
time.Sleep(5 * time.Second)
DeleteGroupMember(chatRoomId, memberIds, retryCount+1)
DeleteGroupMember(chatRoomId, memberIds, retryCount+1, isSure)
}
log.Printf("删除群成员结果: %s", resp.String())
log.Printf("[%s]删除群成员结果: %s", chatRoomId, resp.String())
// 这个逼接口要调用两次,第一次调用成功,第二次调用才会真正删除
DeleteGroupMember(chatRoomId, memberIds, 5)
if !isSure {
DeleteGroupMember(chatRoomId, memberIds, 5, true)
}
}

View File

@@ -119,7 +119,7 @@
</div>
<!-- 指令 -->
<div class="flex justify-between gap-x-4 py-3 items-center">
<dt class="text-gray-500">迎新</dt>
<dt class="text-gray-500">指令</dt>
<dd class="flex items-start gap-x-2">
{{ template "command" . }}
</dd>
@@ -128,7 +128,7 @@
<div class="flex justify-between gap-x-4 py-3 items-center">
<dt class="text-gray-500">末位淘汰</dt>
<dd class="flex items-start gap-x-2 items-center">
<div class="relative rounded-md shadow-sm">
<div class="relative rounded-md">
<label>
<input type="number" id="auto-cm-{{ .Wxid }}" min="0" class="block w-1/2 float-end rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6" placeholder="N天不活跃自动移除"
value="{{.ClearMember}}"