message component interactions
This commit is contained in:
parent
17e74dce45
commit
b97ec3c225
18 changed files with 461 additions and 86 deletions
184
test/components.ts
Normal file
184
test/components.ts
Normal file
|
@ -0,0 +1,184 @@
|
|||
import {
|
||||
CommandClient,
|
||||
Command,
|
||||
CommandContext,
|
||||
ButtonStyle,
|
||||
MessageComponentType,
|
||||
isMessageComponentInteraction,
|
||||
MessageComponentInteraction,
|
||||
Message
|
||||
} from '../mod.ts'
|
||||
import { TOKEN } from './config.ts'
|
||||
|
||||
const client = new CommandClient({
|
||||
prefix: '.',
|
||||
spacesAfterPrefix: true
|
||||
})
|
||||
|
||||
enum Choice {
|
||||
Rock,
|
||||
Paper,
|
||||
Scissor
|
||||
}
|
||||
|
||||
const games = new Map<
|
||||
string,
|
||||
{ user: number; bot: number; msg: Message; txt: string }
|
||||
>()
|
||||
const components = [
|
||||
{
|
||||
type: MessageComponentType.ActionRow,
|
||||
components: [
|
||||
{
|
||||
type: MessageComponentType.Button,
|
||||
style: ButtonStyle.Primary,
|
||||
label: 'Rock',
|
||||
customID: 'rps::Rock'
|
||||
},
|
||||
{
|
||||
type: MessageComponentType.Button,
|
||||
style: ButtonStyle.Primary,
|
||||
label: 'Paper',
|
||||
customID: 'rps::Paper'
|
||||
},
|
||||
{
|
||||
type: MessageComponentType.Button,
|
||||
style: ButtonStyle.Primary,
|
||||
label: 'Scissor',
|
||||
customID: 'rps::Scissor'
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
|
||||
client.once('ready', () => {
|
||||
console.log('Ready!')
|
||||
})
|
||||
|
||||
client.commands.add(
|
||||
class extends Command {
|
||||
name = 'button'
|
||||
|
||||
execute(ctx: CommandContext): void {
|
||||
ctx.channel.send('Test Buttons', {
|
||||
components: [
|
||||
{
|
||||
type: MessageComponentType.ActionRow,
|
||||
components: [
|
||||
{
|
||||
type: MessageComponentType.Button,
|
||||
label: 'Primary',
|
||||
style: ButtonStyle.Primary,
|
||||
customID: '1'
|
||||
},
|
||||
{
|
||||
type: MessageComponentType.Button,
|
||||
label: 'Secondary',
|
||||
style: ButtonStyle.Secondary,
|
||||
customID: '2'
|
||||
},
|
||||
{
|
||||
type: MessageComponentType.Button,
|
||||
label: 'Destructive',
|
||||
style: ButtonStyle.Destructive,
|
||||
customID: '3'
|
||||
},
|
||||
{
|
||||
type: MessageComponentType.Button,
|
||||
label: 'Success',
|
||||
style: ButtonStyle.Success,
|
||||
customID: '4'
|
||||
},
|
||||
{
|
||||
type: MessageComponentType.Button,
|
||||
label: 'Link',
|
||||
style: ButtonStyle.Link,
|
||||
url: 'https://www.youtube.com/watch?v=dQw4w9WgXcQ'
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
})
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
client.commands.add(
|
||||
class extends Command {
|
||||
name = 'play'
|
||||
|
||||
execute(ctx: CommandContext): any {
|
||||
if (games.has(ctx.author.id))
|
||||
return ctx.message.reply('You are already playing!')
|
||||
ctx.channel
|
||||
.send('Game starts now!', {
|
||||
components
|
||||
})
|
||||
.then((msg) => {
|
||||
games.set(ctx.author.id, {
|
||||
user: 0,
|
||||
bot: 0,
|
||||
msg,
|
||||
txt: 'Game starts now!'
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
// client.on('raw', (e, d) => {
|
||||
// if (e === 'INTERACTION_CREATE') console.log(e, d)
|
||||
// })
|
||||
|
||||
client.on('interactionCreate', (i) => {
|
||||
if (isMessageComponentInteraction(i) === true) {
|
||||
const d = i as MessageComponentInteraction
|
||||
|
||||
if (d.customID.startsWith('rps::') === true) {
|
||||
const game = games.get(d.user.id)
|
||||
if (game === undefined) return
|
||||
const choice = d.customID.split('::')[1]
|
||||
const c: number = Number(Choice[choice as any])
|
||||
const rand = Math.floor(Math.random() * 2)
|
||||
|
||||
game.txt += '\n\n'
|
||||
game.txt += `You: ${choice}, Bot: ${Choice[rand]}`
|
||||
let msg
|
||||
if (rand === c) {
|
||||
msg = 'Both chose ' + Choice[rand] + '!'
|
||||
} else if (
|
||||
(rand === 0 && c === 2) ||
|
||||
(rand === 1 && c === 0) ||
|
||||
(rand === 2 && c === 1)
|
||||
) {
|
||||
msg = 'Bot got one point!'
|
||||
game.bot++
|
||||
} else {
|
||||
msg = 'You got one point!'
|
||||
game.user++
|
||||
}
|
||||
game.txt += '\nInfo: ' + msg
|
||||
|
||||
if (game.bot === 5 || game.user === 5) {
|
||||
const won = game.bot === 5 ? 'Bot' : 'You'
|
||||
game.msg.edit(
|
||||
`${won} won!\n\n**Points:** You: ${game.user} | Bot: ${game.bot}`,
|
||||
{
|
||||
components: []
|
||||
}
|
||||
)
|
||||
games.delete(d.user.id)
|
||||
} else {
|
||||
game.msg.edit(
|
||||
`${game.txt}\n\n**Points:** You: ${game.user} | Bot: ${game.bot}`,
|
||||
{
|
||||
components
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
console.log('Connecting...')
|
||||
client.connect(TOKEN, ['GUILDS', 'GUILD_MESSAGES', 'DIRECT_MESSAGES'])
|
|
@ -8,12 +8,12 @@ import {
|
|||
CommandContext,
|
||||
Extension,
|
||||
Collection,
|
||||
GuildTextChannel
|
||||
} from '../../mod.ts'
|
||||
GuildTextChannel,
|
||||
slash,
|
||||
SlashCommandInteraction
|
||||
} from '../mod.ts'
|
||||
import { LL_IP, LL_PASS, LL_PORT, TOKEN } from './config.ts'
|
||||
import { Manager, Player } from 'https://deno.land/x/lavadeno/mod.ts'
|
||||
import { Interaction } from '../structures/slash.ts'
|
||||
import { slash } from '../client/mod.ts'
|
||||
// import { SlashCommandOptionType } from '../types/slash.ts'
|
||||
|
||||
export const nodes = [
|
||||
|
@ -58,12 +58,12 @@ class MyClient extends CommandClient {
|
|||
}
|
||||
|
||||
@subslash('cmd', 'sub-cmd-no-grp')
|
||||
subCmdNoGroup(d: Interaction): void {
|
||||
subCmdNoGroup(d: SlashCommandInteraction): void {
|
||||
d.respond({ content: 'sub-cmd-no-group worked' })
|
||||
}
|
||||
|
||||
@groupslash('cmd', 'sub-cmd-group', 'sub-cmd')
|
||||
subCmdGroup(d: Interaction): void {
|
||||
subCmdGroup(d: SlashCommandInteraction): void {
|
||||
d.respond({ content: 'sub-cmd-group worked' })
|
||||
}
|
||||
|
||||
|
@ -79,7 +79,7 @@ class MyClient extends CommandClient {
|
|||
}
|
||||
|
||||
@slash()
|
||||
run(d: Interaction): void {
|
||||
run(d: SlashCommandInteraction): void {
|
||||
console.log(d.name)
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue