GASを使ってDiscordメッセージを取得する方法:初心者向け簡単ガイド
GASでDiscordメッセージを取得する基本
GAS(Google Apps Script)は、Googleの製品と連携しやすく、外部との通信にも利用されます。Discord APIを利用してメッセージを取得するのもその1つの方法です。
必要な準備
まず、Discordからメッセージを取得するためには、Discord APIを利用するので、ボットのトークンが必要です。そのためには、Discord Developer Portalでボットを作成してください。
GASでAPIを呼び出す
次に、GASでDiscord APIを呼び出してメッセージを取得する方法を見ていきます。
function getDiscordMessages() {
var url = "https://discord.com/api/channels/{channel_id}/messages"; // チャンネルIDを指定する
var options = {
"method" : "get",
"headers" : {
"Authorization" : "Bot " + "YOUR_BOT_TOKEN" // ボットトークンを挿入
}
};
var response = UrlFetchApp.fetch(url, options);
var messages = JSON.parse(response.getContentText());
Logger.log(messages);
}
まず、指定したチャンネルIDのDiscordメッセージを取得するために、GETメソッドを使用します。
そして、取得したレスポンスをJSON形式でパースして、メッセージをログに出力します。
GASで取得したDiscordメッセージを加工する
取得したメッセージデータを加工することができます。例えば、各メッセージのコンテンツを配列に追加してみましょう。
メッセージ内容の抽出
function extractMessageContent() {
var url = "https://discord.com/api/channels/{channel_id}/messages";
var options = {
"method" : "get",
"headers" : {
"Authorization" : "Bot " + "YOUR_BOT_TOKEN"
}
};
var response = UrlFetchApp.fetch(url, options);
var messages = JSON.parse(response.getContentText());
var messageContents = messages.map(function(message) {
return message.content;
});
Logger.log(messageContents);
}
ここでは、取得したメッセージの中からコンテンツのみを抽出しています。
GASのmapメソッドを使用することで、メッセージ内容を配列に収集できます。
練習問題
以下のスクリプトを修正して、Discordメッセージの送信者名とメッセージ内容を一緒に出力するようにしてみてください。
function logSenderAndMessage() {
var url = "https://discord.com/api/channels/{channel_id}/messages";
var options = {
"method" : "get",
"headers" : {
"Authorization" : "Bot " + "YOUR_BOT_TOKEN"
}
};
var response = UrlFetchApp.fetch(url, options);
var messages = JSON.parse(response.getContentText());
// ここを修正して送信者名とメッセージ内容を一緒にログ出力する
}
解答・解説
function logSenderAndMessage() {
var url = "https://discord.com/api/channels/{channel_id}/messages";
var options = {
"method" : "get",
"headers" : {
"Authorization" : "Bot " + "YOUR_BOT_TOKEN"
}
};
var response = UrlFetchApp.fetch(url, options);
var messages = JSON.parse(response.getContentText());
messages.forEach(function(message) {
Logger.log("Sender: " + message.author.username + ", Message: " + message.content);
});
}
ここでは、forEachメソッドを使用して各メッセージをループしています。
そして、メッセージのauthor.usernameプロパティを使って送信者名を取得し、message.contentを使ってメッセージ内容をログに出力しています。