Skip to content

Commit

Permalink
feat(discord, kook): support guild role events
Browse files Browse the repository at this point in the history
  • Loading branch information
shigma committed Jul 2, 2023
1 parent 74adbab commit 3cafe2a
Show file tree
Hide file tree
Showing 5 changed files with 35 additions and 13 deletions.
20 changes: 16 additions & 4 deletions adapters/discord/src/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,20 @@ export async function adaptSession(bot: DiscordBot, input: Discord.GatewayPayloa
session.type = 'reaction-deleted'
session.subtype = 'emoji'
setupReaction(session, input.d)
} else if (input.t === 'GUILD_ROLE_CREATE') {
session.type = 'guild-role-added'
session.guildId = input.d.guild_id
session.roleId = input.d.role.id
session.data.role = decodeRole(input.d.role)
} else if (input.t === 'GUILD_ROLE_UPDATE') {
session.type = 'guild-role-updated'
session.guildId = input.d.guild_id
session.roleId = input.d.role.id
session.data.role = decodeRole(input.d.role)
} else if (input.t === 'GUILD_ROLE_DELETE') {
session.type = 'guild-role-added'
session.guildId = input.d.guild_id
session.roleId = input.d.role_id
} else if (input.t === 'INTERACTION_CREATE' && input.d.type === Discord.Interaction.Type.APPLICATION_COMMAND) {
const data = input.d.data as Discord.InteractionData.ApplicationCommand
const command = bot.commands.find(cmd => cmd.name === data.name)
Expand All @@ -217,9 +231,7 @@ export async function adaptSession(bot: DiscordBot, input: Discord.GatewayPayloa
session.userId = input.d.member.user.id
session.messageId = input.d.id
session.content = ''
session.data = {
command: decodeArgv(data, command),
}
session.data.argv = decodeArgv(data, command)
} else if (input.t === 'CHANNEL_UPDATE') {
session.type = 'channel-updated'
session.guildId = input.d.guild_id
Expand Down Expand Up @@ -252,7 +264,7 @@ export const encodeCommand = (cmd: Universal.Command): Discord.ApplicationComman
})

const decodeArgv = (data: Discord.InteractionData.ApplicationCommand, command: Universal.Command) => {
const result = { name: data.name, arguments: [], options: {} } as Universal.EventData.Command
const result = { name: data.name, arguments: [], options: {} } as Universal.Argv
for (const argument of command.arguments) {
const value = data.options?.find(opt => opt.name === argument.name)?.value
if (value !== undefined) result.arguments.push(value)
Expand Down
2 changes: 1 addition & 1 deletion adapters/kook/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -295,7 +295,7 @@ export interface Channel {
children?: string[]
}

export interface NoticeBody extends Channel, MessageMeta {
export interface NoticeBody extends Channel, MessageMeta, GuildRole {
value: string
msg_id: string
target_id: string
Expand Down
9 changes: 9 additions & 0 deletions adapters/kook/src/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,15 @@ export function adaptSession(bot: Bot, input: any) {
case 'added_role':
case 'deleted_role':
case 'updated_role':
session.type = {
added_role: 'guild-role-added',
deleted_role: 'guild-role-deleted',
updated_role: 'guild-role-updated',
}[type]
session.guildId = input.target_id
session.roleId = '' + body.role_id
session.data.role = decodeRole(body)
break
case 'added_block_list':
case 'deleted_block_list':
case 'added_emoji':
Expand Down
2 changes: 2 additions & 0 deletions packages/core/src/session.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ export namespace Session {
operatorId?: string
targetId?: string
duration?: number
roleId?: string
data?: Universal.EventData
}
}
Expand All @@ -45,6 +46,7 @@ export class Session {
public app: Context['root']

constructor(bot: Bot, payload?: Partial<Session.Payload>) {
this.data = {}
Object.assign(this, payload)
this.selfId = bot.selfId
this.platform = bot.platform
Expand Down
15 changes: 7 additions & 8 deletions packages/core/src/universal.ts
Original file line number Diff line number Diff line change
Expand Up @@ -142,15 +142,14 @@ export namespace Universal {
}
}

export interface EventData {
command?: EventData.Command
export interface Argv {
name: string
arguments: any[]
options: Dict
}

export namespace EventData {
export interface Command {
name: string
arguments: any[]
options: Dict
}
export interface EventData {
role?: Role
argv?: Argv
}
}

0 comments on commit 3cafe2a

Please sign in to comment.