7
7
"encoding/json"
8
8
"errors"
9
9
"fmt"
10
+ "math"
10
11
"strconv"
11
12
"time"
12
13
@@ -64,64 +65,61 @@ func (bot *CQBot) CQGetFriendList(spec *onebot.Spec) global.MSG {
64
65
return OK (fs )
65
66
}
66
67
67
- // TODO 不支持的api,扔了先
68
68
// CQGetUnidirectionalFriendList 获取单向好友列表
69
69
//
70
70
// @route(get_unidirectional_friend_list)
71
- // func (bot *CQBot) CQGetUnidirectionalFriendList() global.MSG {
72
- // list, err := bot.Client.GetUnidirectionalFriendList()
73
- // if err != nil {
74
- // log.Warnf("获取单向好友列表时出现错误: %v", err)
75
- // return Failed(100, "API_ERROR", err.Error())
76
- // }
77
- // fs := make([]global.MSG, 0, len(list))
78
- // for _, f := range list {
79
- // fs = append(fs, global.MSG{
80
- // "nickname": f.Nickname,
81
- // "user_id": f.Uin,
82
- // "source": f.Source,
83
- // })
84
- // }
85
- // return OK(fs)
86
- // }
71
+ func (bot * CQBot ) CQGetUnidirectionalFriendList () global.MSG {
72
+ list , err := bot .Client .GetUnidirectionalFriendList ()
73
+ if err != nil {
74
+ log .Warnf ("获取单向好友列表时出现错误: %v" , err )
75
+ return Failed (100 , "API_ERROR" , err .Error ())
76
+ }
77
+ fs := make ([]global.MSG , 0 , len (list ))
78
+ for _ , f := range list {
79
+ fs = append (fs , global.MSG {
80
+ "nickname" : f .Nickname ,
81
+ "user_id" : f .Uin ,
82
+ "source" : f .Source ,
83
+ })
84
+ }
85
+ return OK (fs )
86
+ }
87
87
88
- // TODO 不支持的api,扔了先
89
88
// CQDeleteUnidirectionalFriend 删除单向好友
90
89
//
91
90
// @route(delete_unidirectional_friend)
92
91
// @rename(uin->user_id)
93
- // func (bot *CQBot) CQDeleteUnidirectionalFriend(uin int64) global.MSG {
94
- // list, err := bot.Client.GetUnidirectionalFriendList()
95
- // if err != nil {
96
- // log.Warnf("获取单向好友列表时出现错误: %v", err)
97
- // return Failed(100, "API_ERROR", err.Error())
98
- // }
99
- // for _, f := range list {
100
- // if f.Uin == uin {
101
- // if err = bot.Client.DeleteUnidirectionalFriend(uin); err != nil {
102
- // log.Warnf("删除单向好友时出现错误: %v", err)
103
- // return Failed(100, "API_ERROR", err.Error())
104
- // }
105
- // return OK(nil)
106
- // }
107
- // }
108
- // return Failed(100, "FRIEND_NOT_FOUND", "好友不存在")
109
- // }
92
+ func (bot * CQBot ) CQDeleteUnidirectionalFriend (uin int64 ) global.MSG {
93
+ list , err := bot .Client .GetUnidirectionalFriendList ()
94
+ if err != nil {
95
+ log .Warnf ("获取单向好友列表时出现错误: %v" , err )
96
+ return Failed (100 , "API_ERROR" , err .Error ())
97
+ }
98
+ for _ , f := range list {
99
+ if f .Uin == uint32 ( uin ) {
100
+ if err = bot .Client .DeleteUnidirectionalFriend (uint32 ( uin ) ); err != nil {
101
+ log .Warnf ("删除单向好友时出现错误: %v" , err )
102
+ return Failed (100 , "API_ERROR" , err .Error ())
103
+ }
104
+ return OK (nil )
105
+ }
106
+ }
107
+ return Failed (100 , "FRIEND_NOT_FOUND" , "好友不存在" )
108
+ }
110
109
111
- // TODO 不支持的api,扔了先
112
110
// CQDeleteFriend 删除好友
113
111
// @route(delete_friend)
114
112
// @rename(uin->"[user_id\x2Cid].0")
115
- // func (bot *CQBot) CQDeleteFriend(uin int64) global.MSG {
116
- // if bot.Client.FindFriend( uin) == nil {
117
- // return Failed(100, "FRIEND_NOT_FOUND", "好友不存在")
118
- // }
119
- // if err := bot.Client.DeleteFriend(uin); err != nil {
120
- // log.Warnf("删除好友时出现错误: %v", err)
121
- // return Failed(100, "DELETE_API_ERROR", err.Error())
122
- // }
123
- // return OK(nil)
124
- // }
113
+ func (bot * CQBot ) CQDeleteFriend (uin int64 , block bool ) global.MSG {
114
+ if bot .Client .GetCachedFriendInfo ( uint32 ( uin ) ) == nil {
115
+ return Failed (100 , "FRIEND_NOT_FOUND" , "好友不存在" )
116
+ }
117
+ if err := bot .Client .DeleteFriend (uint32 ( uin ), block ); err != nil {
118
+ log .Warnf ("删除好友时出现错误: %v" , err )
119
+ return Failed (100 , "DELETE_API_ERROR" , err .Error ())
120
+ }
121
+ return OK (nil )
122
+ }
125
123
126
124
// CQGetGroupList 获取群列表
127
125
//
@@ -278,7 +276,7 @@ func (bot *CQBot) CQUploadGroupFile(groupID int64, file, name, folder string) gl
278
276
log .Warnf ("上传群文件 %v 失败: 文件不存在" , file )
279
277
return Failed (100 , "FILE_NOT_FOUND" , "文件不存在" )
280
278
}
281
- if err := bot .Client .UploadGroupFile (uint32 (groupID ), file , name , utils .Ternary (folder == "" , "/" , folder )); err != nil {
279
+ if err := bot .Client .SendGroupFile (uint32 (groupID ), file , name , utils .Ternary (folder == "" , "/" , folder )); err != nil {
282
280
log .Warnf ("上传群 %v 文件 %v 失败: %v" , groupID , file , err )
283
281
return Failed (100 , "FILE_SYSTEM_UPLOAD_API_ERROR" , err .Error ())
284
282
}
@@ -293,7 +291,7 @@ func (bot *CQBot) CQUploadPrivateFile(userID int64, file, name string) global.MS
293
291
log .Warnf ("上传群文件 %v 失败: 文件不存在" , file )
294
292
return Failed (100 , "FILE_NOT_FOUND" , "文件不存在" )
295
293
}
296
- if err := bot .Client .UploadPrivateFile (uint32 (userID ), file , name ); err != nil {
294
+ if err := bot .Client .SendPrivateFile (uint32 (userID ), file , name ); err != nil {
297
295
log .Warnf ("上传私聊 %v 文件 %v 失败: %+v" , userID , file , err )
298
296
return Failed (100 , "FILE_SYSTEM_UPLOAD_API_ERROR" , err .Error ())
299
297
}
@@ -618,7 +616,7 @@ func (bot *CQBot) CQSendPrivateMessage(userID int64, groupID int64, m gjson.Resu
618
616
func (bot * CQBot ) CQSetGroupCard (groupID , userID int64 , card string ) global.MSG {
619
617
if g := bot .Client .GetCachedGroupInfo (uint32 (groupID )); g != nil {
620
618
if m := bot .Client .GetCachedMemberInfo (uint32 (userID ), uint32 (groupID )); m != nil {
621
- if err := bot .Client .GroupRenameMember (uint32 (groupID ), uint32 (userID ), card ); err != nil {
619
+ if err := bot .Client .SetGroupMemberName (uint32 (groupID ), uint32 (userID ), card ); err != nil {
622
620
return Failed (100 , "SET_CARD_FAILED" , err .Error ())
623
621
624
622
}
@@ -636,7 +634,7 @@ func (bot *CQBot) CQSetGroupCard(groupID, userID int64, card string) global.MSG
636
634
func (bot * CQBot ) CQSetGroupSpecialTitle (groupID , userID int64 , title string ) global.MSG {
637
635
if g := bot .Client .GetCachedGroupInfo (uint32 (groupID )); g != nil {
638
636
if m := bot .Client .GetCachedMemberInfo (uint32 (userID ), uint32 (groupID )); m != nil {
639
- if err := bot .Client .GroupSetSpecialTitle (uint32 (groupID ), uint32 (userID ), title ); err != nil {
637
+ if err := bot .Client .SetGroupMemberSpecialTitle (uint32 (groupID ), uint32 (userID ), title ); err != nil {
640
638
return Failed (100 , "SET_Title_FAILED" , err .Error ())
641
639
}
642
640
return OK (nil )
@@ -652,7 +650,7 @@ func (bot *CQBot) CQSetGroupSpecialTitle(groupID, userID int64, title string) gl
652
650
// @rename(name->group_name)
653
651
func (bot * CQBot ) CQSetGroupName (groupID int64 , name string ) global.MSG {
654
652
if g := bot .Client .GetCachedGroupInfo (uint32 (groupID )); g != nil {
655
- if err := bot .Client .GroupRename (uint32 (groupID ), name ); err != nil {
653
+ if err := bot .Client .SetGroupName (uint32 (groupID ), name ); err != nil {
656
654
return Failed (100 , "SET_NAME_FAILED" , err .Error ())
657
655
}
658
656
return OK (nil )
@@ -729,7 +727,7 @@ func (bot *CQBot) CQSetGroupKick(groupID int64, userID int64, block bool) global
729
727
if m == nil {
730
728
return Failed (100 , "MEMBER_NOT_FOUND" , "人员不存在" )
731
729
}
732
- if err := bot .Client .GroupKickMember (uint32 (groupID ), uint32 (userID ), block ); err != nil {
730
+ if err := bot .Client .KickGroupMember (uint32 (groupID ), uint32 (userID ), block ); err != nil {
733
731
return Failed (100 , "NOT_MANAGEABLE" , "机器人权限不足" )
734
732
}
735
733
return OK (nil )
@@ -748,7 +746,7 @@ func (bot *CQBot) CQSetGroupBan(groupID, userID int64, duration uint32) global.M
748
746
if duration >= 2592000 {
749
747
return Failed (100 , "DURATION_IS_NOT_IN_RANGE" , "非法的禁言时长" )
750
748
}
751
- if err := bot .Client .GroupMuteMember (uint32 (groupID ), uint32 (userID ), duration ); err != nil {
749
+ if err := bot .Client .SetGroupMemberMute (uint32 (groupID ), uint32 (userID ), duration ); err != nil {
752
750
return Failed (100 , "NOT_MANAGEABLE" , "机器人权限不足" )
753
751
}
754
752
return OK (nil )
@@ -764,7 +762,7 @@ func (bot *CQBot) CQSetGroupBan(groupID, userID int64, duration uint32) global.M
764
762
// @default(enable=true)
765
763
func (bot * CQBot ) CQSetGroupWholeBan (groupID int64 , enable bool ) global.MSG {
766
764
if g := bot .Client .GetCachedGroupInfo (uint32 (groupID )); g != nil {
767
- if err := bot .Client .GroupMuteGlobal (uint32 (groupID ), enable ); err != nil {
765
+ if err := bot .Client .SetGroupGlobalMute (uint32 (groupID ), enable ); err != nil {
768
766
return Failed (100 , "NOT_MANAGEABLE" , "机器人权限不足" )
769
767
}
770
768
return OK (nil )
@@ -778,7 +776,7 @@ func (bot *CQBot) CQSetGroupWholeBan(groupID int64, enable bool) global.MSG {
778
776
// @route(set_group_leave)
779
777
func (bot * CQBot ) CQSetGroupLeave (groupID int64 ) global.MSG {
780
778
if g := bot .Client .GetCachedGroupInfo (uint32 (groupID )); g != nil {
781
- if err := bot .Client .GroupLeave (uint32 (groupID )); err != nil {
779
+ if err := bot .Client .SetGroupLeave (uint32 (groupID )); err != nil {
782
780
return Failed (100 , "反正是失败了.png" , err .Error ())
783
781
}
784
782
return OK (nil )
@@ -839,7 +837,7 @@ func (bot *CQBot) CQProcessGroupRequest(flag, subType, reason string, approve bo
839
837
if subType == "add" {
840
838
for _ , req := range append (msgs .JoinRequests , filteredmsgs .JoinRequests ... ) {
841
839
if strconv .FormatInt (int64 (req .Sequence ), 10 ) == flag {
842
- if req .Checked () {
840
+ if req .Checked {
843
841
log .Warnf ("处理群系统消息失败: 无法操作已处理的消息." )
844
842
return Failed (100 , "FLAG_HAS_BEEN_CHECKED" , "消息已被处理" )
845
843
}
@@ -854,7 +852,7 @@ func (bot *CQBot) CQProcessGroupRequest(flag, subType, reason string, approve bo
854
852
} else {
855
853
for _ , req := range append (msgs .InvitedRequests , filteredmsgs .InvitedRequests ... ) {
856
854
if strconv .FormatInt (int64 (req .Sequence ), 10 ) == flag {
857
- if req .Checked () {
855
+ if req .Checked {
858
856
log .Warnf ("处理群系统消息失败: 无法操作已处理的消息." )
859
857
return Failed (100 , "FLAG_HAS_BEEN_CHECKED" , "消息已被处理" )
860
858
}
@@ -918,8 +916,8 @@ func (bot *CQBot) CQSetGroupAdmin(groupID, userID int64, enable bool) global.MSG
918
916
if m .Permission != entity .Owner {
919
917
return Failed (100 , "PERMISSION_DENIED" , "或权限不足" )
920
918
}
921
- if err := bot .Client .GroupSetAdmin (uint32 (groupID ), uint32 (userID ), enable ); err != nil {
922
- return Failed (100 , "反正是失败了.png " , err .Error ())
919
+ if err := bot .Client .SetGroupAdmin (uint32 (groupID ), uint32 (userID ), enable ); err != nil {
920
+ return Failed (100 , "UNKNOWN_ERROR " , err .Error ())
923
921
}
924
922
return OK (nil )
925
923
}
@@ -1284,56 +1282,53 @@ func (bot *CQBot) CQGetMessage(messageID int32) global.MSG {
1284
1282
return OK (m )
1285
1283
}
1286
1284
1287
- // CQGetGroupSystemMessages 扩展API-获取群文件系统消息
1285
+ // CQGetGroupSystemMessages 扩展API-获取群系统消息
1288
1286
//
1289
1287
// https://docs.go-cqhttp.org/api/#%E8%8E%B7%E5%8F%96%E7%BE%A4%E7%B3%BB%E7%BB%9F%E6%B6%88%E6%81%AF
1290
1288
// @route(get_group_system_msg)
1291
- // func (bot *CQBot) CQGetGroupSystemMessages() global.MSG {
1292
- // msg , err := bot.Client.GetGroupSystemMessages()
1293
- // if err != nil {
1294
- // log.Warnf("获取群系统消息失败: %v", err)
1295
- // return Failed(100, "SYSTEM_MSG_API_ERROR", err.Error())
1296
- // }
1297
- // return OK(msg )
1298
- // }
1289
+ func (bot * CQBot ) CQGetGroupSystemMessages () global.MSG {
1290
+ msgs , err := bot .Client .GetGroupSystemMessages (false , 20 )
1291
+ if err != nil {
1292
+ log .Warnf ("获取群系统消息失败: %v" , err )
1293
+ return Failed (100 , "SYSTEM_MSG_API_ERROR" , err .Error ())
1294
+ }
1295
+ return OK (msgs )
1296
+ }
1299
1297
1300
1298
// CQGetGroupMessageHistory 获取群消息历史记录
1301
1299
//
1302
1300
// https://docs.go-cqhttp.org/api/#%E8%8E%B7%E5%8F%96%E7%BE%A4%E6%B6%88%E6%81%AF%E5%8E%86%E5%8F%B2%E8%AE%B0%E5%BD%95
1303
1301
// @route(get_group_msg_history)
1304
1302
// @rename(seq->message_seq)
1305
- //func (bot *CQBot) CQGetGroupMessageHistory(groupID int64, seq int64) global.MSG {
1306
- // if g, _ := bot.Client.GetCachedGroupInfo(uint32(groupID)); g == nil {
1307
- // return Failed(100, "GROUP_NOT_FOUND", "群聊不存在")
1308
- // }
1309
- // if seq == 0 {
1310
- // g, err := bot.Client.GetCachedGroupInfo(uint32(groupID))
1311
- // if err != nil {
1312
- // return Failed(100, "GROUP_INFO_API_ERROR", err.Error())
1313
- // }
1314
- // seq = g.LastMsgSeq
1315
- // }
1316
- // msg, err := bot.Client.GetGroupMessages(groupID, int64(math.Max(float64(seq-19), 1)), seq)
1317
- // if err != nil {
1318
- // log.Warnf("获取群历史消息失败: %v", err)
1319
- // return Failed(100, "MESSAGES_API_ERROR", err.Error())
1320
- // }
1321
- // source := message.Source{
1322
- // SourceType: message.SourcePrivate,
1323
- // PrimaryID: 0,
1324
- // }
1325
- // ms := make([]*event, 0, len(msg))
1326
- // for _, m := range msg {
1327
- // bot.checkMedia(m.Elements, groupID)
1328
- // id := bot.InsertGroupMessage(m, source)
1329
- // t := bot.formatGroupMessage(m)
1330
- // t.Others["message_id"] = id
1331
- // ms = append(ms, t)
1332
- // }
1333
- // return OK(global.MSG{
1334
- // "messages": ms,
1335
- // })
1336
- //}
1303
+ func (bot * CQBot ) CQGetGroupMessageHistory (groupID int64 , seq int64 ) global.MSG {
1304
+ if g := bot .Client .GetCachedGroupInfo (uint32 (groupID )); g == nil {
1305
+ return Failed (100 , "GROUP_NOT_FOUND" , "群聊不存在" )
1306
+ }
1307
+ if seq == 0 {
1308
+ g := bot .Client .GetCachedGroupInfo (uint32 (groupID ))
1309
+ seq = int64 (g .LastMsgSeq )
1310
+ }
1311
+ msg , err := bot .Client .GetGroupMessages (uint32 (groupID ), uint32 (math .Max (float64 (seq - 19 ), 1 )), uint32 (seq ))
1312
+ if err != nil {
1313
+ log .Warnf ("获取群历史消息失败: %v" , err )
1314
+ return Failed (100 , "MESSAGES_API_ERROR" , err .Error ())
1315
+ }
1316
+ source := message.Source {
1317
+ SourceType : message .SourcePrivate ,
1318
+ PrimaryID : 0 ,
1319
+ }
1320
+ ms := make ([]* event , 0 , len (msg ))
1321
+ for _ , m := range msg {
1322
+ bot .checkMedia (m .Elements , source )
1323
+ id := bot .InsertGroupMessage (m , source )
1324
+ t := bot .formatGroupMessage (m )
1325
+ t .Others ["message_id" ] = id
1326
+ ms = append (ms , t )
1327
+ }
1328
+ return OK (global.MSG {
1329
+ "messages" : ms ,
1330
+ })
1331
+ }
1337
1332
1338
1333
// CQGetOnlineClients 扩展API-获取当前账号在线客户端列表
1339
1334
//
@@ -1537,11 +1532,12 @@ func (bot *CQBot) CQGetEssenceMessageList(groupID int64) global.MSG {
1537
1532
//
1538
1533
// https://docs.go-cqhttp.org/api/#%E6%A3%80%E6%9F%A5%E9%93%BE%E6%8E%A5%E5%AE%89%E5%85%A8%E6%80%A7
1539
1534
// @route(check_url_safely)
1540
- //func (bot *CQBot) CQCheckURLSafely(url string) global.MSG {
1541
- // return OK(global.MSG{
1542
- // "level": bot.Client.CheckUrlSafely(url),
1543
- // })
1544
- //}
1535
+ func (bot * CQBot ) CQCheckURLSafely (url string ) global.MSG {
1536
+ level , _ := bot .Client .CheckURLSafely (url )
1537
+ return OK (global.MSG {
1538
+ "level" : level ,
1539
+ })
1540
+ }
1545
1541
1546
1542
// CQGetVersionInfo 获取版本信息
1547
1543
//
@@ -1613,24 +1609,26 @@ func (bot *CQBot) CQSendGroupSign(groupID int64) global.MSG {
1613
1609
// return OK(nil)
1614
1610
//}
1615
1611
1616
- // TODO 计划实现的api
1617
1612
// CQMarkMessageAsRead 标记消息已读
1618
1613
// @route(mark_msg_as_read)
1619
1614
// @rename(msg_id->message_id)
1620
- //func (bot *CQBot) CQMarkMessageAsRead(msgID int32) global.MSG {
1621
- // m, err := db.GetMessageByGlobalID(msgID)
1622
- // if err != nil {
1623
- // return Failed(100, "MSG_NOT_FOUND", "消息不存在")
1624
- // }
1625
- // switch o := m.(type) {
1626
- // case *db.StoredGroupMessage:
1627
- // bot.Client.MarkGroupMessageReaded(o.GroupCode, int64(o.Attribute.MessageSeq))
1628
- // return OK(nil)
1629
- // case *db.StoredPrivateMessage:
1630
- // bot.Client.MarkPrivateMessageReaded(o.SessionUin, o.Attribute.Timestamp)
1631
- // }
1632
- // return OK(nil)
1633
- //}
1615
+ func (bot * CQBot ) CQMarkMessageAsRead (msgID int32 ) global.MSG {
1616
+ m , err := db .GetMessageByGlobalID (msgID )
1617
+ if err != nil {
1618
+ return Failed (100 , "MSG_NOT_FOUND" , "消息不存在" )
1619
+ }
1620
+ switch o := m .(type ) {
1621
+ case * db.StoredGroupMessage :
1622
+ if bot .Client .MarkGroupMessageReaded (uint32 (o .GroupCode ), uint32 (o .Attribute .MessageSeq )) != nil {
1623
+ return Failed (100 , "ACTION_FAILED" , "标记群消息已读失败" )
1624
+ }
1625
+ case * db.StoredPrivateMessage :
1626
+ if bot .Client .MarkPrivateMessageReaded (uint32 (o .SessionUin ), uint32 (o .Attribute .Timestamp ), uint32 (o .Attribute .MessageSeq )) != nil {
1627
+ return Failed (100 , "ACTION_FAILED" , "标记私聊消息已读失败" )
1628
+ }
1629
+ }
1630
+ return OK (nil )
1631
+ }
1634
1632
1635
1633
// CQSetQQProfile 设置 QQ 资料
1636
1634
//
0 commit comments