DiscordHono
import { DiscordHono } from 'discord-hono'
const app = new DiscordHono()app.command('ping', c => c.res('Pong!!'))
export default app
.command()
const commands = [ new Command('ping', 'Pong を返答'), new Command('image', 'Image を返答'),]const app = new DiscordHono() .command('ping', c => c.res('Pong!!')) .command('image', c => c.res('Image!!'))
Command()
の第1引数と .command()
の第1引数を一致させてください。
一致した .command()
の第2引数が実行されます。
第1引数に ''
を指定すると、キャッチオールパターンとして機能します。
.component()
const app = new DiscordHono() .command('components', c => c.res({ content: 'まだボタンはクリックされていない', components: new Components().row( new Button('button-1', 'ボタン'), new Button('button-2', '2つ目'), ), }), ) .component('button-1', c => c.update().res('ボタン がクリックされた')) .component('button-2', c => c.update().res('2つ目 がクリックされた'))
コンポーネント要素 Button()
の第1引数と .component()
の第1引数を一致させてください。
一致した .component()
の第2引数が実行されます。
第1引数に ''
を指定すると、キャッチオールパターンとして機能します。
.autocomplete()
const commands = [ new Command('hello', 'command').options( new Option('option', 'selector').autocomplete().required(), ),]const app = new DiscordHono().autocomplete( 'hello', c => c.resAutocomplete( new Autocomplete(c.focused?.value).choices( { name: 'world', value: 'world!!!' }, { name: 'hi', value: 'hi!' }, ), ), c => c.res(c.var.option),)
コマンドの Option()
に .autocomplete()
を付与してください。
Command()
の第1引数と .autocomplete()
の第1引数を一致させてください。
一致した .autocomplete()
の第2引数が選択肢生成用のハンドラ、第3引数が実行用のハンドラです。
.autocomplete()
の第3引数は .command()
の第2引数と同じです。
.modal()
const app = new DiscordHono() .command('modal', c => c.resModal( new Modal('modal-1', 'モーダル タイトル') .row(new TextInput('text-1', 'テキスト')) .row(new TextInput('text-2', '2つ目')), ), ) .modal('modal-1', c => c.res('モーダルが送信された'))
Modal()
の第1引数と .modal()
の第1引数を一致させてください。
一致した .modal()
の第2引数が実行されます。
第1引数に ''
を指定すると、キャッチオールパターンとして機能します。
.cron()
const app = new DiscordHono() .cron('0 0 * * *', async c => { await c.rest('POST', _channels_$_messages, ['CHANNEL_ID'], { content: '毎日投稿', }) }) .cron('', async c => { await c.rest('POST', _channels_$_messages, ['CHANNEL_ID'], { content: '他のCronトリガーの投稿', }) })
name = "example"main = "src/index.ts"compatibility_date = "2024-02-08"[triggers]crons = [ "0 * * * *", "0 0 * * *" ]
.cron()
の第1引数と wrangler.toml の crons を一致させてください。
一致した .cron()
の第2引数が実行されます。
第1引数に ''
を指定すると、キャッチオールパターンとして機能します。
.fetch()
こちらを参照してください。
できるだけ Hono の fetch() と同じようになるようにしています。
.scheduled()
export default app
を使っていれば、.scheduled()
は含まれています。
初期オプション
verify
Cloudflare の環境であれば、使う必要はありません。
import { verifyKey } from 'discord-interactions'const app = new DiscordHono({ verify: verifyKey })
import { verify, PlatformAlgorithm } from 'discord-verify'const app = new DiscordHono({ verify: (...args) => verify(...args, crypto.webcrypto.subtle, PlatformAlgorithm.OldNode),})
discordEnv
Example と同じような環境変数であれば、使う必要はありません。
環境変数を別の名前で保存したときや、Cloudflare 以外の環境の時に利用します。
const app = new DiscordHono({ discordEnv: env => ({ APPLICATION_ID: env.DISCORD_APPLICATION_ID, PUBLIC_KEY: env.DISCORD_PUBLIC_KEY, TOKEN: env.DISCORD_TOKEN, }),})