DiscordのBot作った
作ったもの
内容
TwitterかXのリンクを貼った際に、fixupx.comにリンクを投げて帰ってきた値でembedsを作成してReplyするBot
作った経緯
DiscordでTwitterのリンクを貼りづけるとOGPが表示されるんやが、最近それが表示されなくなっているみたい。
エラーなのか意図的なのかは謎でよく知らない
コミュニティ内でリンクを貼った際にOGPが表示されておらず、かといってfixupx.comに変換するのもめんどくさかったのでとりあえずBot作ってみようって話になり作った。
実装
特に複雑なことはしてなくてメッセージを受け取ってからドメインがXかTwitterのリンクがあればfxtwitterに投げ、そのデータを使ってembedsを作成して返信するようにしている。
実装してて面白かったところ
正規表現難しかったけど、やりながら進めていくと案外正規表現楽しい。
const TwitterOrXlinks = message.content.matchAll(
/https?:\/\/(?:www\.)?(?:x|twitter)\.com\/[^/]+\/status\/(?<id>\d+)/g
);
今こんな感じにしてたけど、(?<id>\d+)
この部分でidって名前をつけるとidで取得できるみたい。
const ids = [...TwitterOrXlinks].map((match) => match.groups?.["id"]);
他にも正規表現作っていくと便利そうなのでいつか勉強したいな。
ちなみに正規表現書く時はregex101を使った。 Testする文字列と正規表現書いてそこからどうマッチしているかとか他にもドキュメントがあったり便利。
初めて入れたもの
今回はモブプロで強いエンジニアが同伴してくれてたので、色々使ったことない新しいものも入れてみた。
- dprint
- swc ビルドツールはtypescriptよりRust製のswcがいいみたいなことを聞いたのでとりま使ってみた。typescriptでもbuildできるしフロントエンドBabelとWebpack使えたりと色々やり方多すぎてすぐ変わるからキャッチアップ大変ですな。
終わりに
作ってみたはいいもののなぜかいまだにOGPが表示されるものとそうでないものがあって謎だよね。 DiscordのAPIの書き方が昔描いてた時よりもだいぶ変わってるみたいでそこら辺の勉強にもなったのでよかった。