Skip to content

Commit 6d63da4

Browse files
authored
feat: 新增群待办完成和取消功能 (#1764)
- 添加CompleteGroupTodo和CancelGroupTodo方法 - 重构SetGroupTodo使用BaseGroupTodoAction基类 - 更新相关测试用例和依赖配置 Signed-off-by: xboHodx <2679933924@qq.com>
1 parent d849188 commit 6d63da4

19 files changed

Lines changed: 214 additions & 37 deletions

packages/napcat-core/packet/context/operationContext.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,16 @@ export class PacketOperationContext {
4141
await this.context.client.sendOidbPacket(req, true);
4242
}
4343

44+
async CompleteGroupTodo (groupUin: number, msgSeq: string) {
45+
const req = trans.CompleteGroupTodo.build(groupUin, msgSeq);
46+
await this.context.client.sendOidbPacket(req, true);
47+
}
48+
49+
async CancelGroupTodo (groupUin: number, msgSeq: string) {
50+
const req = trans.CancelGroupTodo.build(groupUin, msgSeq);
51+
await this.context.client.sendOidbPacket(req, true);
52+
}
53+
4454
async FetchRkey (timeout: number = 10000) {
4555
const req = trans.FetchRkey.build();
4656
const resp = await this.context.client.sendOidbPacket(req, true, timeout);
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import * as proto from '@/napcat-core/packet/transformer/proto';
2+
import { NapProtoMsg } from 'napcat-protobuf';
3+
import { OidbPacket, PacketTransformer } from '@/napcat-core/packet/transformer/base';
4+
import OidbBase from '@/napcat-core/packet/transformer/oidb/oidbBase';
5+
6+
class CancelGroupTodo extends PacketTransformer<typeof proto.OidbSvcTrpcTcpBase> {
7+
build (peer: number, msgSeq: string): OidbPacket {
8+
const data = new NapProtoMsg(proto.OidbSvcTrpcTcp0XF90).encode({
9+
groupUin: peer,
10+
msgSeq: BigInt(msgSeq),
11+
});
12+
return OidbBase.build(0xF90, 3, data);
13+
}
14+
15+
parse (data: Buffer) {
16+
return OidbBase.parse(data);
17+
}
18+
}
19+
20+
export default new CancelGroupTodo();
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import * as proto from '@/napcat-core/packet/transformer/proto';
2+
import { NapProtoMsg } from 'napcat-protobuf';
3+
import { OidbPacket, PacketTransformer } from '@/napcat-core/packet/transformer/base';
4+
import OidbBase from '@/napcat-core/packet/transformer/oidb/oidbBase';
5+
6+
class CompleteGroupTodo extends PacketTransformer<typeof proto.OidbSvcTrpcTcpBase> {
7+
build (peer: number, msgSeq: string): OidbPacket {
8+
const data = new NapProtoMsg(proto.OidbSvcTrpcTcp0XF90).encode({
9+
groupUin: peer,
10+
msgSeq: BigInt(msgSeq),
11+
});
12+
return OidbBase.build(0xF90, 2, data);
13+
}
14+
15+
parse (data: Buffer) {
16+
return OidbBase.parse(data);
17+
}
18+
}
19+
20+
export default new CompleteGroupTodo();

packages/napcat-core/packet/transformer/action/SetGroupTodo.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import OidbBase from '@/napcat-core/packet/transformer/oidb/oidbBase';
55

66
class SetGroupTodo extends PacketTransformer<typeof proto.OidbSvcTrpcTcpBase> {
77
build (peer: number, msgSeq: string): OidbPacket {
8-
const data = new NapProtoMsg(proto.OidbSvcTrpcTcp0XF90_1).encode({
8+
const data = new NapProtoMsg(proto.OidbSvcTrpcTcp0XF90).encode({
99
groupUin: peer,
1010
msgSeq: BigInt(msgSeq),
1111
});

packages/napcat-core/packet/transformer/action/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,6 @@ export { default as SetSpecialTitle } from './SetSpecialTitle';
88
export { default as ImageOCR } from './ImageOCR';
99
export { default as MoveGroupFile } from './MoveGroupFile';
1010
export { default as RenameGroupFile } from './RenameGroupFile';
11+
export { default as CompleteGroupTodo } from './CompleteGroupTodo';
12+
export { default as CancelGroupTodo } from './CancelGroupTodo';
1113
export { default as SetGroupTodo } from './SetGroupTodo';

packages/napcat-core/packet/transformer/proto/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,4 @@ export * from './oidb/Oidb.0xED3_1';
3131
export * from './oidb/Oidb.0XFE1_2';
3232
export * from './oidb/OidbBase';
3333
export * from './oidb/Oidb.0xE07';
34-
export * from './oidb/Oidb.0xf90_1';
34+
export * from './oidb/Oidb.0xf90';

packages/napcat-core/packet/transformer/proto/oidb/Oidb.0xf90_1.ts renamed to packages/napcat-core/packet/transformer/proto/oidb/Oidb.0xf90.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { ProtoField, ScalarType } from 'napcat-protobuf';
22

3-
export const OidbSvcTrpcTcp0XF90_1 = {
3+
export const OidbSvcTrpcTcp0XF90 = {
44
groupUin: ProtoField(1, ScalarType.UINT32),
55
msgSeq: ProtoField(2, ScalarType.UINT64),
66
};

packages/napcat-onebot/action/example/PacketActionsExamples.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,12 @@ export const PacketActionsExamples = {
1111
payload: { group_id: '123456', message_id: '123456789' },
1212
response: {},
1313
},
14+
CompleteGroupTodo: {
15+
payload: { group_id: '123456', message_id: '123456789' },
16+
response: {},
17+
},
18+
CancelGroupTodo: {
19+
payload: { group_id: '123456', message_id: '123456789' },
20+
response: {},
21+
},
1422
};

packages/napcat-onebot/action/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,8 @@ import SetGroupKickMembers from './extends/SetGroupKickMembers';
127127
import { GetGroupDetailInfo } from './group/GetGroupDetailInfo';
128128
import GetGroupAddRequest from './extends/GetGroupAddRequest';
129129
import { GetCollectionList } from './extends/GetCollectionList';
130+
import { CompleteGroupTodo } from './packet/CompleteGroupTodo';
131+
import { CancelGroupTodo } from './packet/CancelGroupTodo';
130132
import { SetGroupTodo } from './packet/SetGroupTodo';
131133
import { GetQunAlbumList } from './extends/GetQunAlbumList';
132134
import { UploadImageToQunAlbum } from './extends/UploadImageToQunAlbum';
@@ -171,6 +173,8 @@ export function getAllHandlers (obContext: NapCatOneBot11Adapter, core: NapCatCo
171173
new GetQunAlbumList(obContext, core),
172174
new UploadImageToQunAlbum(obContext, core),
173175
new SetGroupTodo(obContext, core),
176+
new CompleteGroupTodo(obContext, core),
177+
new CancelGroupTodo(obContext, core),
174178
new GetGroupDetailInfo(obContext, core),
175179
new SetGroupKickMembers(obContext, core),
176180
new SetGroupAddOption(obContext, core),
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import { MessageUnique } from 'napcat-common/src/message-unique';
2+
import { ChatType, Peer } from 'napcat-core';
3+
import { Static, Type } from '@sinclair/typebox';
4+
import { GetPacketStatusDepends } from '@/napcat-onebot/action/packet/GetPacketStatus';
5+
6+
export const GroupTodoPayloadSchema = Type.Object({
7+
group_id: Type.Union([Type.String(), Type.Number()], { description: '群号' }),
8+
message_id: Type.Optional(Type.String({ description: '消息ID' })),
9+
message_seq: Type.Optional(Type.String({ description: '消息Seq (可选)' })),
10+
});
11+
12+
export type GroupTodoPayload = Static<typeof GroupTodoPayloadSchema>;
13+
14+
export abstract class BaseGroupTodoAction extends GetPacketStatusDepends<GroupTodoPayload, void> {
15+
override payloadSchema = GroupTodoPayloadSchema;
16+
override returnSchema = Type.Null();
17+
override actionTags = ['核心接口'];
18+
19+
protected abstract handleGroupTodo(groupId: number, msgSeq: string): Promise<void>;
20+
21+
async _handle (payload: GroupTodoPayload) {
22+
const groupId = +payload.group_id;
23+
if (payload.message_seq) {
24+
return await this.handleGroupTodo(groupId, payload.message_seq.toString());
25+
}
26+
if (!payload.message_id) {
27+
throw new Error('缺少参数 message_id 或 message_seq');
28+
}
29+
const peer: Peer = {
30+
chatType: ChatType.KCHATTYPEGROUP,
31+
peerUid: payload.group_id.toString(),
32+
};
33+
const { MsgId, Peer } = MessageUnique.getMsgIdAndPeerByShortId(+payload.message_id) ?? { Peer: peer, MsgId: payload.message_id.toString() };
34+
const msg = (await this.core.apis.MsgApi.getMsgsByMsgId(Peer, [MsgId])).msgList[0];
35+
if (!msg) {
36+
throw new Error('消息不存在');
37+
}
38+
await this.handleGroupTodo(groupId, msg.msgSeq);
39+
}
40+
}

0 commit comments

Comments
 (0)