diff --git a/packages/onebot/src/actions/extended.ts b/packages/onebot/src/actions/extended.ts index 2f481005..22b011c1 100644 --- a/packages/onebot/src/actions/extended.ts +++ b/packages/onebot/src/actions/extended.ts @@ -96,7 +96,7 @@ export function register(h: ApiHandler, ctx: ApiActionContext): void { const userId = asNumber(params.user_id); const targetId = asNumber(params.target_id) || undefined; if (!userId) return failedResponse(RETCODE.BAD_REQUEST, 'user_id is required'); - await ctx.sendFriendPoke(userId, targetId); + await ctx.bridge.apis.interaction.sendPoke(false, userId, targetId); return okResponse(); }); @@ -104,7 +104,7 @@ export function register(h: ApiHandler, ctx: ApiActionContext): void { const groupId = asNumber(params.group_id); const userId = asNumber(params.user_id); if (!groupId || !userId) return failedResponse(RETCODE.BAD_REQUEST, 'group_id and user_id are required'); - await ctx.sendGroupPoke(groupId, userId); + await ctx.bridge.apis.interaction.sendPoke(true, groupId, userId); return okResponse(); }); @@ -113,9 +113,9 @@ export function register(h: ApiHandler, ctx: ApiActionContext): void { const userId = asNumber(params.user_id); if (!userId) return failedResponse(RETCODE.BAD_REQUEST, 'user_id is required'); if (groupId) { - await ctx.sendGroupPoke(groupId, userId); + await ctx.bridge.apis.interaction.sendPoke(true, groupId, userId); } else { - await ctx.sendFriendPoke(userId); + await ctx.bridge.apis.interaction.sendPoke(false, userId); } return okResponse(); }); diff --git a/packages/onebot/src/actions/friend.ts b/packages/onebot/src/actions/friend.ts index 4ea7d205..7e638c99 100644 --- a/packages/onebot/src/actions/friend.ts +++ b/packages/onebot/src/actions/friend.ts @@ -24,7 +24,7 @@ export function register(h: ApiHandler, ctx: ApiActionContext): void { const userId = asNumber(params.user_id); const block = asBoolean(params.block, false); if (!userId) return failedResponse(RETCODE.BAD_REQUEST, 'user_id is required'); - await ctx.handleDeleteFriend(userId, block); + await ctx.bridge.apis.friend.delete(userId, block); return okResponse(); }); } diff --git a/packages/onebot/src/actions/request.ts b/packages/onebot/src/actions/request.ts index cce90b82..e76bade9 100644 --- a/packages/onebot/src/actions/request.ts +++ b/packages/onebot/src/actions/request.ts @@ -7,7 +7,7 @@ export function register(h: ApiHandler, ctx: ApiActionContext): void { const flag = asString(params.flag); const approve = asBoolean(params.approve, true); if (!flag) return failedResponse(RETCODE.BAD_REQUEST, 'flag is required'); - await ctx.handleFriendRequest(flag, approve); + await ctx.bridge.apis.friend.handleRequest(flag, approve); return okResponse(); }); diff --git a/packages/onebot/src/api-handler.ts b/packages/onebot/src/api-handler.ts index a81777ce..f13cac53 100644 --- a/packages/onebot/src/api-handler.ts +++ b/packages/onebot/src/api-handler.ts @@ -71,20 +71,19 @@ export interface ApiActionContext { // stays because it composes through the `getGroupFiles` module // helper (identity-lookup enrichment of uploader names). getGroupFiles: (groupId: number, folderId?: string) => Promise; - // Requests (adapters: rename to OneBot vocabulary) - handleFriendRequest: (flag: string, approve: boolean) => Promise; + // Friend requests: direct via `ctx.bridge.apis.friend.handleRequest`. + // Group requests: stay on ctx because `handleGroupAddRequest` is a + // module helper that does the flag-parsing + group-request lookup + // dance before routing to `bridge.apis.groupAdmin.setAddRequest`. handleGroupRequest: (flag: string, subType: string, approve: boolean, reason: string) => Promise; - // Pokes (adapters: flatten isGroup into bridge.sendPoke signature) - sendFriendPoke: (userId: number, targetId?: number) => Promise; - sendGroupPoke: (groupId: number, userId: number) => Promise; + // Pokes: direct via `ctx.bridge.apis.interaction.sendPoke(isGroup, …)`. // Essence (adapter: bakes the set/unset boolean) setEssenceMsg: (messageId: number) => Promise; deleteEssenceMsg: (messageId: number) => Promise; // Profile reads with OneBot-specific default args getProfileLike: (userId?: number, start?: number, limit?: number) => Promise; getGroupEssence: (groupId: number, pageStart?: number, pageLimit?: number) => Promise; - // Friend deletion (adapter: rename + force-boolean) - handleDeleteFriend: (userId: number, block?: boolean) => Promise; + // Friend deletion: direct via `ctx.bridge.apis.friend.delete(userId, block)`. // Module wrappers / multi-dep compositions getGroupMsgHistory: (groupId: number, messageId?: number, count?: number) => Promise; getFriendMsgHistory: (userId: number, messageId?: number, count?: number) => Promise; @@ -99,12 +98,12 @@ export interface ApiActionContext { setFriendRemark: (userId: number, remark: string) => Promise; setGroupAvatar: (groupId: number, source: string) => Promise; setMsgEmojiLike: (messageId: number, emojiId: string, set: boolean) => Promise; - markGroupMsgAsRead: (groupId: number, sequence: number) => Promise; - markPrivateMsgAsRead: (userId: number, sequence: number) => Promise; + // markGroupMsgAsRead / markPrivateMsgAsRead: direct via + // `ctx.bridge.apis.message.{markGroupRead,markPrivateRead}`. setOnlineStatus: (status: number, extStatus?: number, batteryStatus?: number) => Promise; setProfile: (nickname?: string, personalNote?: string) => Promise; fetchCustomFace: (count?: number) => Promise; - getEmojiLikes: (groupId: number, sequence: number, emojiId: string, emojiType?: number, count?: number, cookie?: string) => Promise<{ users: Array<{ uin: number }>, cookie: string, isLast: boolean }>; + // getEmojiLikes: direct via `ctx.bridge.apis.interaction.getEmojiLikes(...)`. // Web getGroupHonorInfo: (groupId: number, type: WebHonorType | string) => Promise; getGroupEssenceAll: (groupId: number) => Promise; diff --git a/packages/onebot/src/instance-context.ts b/packages/onebot/src/instance-context.ts index a43ca1de..04ebc0a5 100644 --- a/packages/onebot/src/instance-context.ts +++ b/packages/onebot/src/instance-context.ts @@ -119,14 +119,11 @@ export function buildApiContext(ref: OneBotInstanceContext): ApiActionContext { // rest of the area is called directly via `ctx.bridge.apis.groupFile.*`. getGroupFiles: (groupId, folderId) => getGroupFiles(bridge, groupId, folderId), - // Requests — name translation. - handleFriendRequest: (flag, approve) => bridge.apis.friend.handleRequest(flag, approve), + // Group request handling stays here because `handleGroupAddRequest` + // is a module helper (flag parsing + group-request lookup). Friend + // request handling moved to direct `ctx.bridge.apis.friend.handleRequest`. handleGroupRequest: (flag, _subType, approve, reason) => handleGroupAddRequest(bridge, flag, approve, reason), - // Pokes — flatten isGroup into the bridge signature. - sendFriendPoke: (userId, targetId) => bridge.apis.interaction.sendPoke(false, userId, targetId), - sendGroupPoke: (groupId, userId) => bridge.apis.interaction.sendPoke(true, groupId, userId), - // Essence — bake the set/unset boolean. setEssenceMsg: (messageId) => setEssenceMessage(bridge, messageStore, messageId, true), deleteEssenceMsg: (messageId) => setEssenceMessage(bridge, messageStore, messageId, false), @@ -148,7 +145,6 @@ export function buildApiContext(ref: OneBotInstanceContext): ApiActionContext { sendForwardMsg: (messages, groupId) => uploadForwardMessage(ref, messages, groupId), getForwardMsg: (resId) => getForwardMessage(ref, resId), forwardSingleMsg: (messageId, target) => forwardSingleMessage(ref, messageId, target), - handleDeleteFriend: (userId, block) => bridge.apis.friend.delete(userId, !!block), forceFetchClientKey: () => bridge.apis.web.forceFetchClientKey(), setFriendRemark: (userId, remark) => bridge.apis.friend.setRemark(userId, remark), setGroupAvatar: (groupId, source) => bridge.apis.profile.setGroupAvatar(groupId, source), @@ -163,8 +159,6 @@ export function buildApiContext(ref: OneBotInstanceContext): ApiActionContext { if (!meta.isGroup) throw new Error('emoji reactions are not supported on private messages'); await bridge.apis.interaction.setReaction(meta.targetId, meta.sequence, emojiId, set); }, - markGroupMsgAsRead: (groupId, sequence) => bridge.apis.message.markGroupRead(groupId, sequence), - markPrivateMsgAsRead: (userId, sequence) => bridge.apis.message.markPrivateRead(userId, sequence), setOnlineStatus: (status: number, extStatus?: number, batteryStatus?: number) => bridge.apis.profile.setOnlineStatus(status, extStatus, batteryStatus), setProfile: (nickname?: string, personalNote?: string) => bridge.apis.profile.setProfile(nickname, personalNote), @@ -186,7 +180,6 @@ export function buildApiContext(ref: OneBotInstanceContext): ApiActionContext { // Extended fetchCustomFace: (count) => bridge.apis.profile.fetchCustomFace(count), - getEmojiLikes: (groupId, sequence, emojiId, emojiType, count, cookie) => bridge.apis.interaction.getEmojiLikes(groupId, sequence, emojiId, emojiType, count, cookie), // Media lookup. getImageInfo: (file) => getCachedImageInfo(mediaStore, file),