Skip to content

Commit

Permalink
feat: 添加频道权限API
Browse files Browse the repository at this point in the history
  • Loading branch information
zoswing authored and ostli committed Jan 27, 2022
1 parent 90b6a7b commit 8d8c5d0
Show file tree
Hide file tree
Showing 5 changed files with 98 additions and 0 deletions.
47 changes: 47 additions & 0 deletions src/openapi/v1/guiild-permissions.ts
@@ -0,0 +1,47 @@
import {
GuildPermissionRes,
GuildPermissionDemand,
GuildPermissionsAPI,
Config,
OpenAPIRequest,
PermissionDemandToCreate,
} from '@src/types';
import { RestyResponse } from 'resty-client';
import { getURL } from './resource';

export default class GuildPermissions implements GuildPermissionsAPI {
public request: OpenAPIRequest;
public config: Config;
constructor(request: OpenAPIRequest, config: Config) {
this.request = request;
this.config = config;
}

// 获取频道可用权限列表
public permissions(guildID: string): Promise<RestyResponse<GuildPermissionRes>> {
const options = {
method: 'GET' as const,
url: getURL('guildPermissionURI'),
rest: {
guildID,
},
};
return this.request<GuildPermissionRes>(options);
}

// 创建频道 API 接口权限授权链接
public postPermissionDemand(
guildID: string,
permissionDemandObj: PermissionDemandToCreate,
): Promise<RestyResponse<GuildPermissionDemand>> {
const options = {
method: 'POST' as const,
url: getURL('guildPermissionDemandURI'),
rest: {
guildID,
},
data: permissionDemandObj,
};
return this.request<GuildPermissionDemand>(options);
}
}
4 changes: 4 additions & 0 deletions src/openapi/v1/openapi.ts
Expand Up @@ -13,6 +13,7 @@ import Audio from './audio';
import Mute from './mute';
import Announce from './announce';
import Schedule from './schedule';
import GuildPermissions from './guiild-permissions';
import { addUserAgent, addAuthorization, buildUrl } from '@src/utils/utils';
import {
GuildAPI,
Expand All @@ -29,6 +30,7 @@ import {
MuteAPI,
ScheduleAPI,
AnnounceAPI,
GuildPermissionsAPI,
} from '@src/types';

export const apiVersion = 'v1';
Expand All @@ -54,6 +56,7 @@ export class OpenAPI implements IOpenAPI {
public directMessageApi!: DirectMessageAPI;
public channelPermissionsApi!: ChannelPermissionsAPI;
public audioApi!: AudioAPI;
public guildPermissionsApi!: GuildPermissionsAPI;

constructor(config: Config) {
this.config = config;
Expand All @@ -74,6 +77,7 @@ export class OpenAPI implements IOpenAPI {
client.directMessageApi = new DirectMessage(this.request, this.config);
client.channelPermissionsApi = new ChannelPermissions(this.request, this.config);
client.audioApi = new Audio(this.request, this.config);
client.guildPermissionsApi = new GuildPermissions(this.request, this.config);
}
// 基础rest请求
public request<T extends Record<any, any> = any>(options: RequestOptions): Promise<RestyResponse<T>> {
Expand Down
2 changes: 2 additions & 0 deletions src/openapi/v1/resource.ts
Expand Up @@ -26,6 +26,8 @@ const apiMap = {
channelRolePermissionsURI: '/channels/:channelID/roles/:roleID/permissions',
schedulesURI: '/channels/:channelID/schedules',
scheduleURI: '/channels/:channelID/schedules/:scheduleID',
guildPermissionURI: '/guilds/:guildID/api_permission',
guildPermissionDemandURI: '/guilds/:guildID/api_permission/demand',
wsInfo: '/gateway/bot',
};

Expand Down
3 changes: 3 additions & 0 deletions src/types/openapi/index.ts
Expand Up @@ -11,6 +11,7 @@ import { RoleAPI } from './v1/role';
import { MuteAPI } from './v1/mute';
import { AnnounceAPI } from './v1/announce';
import { ScheduleAPI } from './v1/schedule';
import { GuildPermissionsAPI } from './v1/guild-permission';

export type OpenAPIRequest = <T extends Record<any, any> = any>(options: RequestOptions) => Promise<RestyResponse<T>>;

Expand All @@ -35,6 +36,7 @@ export interface IOpenAPI {
directMessageApi: DirectMessageAPI;
channelPermissionsApi: ChannelPermissionsAPI;
audioApi: AudioAPI;
guildPermissionsApi: GuildPermissionsAPI;
}

export type APIVersion = `v${number}`;
Expand Down Expand Up @@ -62,3 +64,4 @@ export * from './v1/role';
export * from './v1/mute';
export * from './v1/announce';
export * from './v1/schedule';
export * from './v1/guild-permission';
42 changes: 42 additions & 0 deletions src/types/openapi/v1/guild-permission.ts
@@ -0,0 +1,42 @@
import { RestyResponse } from 'resty-client';

/**
* ============= GuildPermission API权限接口 =============
*/
export interface GuildPermissionsAPI {
permissions: (guildID: string) => Promise<RestyResponse<GuildPermissionRes>>;
postPermissionDemand: (
guildID: string,
permissionDemandObj: PermissionDemandToCreate,
) => Promise<RestyResponse<GuildPermissionDemand>>;
}

export interface GuildPermission {
path: string; // API 接口名,例如 /guilds/{guild_id}/members/{user_id}
method: string; // 请求方法,例如 GET
desc: string; // API 接口名称,例如 获取频道信
auth_status: number; // 授权状态,auth_stats 为 1 时已授权
}

export interface GuildPermissionRes {
apis: GuildPermission[];
}

export interface GuildPermissionDemand {
guild_id: string; // 申请接口权限的频道 id
channel_id: string; // 接口权限需求授权链接发送的子频道 id
api_identify: GuildPermissionDemandIdentify; // 权限接口唯一标识
title: string; // 接口权限链接中的接口权限描述信息
desc: string; // 接口权限链接中的机器人可使用功能的描述信息
}

export interface PermissionDemandToCreate {
channel_id: string; // 授权链接发送的子频道 ID
api_identify: GuildPermissionDemandIdentify; // api 权限需求标识对象
desc?: string; // 机器人申请对应的 API 接口权限后可以使用功能的描述
}

export interface GuildPermissionDemandIdentify {
path: string; // API 接口名,例如 /guilds/{guild_id}/members/{user_id}
method: string; // 请求方法,例如 GET
}

0 comments on commit 8d8c5d0

Please sign in to comment.