first commit
This commit is contained in:
@@ -0,0 +1,505 @@
|
||||
package req
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
// 指令参数
|
||||
// 自动抢红包 101
|
||||
type AutoRedRequestModel struct {
|
||||
Enable int32 `example:"1"` // 是否开启领取红包机制
|
||||
Single int32 `example:"1"` // 是否仅抢单个红包(不同时抢多个)
|
||||
AutoReply int32 `example:"1"` // 是否自动回复感谢
|
||||
TimeInSeconds int32 `example:"0"` // 延迟回复的时间,单位为秒
|
||||
ReplyMessages string // 回复内容(多个消息用逗号隔开)
|
||||
}
|
||||
|
||||
func DealAutoRed(model *AutoRedRequestModel) {
|
||||
if model.Enable != 1 {
|
||||
model.Enable = 0
|
||||
}
|
||||
if model.Single != 1 {
|
||||
model.Single = 0
|
||||
}
|
||||
if model.AutoReply != 1 {
|
||||
model.AutoReply = 0
|
||||
}
|
||||
// TimeInSeconds 0-60
|
||||
if model.TimeInSeconds < 0 {
|
||||
model.TimeInSeconds = 0
|
||||
} else if model.TimeInSeconds > 60 {
|
||||
model.TimeInSeconds = 60
|
||||
}
|
||||
_, model.ReplyMessages = StringToSlice(model.ReplyMessages)
|
||||
}
|
||||
|
||||
// 自动接收转账 106
|
||||
type AutoTransferRequestModel struct {
|
||||
Enable int32 `example:"1"` // 是否开启接收转账功能
|
||||
AutoReply int32 `example:"1"` // 是否开启自动回复
|
||||
TimeInSeconds int32 `example:"0"` // 延迟回复的时间,单位为秒
|
||||
ReplyMessage string // 回复内容(仅一条)
|
||||
}
|
||||
|
||||
func DealTransfer(model *AutoTransferRequestModel) {
|
||||
if model.Enable != 1 {
|
||||
model.Enable = 0
|
||||
}
|
||||
if model.AutoReply != 1 {
|
||||
model.AutoReply = 0
|
||||
}
|
||||
// TimeInSeconds 0-60
|
||||
if model.TimeInSeconds < 0 {
|
||||
model.TimeInSeconds = 0
|
||||
} else if model.TimeInSeconds > 60 {
|
||||
model.TimeInSeconds = 60
|
||||
}
|
||||
model.ReplyMessage = StringTo1000(model.ReplyMessage)
|
||||
}
|
||||
|
||||
// 延迟领取红包 103
|
||||
type DelayRedRequestModel struct {
|
||||
TimeInSeconds int32 `example:"0"` // 延迟领取红包的时间,单位为秒
|
||||
}
|
||||
|
||||
func DealDelayRed(model *DelayRedRequestModel) {
|
||||
// TimeInSeconds 0-60
|
||||
if model.TimeInSeconds < 0 {
|
||||
model.TimeInSeconds = 0
|
||||
} else if model.TimeInSeconds > 60 {
|
||||
model.TimeInSeconds = 60
|
||||
}
|
||||
}
|
||||
|
||||
// 延迟接收转账 113
|
||||
type DelayAutoTransferRequestModel struct {
|
||||
TimeInSeconds int32 `example:"0"` // 延迟接收转账的时间,单位为秒
|
||||
}
|
||||
|
||||
func DealDelayTransfer(model *DelayAutoTransferRequestModel) {
|
||||
// TimeInSeconds 0-60
|
||||
if model.TimeInSeconds < 0 {
|
||||
model.TimeInSeconds = 0
|
||||
} else if model.TimeInSeconds > 60 {
|
||||
model.TimeInSeconds = 60
|
||||
}
|
||||
}
|
||||
|
||||
// 关键字包不抢 118
|
||||
type KeywordAvoidanceRequestModel struct {
|
||||
Enable int32 `example:"1"` // 是否开启关键字包不抢
|
||||
Keywords string // 设置关键字(多个用逗号隔开)
|
||||
}
|
||||
|
||||
func DealKeywordAvoidance(model *KeywordAvoidanceRequestModel) {
|
||||
if model.Enable != 1 {
|
||||
model.Enable = 0
|
||||
}
|
||||
_, model.Keywords = StringToSlice(model.Keywords)
|
||||
}
|
||||
|
||||
// 自动点赞 401
|
||||
type AutoLikeRequestModel struct {
|
||||
Enable int32 `example:"1"` // 是否开启自动点赞
|
||||
StartTime string // 开始时间 // 点赞时间段
|
||||
EndTime string // 结束时间// 点赞时间段
|
||||
TimeInSeconds int32 `example:"0"` // 延迟点赞的时间,单位为秒
|
||||
Mode int32 `example:"1"` // 模式,1-仅点赞分组,0-不点赞分组
|
||||
Groups string // 设置分组,多个用逗号隔开
|
||||
}
|
||||
|
||||
func DealAutoLike(model *AutoLikeRequestModel) {
|
||||
if model.Enable != 1 {
|
||||
model.Enable = 0
|
||||
}
|
||||
// TimeInSeconds 0-60
|
||||
if model.TimeInSeconds < 0 {
|
||||
model.TimeInSeconds = 0
|
||||
} else if model.TimeInSeconds > 60 {
|
||||
model.TimeInSeconds = 60
|
||||
}
|
||||
if model.Mode != 1 {
|
||||
model.Mode = 0
|
||||
}
|
||||
_, model.Groups = StringToSlice(model.Groups)
|
||||
}
|
||||
|
||||
// 朋友圈跟随转发 402
|
||||
type AutoForwardRequestModel struct {
|
||||
EnableAutoForward int32 `example:"1"` // 是否开启跟随转发
|
||||
IsBlockAuthor int32 `example:"1"` // 是否屏蔽作者
|
||||
IsBlockGroup int32 `example:"1"` // 是否屏蔽组
|
||||
Groups string // 设置分组,多个用逗号隔开
|
||||
}
|
||||
|
||||
func DealAutoForward(model *AutoForwardRequestModel) {
|
||||
if model.EnableAutoForward != 1 {
|
||||
model.EnableAutoForward = 0
|
||||
}
|
||||
if model.IsBlockAuthor != 1 {
|
||||
model.IsBlockAuthor = 0
|
||||
}
|
||||
if model.IsBlockGroup != 1 {
|
||||
model.IsBlockGroup = 0
|
||||
}
|
||||
_, model.Groups = StringToSlice(model.Groups)
|
||||
}
|
||||
|
||||
// 朋友圈收藏转发 403
|
||||
type FavoriteForwardRequestModel struct {
|
||||
EnableFavoriteForward int32 `example:"1"` // 是否开启收藏转发
|
||||
IsBlockAuthor int32 `example:"1"` // 是否屏蔽作者
|
||||
IsBlockGroup int32 `example:"1"` // 是否屏蔽组
|
||||
Groups string // 设置分组,多个用逗号隔开
|
||||
}
|
||||
|
||||
func DealFavoriteForward(model *FavoriteForwardRequestModel) {
|
||||
if model.EnableFavoriteForward != 1 {
|
||||
model.EnableFavoriteForward = 0
|
||||
}
|
||||
if model.IsBlockAuthor != 1 {
|
||||
model.IsBlockAuthor = 0
|
||||
}
|
||||
if model.IsBlockGroup != 1 {
|
||||
model.IsBlockGroup = 0
|
||||
}
|
||||
_, model.Groups = StringToSlice(model.Groups)
|
||||
}
|
||||
|
||||
// 朋友圈自动评论 404
|
||||
type AutoCommentRequestModel struct {
|
||||
Enable int32 `example:"1"` // 是否开启自动评论
|
||||
CommentMessages string // 评论内容(多条用逗号隔开)
|
||||
StartTime string // 评论时间段,开始时间
|
||||
EndTime string // 评论时间段,结束时间
|
||||
TimeInSeconds int32 `example:"0"` // 延迟评论的时间,单位为秒
|
||||
Mode int32 `example:"1"` // 模式,1-仅评论分组,0-不评论分组
|
||||
Groups string // 设置分组,多个用逗号隔开
|
||||
}
|
||||
|
||||
func DealAutoComment(model *AutoCommentRequestModel) {
|
||||
if model.Enable != 1 {
|
||||
model.Enable = 0
|
||||
}
|
||||
_, model.CommentMessages = StringToSlice(model.CommentMessages)
|
||||
// TimeInSeconds 0-60
|
||||
if model.TimeInSeconds < 0 {
|
||||
model.TimeInSeconds = 0
|
||||
} else if model.TimeInSeconds > 60 {
|
||||
model.TimeInSeconds = 60
|
||||
}
|
||||
if model.Mode != 1 {
|
||||
model.Mode = 0
|
||||
}
|
||||
_, model.Groups = StringToSlice(model.Groups)
|
||||
}
|
||||
|
||||
// 定时发朋友圈 405
|
||||
type MomentsRequestModel struct {
|
||||
MomentType int32 `example:"1"` // 发圈类型,1-文字,3-图片
|
||||
MomentContent string // 朋友圈内容
|
||||
MomentImages string // 朋友圈图片(最多上传9张,图片路径或链接用逗号隔开)
|
||||
IsBlock int32 `example:"1"` // 发圈时屏蔽组
|
||||
Groups string // 设置分组,多个用逗号隔开
|
||||
ScheduledTime string // 预约发圈时间
|
||||
Status int32 `example:"0"` // 状态,0-未发布,1-已发布,-1-发布失败
|
||||
}
|
||||
|
||||
func DealMoments(model *MomentsRequestModel) {
|
||||
// MomentType must be either 1 or 3
|
||||
if model.MomentType != 3 {
|
||||
model.MomentType = 1 // Default to 1 if invalid
|
||||
}
|
||||
model.MomentContent = StringTo1000(model.MomentContent)
|
||||
_, model.MomentImages = StringToSlice(model.MomentImages)
|
||||
if model.IsBlock != 1 {
|
||||
model.IsBlock = 0
|
||||
|
||||
}
|
||||
_, model.Groups = StringToSlice(model.Groups)
|
||||
// Status can remain as is since it is already initialized
|
||||
}
|
||||
|
||||
// 发大视频朋友圈 406
|
||||
type MomentsPostRequestModel struct {
|
||||
Content string // 朋友圈内容
|
||||
VideoURL string // 视频,最大500M(最多上传1个)
|
||||
IsBlock int32 `example:"1"` // 发圈时屏蔽组
|
||||
Groups string // 设置分组,多个用逗号隔开
|
||||
}
|
||||
|
||||
func DealMomentsPost(model *MomentsPostRequestModel) {
|
||||
model.Content = StringTo1000(model.Content)
|
||||
model.VideoURL = StringTo1000(model.VideoURL)
|
||||
if model.IsBlock != 1 {
|
||||
model.IsBlock = 0
|
||||
}
|
||||
_, model.Groups = StringToSlice(model.Groups)
|
||||
}
|
||||
|
||||
// 欢迎新人入群 502
|
||||
type WelcomeNewMemberRequestModel struct {
|
||||
Enable int32 `example:"1"` // 是否开启欢迎新人入群
|
||||
WelcomeMsg string // 欢迎语内容(仅一条)
|
||||
Mode int32 `example:"1"` // 模式,1-仅欢迎设置群,0-不欢迎设置群
|
||||
Rooms string // 设置的群
|
||||
}
|
||||
|
||||
func DealWelcomeNewMember(model *WelcomeNewMemberRequestModel) {
|
||||
if model.Enable != 1 {
|
||||
model.Enable = 0
|
||||
}
|
||||
model.WelcomeMsg = StringTo1000(model.WelcomeMsg)
|
||||
if model.Mode != 1 {
|
||||
model.Mode = 0
|
||||
}
|
||||
_, model.Rooms = StringToSlice(model.Rooms)
|
||||
}
|
||||
|
||||
// 关键词自动踢人 503
|
||||
type KeywordKickRequestModel struct {
|
||||
Enable int32 `example:"1"` // 是否开启关键词踢人
|
||||
Keywords string // 触发的关键词(多条用逗号分隔)
|
||||
IsLinkKick int32 `example:"1"` // 是否踢发链接的人
|
||||
IsCardKick int32 `example:"1"` // 是否踢发名片的人
|
||||
IsMiniProgramKick int32 `example:"1"` // 是否踢发小程序的人
|
||||
IsImageQRCodeKick int32 `example:"1"` // 是否踢发图片二维码的人
|
||||
Mode int32 `example:"1"` // 模式,1-仅踢设置群,0-不踢设置群
|
||||
Rooms string // 设置的群
|
||||
}
|
||||
|
||||
func DealKeywordKick(model *KeywordKickRequestModel) {
|
||||
if model.Enable != 1 {
|
||||
model.Enable = 0
|
||||
}
|
||||
_, model.Keywords = StringToSlice(model.Keywords)
|
||||
if model.IsLinkKick != 1 {
|
||||
model.IsLinkKick = 0
|
||||
}
|
||||
if model.IsCardKick != 1 {
|
||||
model.IsCardKick = 0
|
||||
}
|
||||
if model.IsMiniProgramKick != 1 {
|
||||
model.IsMiniProgramKick = 0
|
||||
}
|
||||
if model.IsImageQRCodeKick != 1 {
|
||||
model.IsImageQRCodeKick = 0
|
||||
}
|
||||
if model.Mode != 1 {
|
||||
model.Mode = 0
|
||||
}
|
||||
_, model.Rooms = StringToSlice(model.Rooms)
|
||||
}
|
||||
|
||||
// 关键词自动回复 504
|
||||
type ReplyKeywordsItem struct {
|
||||
Keyword string // 触发的关键词
|
||||
Content string // 回复的内容
|
||||
NewMsgId string // 新消息ID 引用了文件助手某条消息时用这个字段
|
||||
MsgType int32 // 收到消息时的类型:1-文本 3-图片 24-笔记 33-小程序 42-名片 49-链接
|
||||
SendType int32 // 回复的类型,发送类型 1-文本 3-图片 49-笔记|链接 2002-小程序 42-名片
|
||||
}
|
||||
|
||||
type KeywordAutoReplyRequestModel struct {
|
||||
Enable int32 `example:"1"` // 是否开启关键词自动回复
|
||||
PrivateReply int32 `example:"1"` // 是否回复私聊
|
||||
Mode int32 `example:"1"` // 模式,1-仅回复设置群,0-不回复设置群
|
||||
Rooms string // 设置的群
|
||||
Keywords []ReplyKeywordsItem // 关键词设置
|
||||
}
|
||||
|
||||
func DealKeywordAutoReply(model *KeywordAutoReplyRequestModel) {
|
||||
if model.Enable != 1 {
|
||||
model.Enable = 0
|
||||
}
|
||||
if model.PrivateReply != 1 {
|
||||
model.PrivateReply = 0
|
||||
}
|
||||
if model.Mode != 1 {
|
||||
model.Mode = 0
|
||||
}
|
||||
_, model.Rooms = StringToSlice(model.Rooms)
|
||||
|
||||
for i := range model.Keywords {
|
||||
model.Keywords[i].Keyword = StringTo1000(model.Keywords[i].Keyword)
|
||||
model.Keywords[i].Content = StringTo1000(model.Keywords[i].Content)
|
||||
// MsgType and SendType are assumed to be validated outside this function
|
||||
}
|
||||
}
|
||||
|
||||
// 万群同步 505
|
||||
type MessageForwardingRequestModel struct {
|
||||
Enable int32 `example:"1"` // 是否开启消息转发
|
||||
MainRoom string // 设置的主讲群
|
||||
Lecturers string // 添加的讲师
|
||||
ForwardRooms string // 设置的转发群
|
||||
StartTime string // 转发时间段,开始时间
|
||||
EndTime string // 转发时间段,结束时间
|
||||
}
|
||||
|
||||
func DealMessageForwarding(model *MessageForwardingRequestModel) {
|
||||
if model.Enable != 1 {
|
||||
model.Enable = 0
|
||||
}
|
||||
model.MainRoom = StringTo1000(model.MainRoom)
|
||||
model.Lecturers = StringTo1000(model.Lecturers)
|
||||
_, model.ForwardRooms = StringToSlice(model.ForwardRooms)
|
||||
// StartTime and EndTime are assumed to be valid formats validated outside this function
|
||||
startTime, endTime := DealTimeRange(model.StartTime, model.EndTime)
|
||||
model.StartTime = startTime
|
||||
model.EndTime = endTime
|
||||
}
|
||||
|
||||
// 自动通过好友 801
|
||||
type AutoApproveRequestModel struct {
|
||||
Enable int32 `example:"1"` // 是否开启自动通过验证
|
||||
AutoReply int32 `example:"1"` // 是否通过验证后自动回复
|
||||
ReplyMessage string // 回复内容(仅一条)
|
||||
}
|
||||
|
||||
func DealAutoApprove(model *AutoApproveRequestModel) {
|
||||
if model.Enable != 1 {
|
||||
model.Enable = 0
|
||||
}
|
||||
if model.AutoReply != 1 {
|
||||
model.AutoReply = 0
|
||||
}
|
||||
model.ReplyMessage = StringTo1000(model.ReplyMessage)
|
||||
}
|
||||
|
||||
// 中文逗号转为英文逗号,清理换行符,过滤空字符串,返回字符串数组和字符串表示
|
||||
func StringToSlice(str string) ([]string, string) {
|
||||
// 清理换行符(包括 \n 和 \r)
|
||||
str = strings.ReplaceAll(str, "\r", "")
|
||||
|
||||
// 回车符转成分隔付(逗号)
|
||||
str = strings.ReplaceAll(str, "\n", ",")
|
||||
|
||||
// 将中文逗号替换为英文逗号
|
||||
str = strings.ReplaceAll(str, ",", ",")
|
||||
|
||||
// 按英文逗号分割成字符串数组
|
||||
strArr := strings.Split(str, ",")
|
||||
var result []string
|
||||
var finalString string = ""
|
||||
|
||||
// 过滤掉空字符串,清理头尾空格
|
||||
for _, v := range strArr {
|
||||
v = strings.TrimSpace(v) // 去掉前后空格
|
||||
if v != "" {
|
||||
// 判断不能大于 1000 个字符
|
||||
if len(finalString+","+v) > 1000 {
|
||||
continue
|
||||
}
|
||||
if finalString != "" {
|
||||
finalString += ","
|
||||
}
|
||||
finalString += v
|
||||
result = append(result, v)
|
||||
}
|
||||
}
|
||||
|
||||
// 将数组转成字符串格式
|
||||
// finalString := strings.Join(result, ",")
|
||||
|
||||
// 返回字符串数组和字符串
|
||||
return result, finalString
|
||||
}
|
||||
|
||||
// 判断字符串不能大于 1000 个字符,大于则截取前 1000 个字符
|
||||
func StringTo1000(str string) string {
|
||||
str = strings.TrimSpace(str) // 去掉前后空格
|
||||
// 只取 前 1000 个字符
|
||||
if len(str) > 1000 {
|
||||
str = str[:1000]
|
||||
}
|
||||
return str
|
||||
}
|
||||
|
||||
// 处理开始时间和结束时间,如果输入格式不正确,则使用默认值
|
||||
func DealTimeRange(startTime string, endTime string) (string, string) {
|
||||
const timeFormat = "15:04"
|
||||
// 解析 StartTime
|
||||
start, errStart := time.Parse(timeFormat, startTime)
|
||||
if errStart != nil {
|
||||
start = time.Date(0, 1, 1, 0, 0, 0, 0, time.UTC) // 设置为 00:00
|
||||
startTime = start.Format(timeFormat)
|
||||
} else {
|
||||
startTime = start.Format(timeFormat)
|
||||
}
|
||||
|
||||
// 解析 EndTime
|
||||
end, errEnd := time.Parse(timeFormat, endTime)
|
||||
if errEnd != nil {
|
||||
end = time.Date(0, 1, 1, 23, 59, 0, 0, time.UTC) // 设置为 23:59
|
||||
endTime = end.Format(timeFormat)
|
||||
} else {
|
||||
endTime = end.Format(timeFormat)
|
||||
}
|
||||
|
||||
// 如果 EndTime 小于 StartTime,则将 EndTime 设置为 StartTime
|
||||
if end.Before(start) {
|
||||
end = start
|
||||
endTime = end.Format(timeFormat)
|
||||
}
|
||||
|
||||
return startTime, endTime
|
||||
}
|
||||
|
||||
// ToJSON 将任意结构体转换为 JSON 字符串
|
||||
func ToJSONStr(input interface{}) (string, error) {
|
||||
// 使用 json.Marshal 将对象转换为 JSON 字节数组
|
||||
bytes, err := json.Marshal(input)
|
||||
if err != nil {
|
||||
// 如果转换失败,返回错误提示
|
||||
return "", err
|
||||
}
|
||||
// 将字节数组转换为字符串并返回
|
||||
return string(bytes), nil
|
||||
}
|
||||
|
||||
// FromJSONS 将 JSON 字符串转换为任意结构体
|
||||
func FromJSONS(input string, output interface{}) error {
|
||||
if len(input) == 0 {
|
||||
// 将空字符串替换为一个空 JSON 对象
|
||||
input = "{}"
|
||||
}
|
||||
err := json.Unmarshal([]byte(input), output)
|
||||
return err
|
||||
}
|
||||
|
||||
// 定时任务执行函数 true 可以执行,false 不执行
|
||||
func IsInTimeRange(StartTime string, EndTime string) bool {
|
||||
// 获取系统当前时间(HH:mm 格式)
|
||||
now := time.Now()
|
||||
layout := "15:04"
|
||||
currentTime, err := time.Parse(layout, now.Format(layout)) // 将当前时间转换为 HH:mm 格式
|
||||
if err != nil {
|
||||
// 如果解析失败,执行任务即可
|
||||
return true
|
||||
}
|
||||
// 解析 StartTime 和 EndTime
|
||||
startTime, err := time.Parse(layout, StartTime)
|
||||
if err != nil {
|
||||
// 如果解析失败,执行任务即可
|
||||
return true
|
||||
}
|
||||
|
||||
endTime, err := time.Parse(layout, EndTime)
|
||||
|
||||
if err != nil {
|
||||
// 如果解析失败,执行任务即可
|
||||
return true
|
||||
}
|
||||
|
||||
// 判断当前时间是否在范围内
|
||||
if (currentTime.After(startTime) || currentTime.Equal(startTime)) && (currentTime.Before(endTime) || currentTime.Equal(endTime)) {
|
||||
// 执行任务
|
||||
return true
|
||||
} else {
|
||||
// 不执行
|
||||
return false
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user