Tips
npm run register
でエラー
コマンド登録の成否とは関係なく、 register.js
を実行できない場合のエラー。
次の修正を検討してみてください。(いずれか、または複合)
- package.json
"type": "module",
- tsconfig.json
"moduleResolution": "Node",
"moduleResolution": "Bundler",
- register.ts
- 他のファイルからインポートするときに
.js
を付ける
import { commands } from './commands.js'
- 他のファイルからインポートするときに
- 環境のアップデート
- Node v23.6.0 または Bun を利用する
どうしてもエラーを解決できないとき
- ファイル分割を諦める
register.ts
をcommands.ts
等に分割しない
- コマンド登録用のURLエンドポイントを生やす
- Hono 等を使いルーティングし、登録用URLを作成する
- 念のため、ベーシック認証等をかける
npm run dev
で開発したい時
本番は、 Cloudflare Workers などのプラットフォームにデプロイするが、開発をローカルで行いたい場合、こちらを参考にしてください。
ライブラリの開発者としては、 npm run dev
はおすすめしていません。(明確な意図があれば問題ありません)
代わりに次のいずれかを検討してください。
- 開発用の Bot アカウントを作成する
- 本番用 Bot に、開発サーバーだけ利用可能な、開発用コマンドを登録する
wrangler dev
でエラー
開発環境で、コマンド登録用のURLエンドポイントにアクセスしたときに発生するエラー。
次の修正をしてみてください。
.env
ファイルを.dev.vars
ファイルにリネーム.gitignore
に.dev.vars
を追加(なければ)
URL 登録時の Validation error
Discord ダッシュボードの INTERACTIONS ENDPOINT URL に URL を登録する際のエラー。
次の修正をしてみてください。
- 登録する URL の
_
(アンダーバー)を-
(ハイフン)に変更aaa_bbb.user.workers.dev
->aaa-bbb.user.workers.dev
絵文字(emoji)に関する注意点
new Button('button-1', 'ボタン').emoji('🔄')
絵文字を設定し Discord へ送信したとき、何も応答しない事があります。
おそらく Discord 側で絵文字ユニコードの字形選択子を適切に認識できてないかもしれません。
字形選択子を排除したと思われる絵文字一覧
いくつかの環境による tips (β)
Hono
const discord = new DiscordHono()discord.command('hello', c => c.res('Discord World'))
const hono = new Hono()hono.get('/', c => c.text('Hono World'))hono.mount('/interaction', discord.fetch)
- ブラウザ
https://YOUER_DOMAIN.com
->Hono World
が表示される
- Discord Bot
/hello
->Discord World
が返答される
- Discord Interaction Endpoint
https://YOUER_DOMAIN.com/interaction
を登録
Deno Deploy
import { DiscordHono } from 'npm:discord-hono'
const app = new DiscordHono()app.command('ping', c => c.res('Pong!!'))
Deno.serve(app.fetch)
Fastly Compute
import { env } from 'fastly:env'import { DiscordHono } from 'discord-hono'
const app = new DiscordHono({ discordEnv: () => ({ APPLICATION_ID: env('DISCORD_APPLICATION_ID'), PUBLIC_KEY: env('DISCORD_PUBLIC_KEY'), TOKEN: env('DISCORD_TOKEN'), }),}).command('ping', c => c.res('Pong!!'))
addEventListener('fetch', event => event.respondWith(app.fetch(event.request, undefined, event)),)