diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts index 5463911..c351774 100644 --- a/docs/.vitepress/config.mts +++ b/docs/.vitepress/config.mts @@ -1,4 +1,5 @@ -import { defineConfig } from 'vitepress' +import {defineConfig} from 'vitepress' + export default defineConfig({ base:"/qq-group-bot/", themeConfig: { @@ -23,14 +24,11 @@ export default defineConfig({ text: 'API', activeMatch: '/api/', items: [ - { text: '获取频道列表', link: '/api/getGuildList' }, - { text: '获取子频道列表', link: '/api/getChannelList' }, - { text: '获取频道成员列表', link: '/api/getGuildMemberList' }, - { text: '发送消息到子频道', link: '/api/sendGuildMessage' }, - { text: '发送频道私信', link: '/api/sendDirectMessage' }, - { text: '发送群聊消息', link: '/api/sendGroupMessage' }, - { text: '发送私聊消息', link: '/api/sendPrivateMessage' }, - { text: '创建频道私信会话', link: '/api/createDirectSession' }, + { text: '频道', link: '/api/guild' }, + { text: '子频道', link: '/api/channel' }, + { text: '私信', link: '/api/direct' }, + { text: '群', link: '/api/group' }, + { text: '好友', link: '/api/friend' }, ] }, { @@ -72,16 +70,13 @@ export default defineConfig({ ] }, { - text: '公共方法', + text: '接口分组', items: [ - { text: '获取频道列表', link: '/api/getGuildList' }, - { text: '获取子频道列表', link: '/api/getChannelList' }, - { text: '获取频道成员列表', link: '/api/getGuildMemberList' }, - { text: '发送消息到子频道', link: '/api/sendGuildMessage' }, - { text: '发送频道私信', link: '/api/sendDirectMessage' }, - { text: '发送群聊消息', link: '/api/sendGroupMessage' }, - { text: '发送私聊消息', link: '/api/sendPrivateMessage' }, - { text: '创建频道私信会话', link: '/api/createDirectSession' }, + { text: '频道', link: '/api/guild' }, + { text: '子频道', link: '/api/channel' }, + { text: '私信', link: '/api/direct' }, + { text: '群', link: '/api/group' }, + { text: '好友', link: '/api/friend' }, ] } ], diff --git a/docs/src/api/channel.md b/docs/src/api/channel.md new file mode 100644 index 0000000..290e529 --- /dev/null +++ b/docs/src/api/channel.md @@ -0,0 +1,2 @@ +# 子频道 +## 待更新 diff --git a/docs/src/api/common.md b/docs/src/api/common.md new file mode 100644 index 0000000..173b6b4 --- /dev/null +++ b/docs/src/api/common.md @@ -0,0 +1,6 @@ +# 公共接口 +## 1. 获取机器人信息 +- getSelfInfo + +| 参数名 | 类型 | 是否必填 | 描述| +|-----|----|------|----| diff --git a/docs/src/api/createDirectSession.md b/docs/src/api/createDirectSession.md deleted file mode 100644 index 78ada25..0000000 --- a/docs/src/api/createDirectSession.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -layout: doc ---- -# createDirectSession -- 用于和用户创建私信会话 -- 需传入对应的频道id和用户id -- 将返回[DMS](https://bot.q.qq.com/wiki/develop/api-v2/server-inter/message/dms/model.html#dms) -## 使用示例 -```javascript -// ... -// 创建私信会话 -const session=await bot.createDirectSession('abc','def') -// 发送私信 -bot.sendDirectMessage(session.guild_id,'hello') -``` diff --git a/docs/src/api/direct.md b/docs/src/api/direct.md new file mode 100644 index 0000000..8edd7f7 --- /dev/null +++ b/docs/src/api/direct.md @@ -0,0 +1,33 @@ +# 频道私信 +## 创建频道私信会话 +- createDirectSession +- 将返回[DMS](https://bot.q.qq.com/wiki/develop/api-v2/server-inter/message/dms/model.html#dms) + +| 参数名 | 类型 | 是否必填 | 描述| +|-----|----|------|----| +| guild_id|string|是|频道id| +| user_id|string|是|成员id| +## 发送频道私信 +- sendDirectMessage +- 将返回发送的消息对象 + +| 参数名 | 类型 | 是否必填 | 描述 | +|----------|----------|------|-----------| +| guild_id | string |是| 私信会话的频道id | +| message | Sendable |是| 消息内容 | +## 获取频道私信 +- getDirectMessage +- 将返回发送的消息对象 + +| 参数名 | 类型 | 是否必填 | 描述 | +|------------|----------|------|-----------| +| guild_id | string |是| 私信会话的频道id | +| message_id | Sendable |是| 消息id | +## 撤回频道私信 +- recallDirectMessage +- 将返回是否撤回成功 + +| 参数名 | 类型 | 是否必填 | 描述 | +|------------|----------|------|-----------| +| guild_id | string |是| 私信会话的频道id | +| message_id | Sendable |是| 消息id | diff --git a/docs/src/api/friend.md b/docs/src/api/friend.md new file mode 100644 index 0000000..22dbe6d --- /dev/null +++ b/docs/src/api/friend.md @@ -0,0 +1,13 @@ +# 好友 +::: tip +需要机器人拥有私聊权限 +::: +## 发送私聊消息 +- sendPrivateMessage +- 将返回发送的消息对象 + +| 参数名 | 类型 | 是否必填 | 描述 | +|---------|----------|------|------| +| user_id | string |是| 好友id | +| message | Sendable |是| 消息内容 | +``` diff --git a/docs/src/api/getChannelList.md b/docs/src/api/getChannelList.md deleted file mode 100644 index f1b7b9a..0000000 --- a/docs/src/api/getChannelList.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: doc ---- -# getChannelList -- 用于获取某个频道的子频道列表 -- 需传入对应的频道id -- 将返回 [Channel](https://bot.q.qq.com/wiki/develop/api-v2/server-inter/channel/manage/channel/model.html#channel)对象 -## 使用示例 -```javascript -// ... -const channelList=await bot.getChannelList("abc") -console.log(channelList) -``` -## Channel - - diff --git a/docs/src/api/getGuildList.md b/docs/src/api/getGuildList.md deleted file mode 100644 index ccf9288..0000000 --- a/docs/src/api/getGuildList.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -layout: doc ---- -# getGuildList -- 用于获取机器人加入的频道列表 -- 将返回[Guild](https://bot.q.qq.com/wiki/develop/api-v2/server-inter/channel/manage/guild/model.html#guild)[] -## 使用示例 -```javascript -// ... -const guildList=await bot.getGuildList() -console.log(guildList) -``` - diff --git a/docs/src/api/getGuildMemberList.md b/docs/src/api/getGuildMemberList.md deleted file mode 100644 index afaf38b..0000000 --- a/docs/src/api/getGuildMemberList.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -layout: doc ---- -::: tip -仅私域机器人可用 -::: -# getGuildMemberList -- 用户获取频道成员列表 -- 需传入频道id -- 将返回[Member](https://bot.q.qq.com/wiki/develop/api-v2/server-inter/channel/role/member/model.html#member)[] -```javascript -// ... -const memberList=await bot.getGuildMemberList() -console.log(memberList) -``` diff --git a/docs/src/api/group.md b/docs/src/api/group.md new file mode 100644 index 0000000..a505ef1 --- /dev/null +++ b/docs/src/api/group.md @@ -0,0 +1,13 @@ +# 群 +::: tip +需要机器人拥有群聊权限 +::: +## 发送群消息 +- sendGroupMessage +- 将返回发送的消息对象 + +| 参数名 | 类型 | 是否必填 | 描述 | +|----------|----------|------|------| +| group_id | string |是| 群id | +| message | Sendable |是| 消息内容 | +``` diff --git a/docs/src/api/guild.md b/docs/src/api/guild.md new file mode 100644 index 0000000..a2882d8 --- /dev/null +++ b/docs/src/api/guild.md @@ -0,0 +1,61 @@ +# 频道 +## 获取频道列表 +- getGuildList +- 将返回[Guild](https://bot.q.qq.com/wiki/develop/api-v2/server-inter/channel/manage/guild/model.html#guild)[] + +| 参数名 | 类型 | 是否必填 | 描述| +|-----|----|------|----| + +## 获取子频道列表 +- getChannelList +- 将返回 [Channel](https://bot.q.qq.com/wiki/develop/api-v2/server-inter/channel/manage/channel/model.html#channel)对象 + +| 参数名 | 类型 | 是否必填 | 描述| +|-----|----|------|----| +| guild_id|string|是|频道id| +## 获取频道成员列表 +::: tip +仅私域机器人可用 +::: +- getGuildMemberList +- 将返回[Member](https://bot.q.qq.com/wiki/develop/api-v2/server-inter/channel/role/member/model.html#member)[] + +| 参数名 | 类型 | 是否必填 | 描述| +|-----|----|------|----| +| guild_id|string|是|频道id| +## 发送频道消息 +- sendGuildMessage +- 将返回发送的消息对象 + +| 参数名 | 类型 | 是否必填 | 描述 | +|------------|----------|------|-------| +| channel_id | string |是| 子频道id | +| message | Sendable |是| 消息内容 | +## 获取频道消息 +- getGuildMessage +- 将返回发送的消息对象 + +| 参数名 | 类型 | 是否必填 | 描述 | +|------------|--------|------|-------| +| channel_id | string |是| 子频道id | +| message_id | string |是| 消息id | +## 撤回频道消息 +- recallGuildMessage +- 须传入对应子频道的channel_id和message_id +- 将返回是否撤回成功 + +| 参数名 | 类型 | 是否必填 | 描述 | +|------------|--------|------|-------| +| channel_id | string |是| 子频道id | +| message_id | string |是| 消息id | +## 禁言频道成员 +- muteGuildMember + +| 参数名 | 类型 | 是否必填 | 描述 | +|-----------|--------|------|------| +| guild_id | string |是| 频道id | +| member_id | string |是| 成员id | + + + + diff --git a/docs/src/api/sendDirectMessage.md b/docs/src/api/sendDirectMessage.md deleted file mode 100644 index 37947fb..0000000 --- a/docs/src/api/sendDirectMessage.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -layout: doc ---- -# sendDirectMessage -- 用于发送私信消息 -- 须传入私信会话的guild_id和[Sendable](../segment/index.md#sendable) -- 将返回发送的消息对象 -## 使用示例 -```javascript -// ... -// 创建私信会话 -const session=await bot.createDirectSession('abc','def') -// 发送私信 -bot.sendDirectMessage(session.guild_id,'hello') -``` diff --git a/docs/src/api/sendGroupMessage.md b/docs/src/api/sendGroupMessage.md deleted file mode 100644 index 7adbafe..0000000 --- a/docs/src/api/sendGroupMessage.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: doc ---- -::: tip -需要机器人拥有群聊权限 -::: -# sendGroupMessage -- 用于发送群消息 -- 须传入对应群聊的group_id和[Sendable](../segment/index.md#sendable) -- 将返回发送的消息对象 -## 使用示例 -```javascript -// ... -// 发送群消息 -bot.sendGroupMessage('abc','hello') -``` diff --git a/docs/src/api/sendGuildMessage.md b/docs/src/api/sendGuildMessage.md deleted file mode 100644 index cfdc8e3..0000000 --- a/docs/src/api/sendGuildMessage.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -layout: doc ---- -# sendGuildMessage -- 用于发送频道消息 -- 须传入对应子频道的channel_id和[Sendable](../segment/index.md#sendable) -- 将返回发送的消息对象 -## 使用示例 -```javascript -// ... -// 发送群消息 -bot.sendGuildMessage('abc','hello') -``` diff --git a/docs/src/api/sendPrivateMessage.md b/docs/src/api/sendPrivateMessage.md deleted file mode 100644 index 6e21592..0000000 --- a/docs/src/api/sendPrivateMessage.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: doc ---- -::: tip -需要机器人拥有私聊权限 -::: -# sendPrivateMessage -- 用于发送私聊消息 -- 须传入对应好友的user_id和[Sendable](../segment/index.md#sendable) -- 将返回发送的消息对象 -## 使用示例 -```javascript -// ... -// 发送群消息 -bot.sendPrivateMessage('abc','hello') -``` diff --git a/docs/src/config.md b/docs/src/config.md index 6074ffa..0734a9c 100644 --- a/docs/src/config.md +++ b/docs/src/config.md @@ -8,7 +8,6 @@ layout: doc |----------|---------------------|---------------------------------------|-------| | appid | string | qq机器人的appid 必填 | - | | secret | string | qq机器人的secret 必填 | - | -| token | string | qq机器人的secret | - | | sandbox | boolean | 是否使用沙箱环境 | false | | intents | [Intent](#intent)[] | 监听哪些官方事件 必填 | - | | logLevel | string | 输出日志等级 | info | diff --git a/docs/src/interface/index.md b/docs/src/interface/index.md new file mode 100644 index 0000000..127dd86 --- /dev/null +++ b/docs/src/interface/index.md @@ -0,0 +1 @@ +## Interface diff --git a/src/bot.ts b/src/bot.ts index 9364899..17505d6 100644 --- a/src/bot.ts +++ b/src/bot.ts @@ -26,7 +26,7 @@ import {AxiosResponse} from "axios"; import {GuildMember} from "@/entries/guildMember"; import {User} from "@/entries/user"; import {ActionNoticeEvent} from "@/event/notice"; -import {GuildMessageEvent} from "@/event"; +import {GuildMessageEvent, PrivateMessageEvent} from "@/event"; export class Bot extends QQBot { @@ -476,6 +476,31 @@ export class Bot extends QQBot { async getFriendInfo(friend_id: string) { throw UnsupportedMethodError } + /** + * 发送私聊信息 + * @param user_id + * @param message + * @param source + */ + async sendPrivateMessage(user_id: string, message: Sendable, source?: Quotable) { + const sender = new Sender(this, `/v2/users/${user_id}`, message, source) + const result = await sender.sendMsg() + this.logger.info(`send to User(${user_id}): ${sender.brief}`) + return result + } + /** + * 发送群消息 + * @param group_id + * @param message + * @param source + */ + async sendGroupMessage(group_id: string, message: Sendable, source?: Quotable) { + const sender = new Sender(this, `/v2/groups/${group_id}`, message, source) + const result = await sender.sendMsg() + this.logger.info(`send to Group(${group_id}): ${sender.brief}`) + return result + } + /** * 获取子频道列表 */ @@ -527,18 +552,6 @@ export class Bot extends QQBot { } as DMS } - /** - * 发送私聊信息 - * @param user_id - * @param message - * @param source - */ - async sendPrivateMessage(user_id: string, message: Sendable, source?: Quotable) { - const sender = new Sender(this, `/v2/users/${user_id}`, message, source) - const result = await sender.sendMsg() - this.logger.info(`send to User(${user_id}): ${sender.brief}`) - return result - } /** * 发送频道私信 @@ -553,6 +566,15 @@ export class Bot extends QQBot { return result } + /** + * 获取频道私信 + * @param guild_id + * @param message_id + */ + async getDirectMessage(guild_id:string,message_id:string){ + const {data:payload}=await this.request.get(`/dms/${guild_id}/messages/${message_id}`) + return this.processPayload(payload.id,`message.direct`,payload) as PrivateMessageEvent + } /** * 撤回频道私信 * @param guild_id @@ -573,7 +595,7 @@ export class Bot extends QQBot { async sendGuildMessage(channel_id: string, message: Sendable, source?: Quotable) { const sender = new Sender(this, `/channels/${channel_id}`, message, source) const result = await sender.sendMsg() - this.logger.info(`send to Channel(${channel_id}): ${sender.brief}`) + this.logger.info(`send to Channel(${channel_id}/messages): ${sender.brief}`) return result } @@ -587,19 +609,6 @@ export class Bot extends QQBot { const result = await this.request.delete(`/channels/${channel_id}/messages/${message_id}?hidetip=${!!hidetip}`) return result.status === 200 } - - /** - * 发送群消息 - * @param group_id - * @param message - * @param source - */ - async sendGroupMessage(group_id: string, message: Sendable, source?: Quotable) { - const sender = new Sender(this, `/v2/groups/${group_id}`, message, source) - const result = await sender.sendMsg() - this.logger.info(`send to Group(${group_id}): ${sender.brief}`) - return result - } /** * 对频道消息进行表态 * @param channel_id {string} 子频道id @@ -662,17 +671,6 @@ export class Bot extends QQBot { } return await getMembers() } - - /** - * 回应操作 - * @param action_id {string} 操作id - * @param code {number} - */ - async replyAction(action_id: string,code:ActionNoticeEvent.ReplyCode=0) { - const result = await this.request.put(`/interactions/${action_id}`, { code }) - return result.status === 200 - } - /** 获取频道日程 * @param channel_id {string} * @param since {number} @@ -796,6 +794,17 @@ export class Bot extends QQBot { const result=await this.request.delete(`/channels/${channel_id}/threads/${thread_id}`) return result.status===204 } + + /** + * 回应操作 + * @param action_id {string} 操作id + * @param code {number} + */ + async replyAction(action_id: string,code:ActionNoticeEvent.ReplyCode=0) { + const result = await this.request.put(`/interactions/${action_id}`, { code }) + return result.status === 200 + } + async start() { await this.sessionManager.start() return this diff --git a/src/event/message.ts b/src/event/message.ts index 32170e1..4c69682 100644 --- a/src/event/message.ts +++ b/src/event/message.ts @@ -12,7 +12,9 @@ export class PrivateMessageEvent extends Message implements MessageEvent { this.message_type = 'private' this.sub_type = sub_type } - + async recall(){ + if(this.sub_type==='direct') return this.bot.recallDirectMessage(this.guild_id,this.message_id) + } async reply(message: Sendable) { return this.sub_type === 'direct' ? this.bot.sendDirectMessage(this.guild_id, message, this) :