diff --git a/src/models/slashClient.ts b/src/models/slashClient.ts index 3318e05..6917ce8 100644 --- a/src/models/slashClient.ts +++ b/src/models/slashClient.ts @@ -12,8 +12,7 @@ import { Collection } from '../utils/collection.ts' import { Client } from './client.ts' import { RESTManager } from './rest.ts' import { SlashModule } from './slashModule.ts' -import { verify as edverify } from 'https://deno.land/x/ed25519/mod.ts' -import { Buffer } from 'https://deno.land/std@0.80.0/node/buffer.ts' +import { verify as edverify } from 'https://deno.land/x/ed25519@1.0.1/mod.ts' export class SlashCommand { slash: SlashCommandsManager @@ -369,6 +368,8 @@ export interface SlashOptions { publicKey?: string } +const encoder = new TextEncoder() + export class SlashClient { id: string | (() => string) client?: Client @@ -503,24 +504,21 @@ export class SlashClient { } async verifyKey( - rawBody: string | Uint8Array | Buffer, - signature: string, - timestamp: string + rawBody: string | Uint8Array, + signature: string | Uint8Array, + timestamp: string | Uint8Array ): Promise { if (this.publicKey === undefined) throw new Error('Public Key is not present') - return edverify( - signature, - Buffer.concat([ - Buffer.from(timestamp, 'utf-8'), - Buffer.from( - rawBody instanceof Uint8Array - ? new TextDecoder().decode(rawBody) - : rawBody - ) - ]), - this.publicKey - ).catch(() => false) + + const fullBody = new Uint8Array([ + ...(typeof timestamp === 'string' + ? encoder.encode(timestamp) + : timestamp), + ...(typeof rawBody === 'string' ? encoder.encode(rawBody) : rawBody) + ]) + + return edverify(signature, fullBody, this.publicKey).catch(() => false) } async verifyOpineRequest(req: any): Promise { diff --git a/src/test/index.ts b/src/test/index.ts index da0d0bb..3923b5e 100644 --- a/src/test/index.ts +++ b/src/test/index.ts @@ -117,16 +117,7 @@ client.on('messageCreate', async (msg: Message) => { msg.channel.send('Failed...') } } else if (msg.content === '!react') { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - msg.addReaction('😂') - msg.channel.send('x'.repeat(6969), { - embed: new Embed() - .setTitle('pepega'.repeat(6969)) - .setDescription('pepega'.repeat(6969)) - .addField('uwu', 'uwu'.repeat(6969)) - .addField('uwu', 'uwu'.repeat(6969)) - .setFooter('uwu'.repeat(6969)) - }) + msg.addReaction('a:programming:785013658257195008') } else if (msg.content === '!wait_for') { msg.channel.send('Send anything!') const [receivedMsg] = await client.waitFor(