Discord bot
とりあえずChatGPTにGAS使って作れるか聞いてみたmtane0412.icon
chatGPT.icon
Google Apps Script (GAS)を使用してDiscordのBotを作成するには、以下の手順を参考にしてください。ただし、Discord Botの作成には通常Node.jsが使用されるため、Google Apps Scriptは制限が多いのであまり一般的な方法ではありません。それでもGASを使用したい場合、以下の手順で進めることができます。
1. Discord Botの作成:
DiscordのDeveloper Portalで新しいBotを作成します。
こちらにアクセスして、"New Application"をクリックします。 アプリケーション名を入力し、"Create"をクリックします。
左サイドバーの"Bot"セクションを選択し、"Add Bot"をクリックします。
ないので普通にアプリケーションから作ったmtane0412.icon
Botトークンをコピーしておきます。これは後で使用します。
2. Google Apps Scriptのプロジェクト作成:
スクリプトエディタで新しいスクリプトファイルを作成し、以下のようなコードを記述します。
code: (javascript)
function sendDiscordMessage() {
var discordWebhookUrl = "YOUR_DISCORD_WEBHOOK_URL";
var message = "Hello from Google Apps Script!";
var payload = {
"content": message
};
var options = {
"method": "post",
"contentType": "application/json",
"payload": JSON.stringify(payload)
};
UrlFetchApp.fetch(discordWebhookUrl, options);
}
1. DiscordのWebhook URLの取得:
Discordでサーバーを選択し、サーバー設定に移動して「Webhooks」を選択します。
"New Webhook"をクリックして、Webhookを設定します。
WebhookのURLをコピーして、上記のGASコード中のYOUR_DISCORD_WEBHOOK_URLに貼り付けます。
2. GASの関数を実行:
Google Apps Scriptのエディタで、sendDiscordMessage関数を実行します。
実行が成功すると、Discordの指定されたチャンネルにメッセージが送信されます。
この方法では、DiscordのBotではなくWebhookを使用していますが、GASの制約のため、これが一番簡単な方法です。もし本格的なBotを作成したい場合は、Node.jsとDiscord.jsライブラリを使用することをお勧めします。
じゃあなんでbot作成させたんや!!!mtane0412.icon
Nodeで作成してfly.ioにデプロイとかが安牌っぽい
fly.ioは個人ですでに使っていて無料枠が心もとない気がする
エラーが出てうまく行かない
新しいdiscord.jsで変化しているのは、Botで使うGetwayIntents、partialsを定義する部分です。はじめ開発している時、少し古い資料を参考にしていたので、Clientオブジェクトを以下のように記述していました。
Used disallowed intents
intentをportalから設定する必要あり
トークンを作成して.envに
サーバーに招待する必要あり
redirect urlを設定してbot招待URLにアクセス
https://gyazo.com/266662394bafccdf0c5d9746d757a17a
https://gyazo.com/4d2495182e7f3849f4187d7f6ef5a693
いった
typescriptの方でeslintがエラー吐きまくってるので調べる
import { GatewayIntentBits, Client, Partials, Message } from 'discord.js'
TypeScriptでは、インポート時にtypeキーワードを指定することで、エクスポートが実行時ではなく型システム内にのみ存在することを示すことができる。これにより、トランスパイラが依存関係の型を知ることなくインポートを削除できるようになる。
import { GatewayIntentBits, Client, Partials, type Message } from 'discord.js'となった
Messageは値としては使用されず型としてだけ使われているから
if (client.user) {
nullの場合も通ってしまうからか
違う、ifの評価の中身を必ずboolean型にしようとしている
message.channel.send(date1.toLocaleString()); と client.login(process.env.TOKEN)
プロミスは待ち受けにするか、.catchの呼び出しで終了させるか、.thenの呼び出しと拒否ハンドラで終了させるか、あるいはvoid演算子で明示的に無視されるようにマークしなければならない。
細々した記法ルール
末尾のカンマ、jsonだと許容されないとかで厳格に禁止することもあるのかな
Railwayにdeploy
特に説明見なくてもそのままデプロイできる
buildコマンドをpackage.jsonで指定してあげるとTypeScriptをトランスパイルして実行してくれる
2024/4/22
Railwayの無料プランが終了していてTrial Creditも使い切ったので削除した