Skip to content

Commit

Permalink
feat(qq): add internal api
Browse files Browse the repository at this point in the history
  • Loading branch information
XxLittleCxX committed Sep 30, 2023
1 parent 9f31fc2 commit 379f55b
Show file tree
Hide file tree
Showing 3 changed files with 666 additions and 38 deletions.
2 changes: 1 addition & 1 deletion adapters/qq/src/bot.ts
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ export class QQBot extends Bot<QQBot.Config> {
}

async kickGuildMember(guildId: string, userId: string) {
await this.internal.deleteGuildMember(guildId, userId)
await this.internal.removeGuildMember(guildId, userId)
}

async muteGuildMember(guildId: string, userId: string, duration: number) {
Expand Down
228 changes: 204 additions & 24 deletions adapters/qq/src/internal.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,6 @@ export class Internal {
return this.http().get<QQ.User>('/users/@me')
}

/** https://bot.q.qq.com/wiki/develop/api/openapi/dms/post_dms.html */
async createDMS(recipient_id: string, source_guild_id: string) {
return this.http().post<QQ.DMS>('/users/@me/dms', {
recipient_id, source_guild_id,
})
}

async getMessage(channelId: string, messageId: string) {
const { message } = await this.http().get<{
message: QQ.Message
}>(`/channels/${channelId}/messages/${messageId}`)
return message
}

async getGuilds(params?: Partial<{
before: string
after: string
Expand All @@ -44,31 +30,208 @@ export class Internal {
return this.http().get<QQ.Channel>(`/channels/${channel_id}`)
}

async createGuildChannel(guild_id: string, params: QQ.CreateGuildParams) {
return this.http().post<QQ.Channel>(`/guilds/${guild_id}/channels`, params)
}

async modifyChannel(channel_id: string, params: QQ.ModifyGuildParams) {
return this.http().patch<QQ.Channel>(`/channels/${channel_id}/channels`, params)
}

async deleteChannel(channel_id: string) {
return this.http().delete(`/channels/${channel_id}`)
}

async getChannelOnlineNums(channel_id: string) {
return this.http().get<{
online_nums: number
}>(`/channels/${channel_id}/online_nums`)
}

async getGuildMembers(guild_id: string, params?: Partial<{
after: string
limit: number
}>) {
return this.http().get<QQ.Member[]>(`/guilds/${guild_id}/members`, { params })
}

async getGuildRoleMembers(guild_id: string, role_id: string, nextInput = '0') {
return await this.http().get<{
data: QQ.Member[]
next: string
}>(`/guilds/${guild_id}/roles/${role_id}/members`, {
params: {
start_index: nextInput,
limit: 0,
},
})
}

async getGuildMember(guild_id: string, user_id: string) {
return this.http().get<QQ.Member>(`/guilds/${guild_id}/members/${user_id}`)
}

async deleteGuildMember(guild_id: string, user_id: string) {
async removeGuildMember(guild_id: string, user_id: string) {
return this.http().delete(`/guilds/${guild_id}/members/${user_id}`)
}

async getGuildRoles(guild_id: string) {
return this.http().get<QQ.Role[]>(`/guilds/${guild_id}/roles`)
}

async createGuildRole(guild_id: string, params: QQ.CreateGuildRoleParams) {
return this.http().post<{
role_id: string
role: QQ.Role
}>(`/guilds/${guild_id}/roles`, params)
}

async modifyGuildRole(guild_id: string, role_id: string, params: QQ.CreateGuildRoleParams) {
return this.http().patch<{
guild_id: string
role_id: string
role: QQ.Role
}>(`/guilds/${guild_id}/roles/${role_id}`, params)
}

async removeGuildRole(guild_id: string, role_id: string) {
return this.http().delete(`/guilds/${guild_id}/roles/${role_id}`)
}

async addGuildMemberRole(guild_id: string, user_id: string, role_id: string, channel_id?: string) {
return this.http().put(`/guilds/${guild_id}/members/${user_id}/roles/${role_id}`, channel_id ? {
channel: { id: channel_id },
} : {})
}

async removeGuildMemberRole(guild_id: string, user_id: string, role_id: string, channel_id?: string) {
return this.http().axios({
url: `/guilds/${guild_id}/members/${user_id}/roles/${role_id}`,
method: 'delete',
data: channel_id ? {
channel: { id: channel_id },
} : {},
})
}

async getChannelMemberPermissions(channel_id: string, user_id: string) {
return this.http().get<QQ.ChannelPermissions>(`/channels/${channel_id}/members/${user_id}/permissions`)
}

async modifyChannelMemberPermissions(channel_id: string, user_id: string, params: {
add: string
remove: string
}) {
return this.http().put<QQ.ChannelPermissions>(`/channels/${channel_id}/members/${user_id}/permissions`, params)
}

async getChannelRole(channel_id: string, role_id: string) {
return this.http().get<QQ.ChannelPermissions>(`/channels/${channel_id}/roles/${role_id}/permissions`)
}

async modifyChannelRole(channel_id: string, role_id: string, params: {
add: string
remove: string
}) {
return this.http().put(`/channels/${channel_id}/roles/${role_id}/permissions`, params)
}

async getMessage(channelId: string, messageId: string) {
const { message } = await this.http().get<{
message: QQ.Message
}>(`/channels/${channelId}/messages/${messageId}`)
return message
}

async deleteMessage(channel_id: string, message_id: string, hidetip = false) {
return this.http().delete(`/channels/${channel_id}/messages/${message_id}?hidetip=${hidetip.toString()}`)
}

async getMessageSetting(guild_id: string) {
return this.http().get<QQ.MessageSetting>(`/guilds/${guild_id}/messages/setting`)
}

async createDMS(recipient_id: string, source_guild_id: string) {
return this.http().post<QQ.DMS>('/users/@me/dms', {
recipient_id, source_guild_id,
})
}

async deleteDM(guild_id: string, message_id: string, hidetip = false) {
// guild_id 是 createDMS 之后的 id
return this.http().delete(`/dms/${guild_id}/messages/${message_id}?hidetip=${hidetip.toString()}`)
}

async muteGuild(guild_id: string, duration: number) {
return this.http().patch(`/guilds/${guild_id}/mute`, {
mute_seconds: duration / 1000,
})
}

async muteGuildMember(guild_id: string, user_id: string, duration: number) {
return this.http().patch(`/guilds/${guild_id}/members/${user_id}/mute`, {
mute_seconds: duration / 1000,
})
}

async muteGuildMembers(guild_id: string, user_ids: string[], duration: number) {
return this.http().patch<{
user_ids: string[]
}>(`/guilds/${guild_id}/mute`, {
mute_seconds: duration / 1000,
user_ids,
})
}

async createGuildAnnounce(guild_id: string, params: Partial<QQ.CreateGuildAnnounceParams>) {
return this.http().post<QQ.Announces>(`/guilds/${guild_id}/announces`, params)
}

async removeGuildAnnounce(guild_id: string, message_id: string) {
return this.http().delete(`/guilds/${guild_id}/announces/${message_id}`)
}

async createPinsMessage(channel_id: string, message_id: string) {
return this.http().put<QQ.PinsMessage>(`/channels/${channel_id}/pins/${message_id}`)
}

async removePinsMessage(channel_id: string, message_id: string) {
return this.http().delete(`/channels/${channel_id}/pins/${message_id}`)
}

async getPinsMessage(channel_id: string) {
return this.http().get<QQ.PinsMessage[]>(`/channels/${channel_id}/pins`)
}

// @TODO test: since
async getSchedules(channel_id: string, since?: number) {
return this.http().get<QQ.Schedule[]>(`/channels/${channel_id}/schedules?since=${since ?? ''}`)
}

async getSchedule(channel_id: string, schedule_id: string) {
return this.http().get<QQ.Schedule>(`/channels/${channel_id}/schedules/${schedule_id}`)
}

async createSchedule(channel_id: string, schedule: QQ.Schedule) {
return this.http().post<QQ.Schedule>(`/channels/${channel_id}/schedules`, schedule)
}

async modifySchedule(channel_id: string, schedule_id: string, schedule: QQ.Schedule) {
return this.http().patch<QQ.Schedule>(`/channels/${channel_id}/schedules/${schedule_id}`, schedule)
}

async removeSchedule(channel_id: string, schedule_id: string) {
return this.http().delete(`/channels/${channel_id}/schedules/${schedule_id}`)
}

async createReaction(channel_id: string, message_id: string, type: string, id: string) {
return this.http().put(`/channels/${channel_id}/messages/${message_id}/reactions/${type}/${id}`)
}

async deleteReaction(channel_id: string, message_id: string, type: string, id: string) {
return this.http().delete(`/channels/${channel_id}/messages/${message_id}/reactions/${type}/${id}`)
}

async getReactions(channel_id: string, message_id: string, type: string, id: string, params?: Partial<{
cookie: string
limit: number
Expand All @@ -82,20 +245,37 @@ export class Internal {
})
}

async createReaction(channel_id: string, message_id: string, type: string, id: string) {
return this.http().put(`/channels/${channel_id}/messages/${message_id}/reactions/${type}/${id}`)
async listThreads(channel_id: string) {
return this.http().get<{
threads: QQ.Forum.Thread[]
is_finish: number
}>(`/channels/${channel_id}/threads`)
}

async deleteReaction(channel_id: string, message_id: string, type: string, id: string) {
return this.http().delete(`/channels/${channel_id}/messages/${message_id}/reactions/${type}/${id}`)
async getThread(channel_id: string, thread_id: string) {
return this.http().get<{
thread: QQ.Forum.Thread
}>(`/channels/${channel_id}/threads/${thread_id}`)
}

async deleteMessage(channel_id: string, message_id: string) {
return this.http().delete(`/channels/${channel_id}/messages/${message_id}`)
async createPost(channel_id: string, data: QQ.CreatePostRequest) {
return this.http().put<{
task_id: string
create_time: string
}>(`/channels/${channel_id}/threads`, data)
}

async deleteDM(guild_id: string, message_id: string) {
// guild_id 是 createDMS 之后的 id
return this.http().delete(`/dms/${guild_id}/messages/${message_id}`)
async removePost(channel_id: string, thread_id: string) {
return this.http().delete(`/channels/${channel_id}/threads/${thread_id}`)
}

async getGuildApiPermissions(guild_id: string) {
return this.http().get<{
apis: QQ.APIPermission[]
}>(`/guilds/${guild_id}/api_permissions`)
}

async createGuildApiPermissionDemand(guild_id: string, data: QQ.APIPermissionDemand) {
return this.http().post<QQ.APIPermissionDemand>(`/guilds/${guild_id}/api_permissions/demand`, data)
}
}
Loading

0 comments on commit 379f55b

Please sign in to comment.