discordのカスタムステータスをNode.jsで変えてみた(websocket)

はじめに(注意)

この記事はnode.jsの入れ方は説明しません
この記事ではnode.jsを使いdiscordのカスタムステータスを変える方法について紹介していきます


1.準備

1.1 必要なモジュールをインストールする

npm i ws

たぶんこれです。たぶん違わないと思います




2.ソースコードを作っていく

2.1カスタムステータスを変える前にdiscordでメッセージを受け取ってみる

まずは必要なモジュールをrequireしていく

const WebSocket = require('ws');

const ws = new WebSocket('wss://gateway.discord.gg/?v=10&encoding=json')//discordのwebsocketURL


アカウントのtokenとwebsocketの通信が開いたときに送るpayloadを書いておく

token = 'アカウントトークン'
payload = {
    op: 2,
    d: {
       token: token,
       properties: {
          $os: "linux",
          $browser: "chrome",
          $device: "chrome",
       },
    },
 };

websocketを開く!

ws.addEventListener("open", async (x) => {
    ws.send(JSON.stringify(payload));
    console.log("開始")
});

↑これでwebsocket通信が開ける。開いたときに先程書いたpayloadを送っている。

メッセージを受信する!!↓

ws.addEventListener("message", async (data) =>{

    var x = data.data;
    var payload = JSON.parse(x);
;

    const { t, event, op, d } = payload;
    switch (op) {
    case 10:
        const { heartbeat_interval } = d;
        setInterval(() => {
            ws.send(JSON.stringify({ op: 1, d: null }));
        }, heartbeat_interval);

        break;
    }

    switch (t) {
     case "MESSAGE_CREATE":
        console.log(d.author.username + ": " + d.content);

こんな感じです。
dにメッセージの情報や送った人などいろいろな情報が載っています。

実行すると、、ターミナル上にこんな風にログが残ります


2.2 カスタムステータスを変える方法

やり方だけを言うと

op:3,
d : {
  afk:false,
  since:0,
  status:"online",
  activities : [{name: "Custom Status", type: 4, state: `ノラと皇女と野良猫ハート`, emoji: null}]
}

これをwebsocketで送るだけです。。。

2.3 応用(??)

たぶん世界一いらない機能だと思いますが、

コマンド+カスタムステータスにしたい文字

でカスタムステータスを変えられるようにします。

やり方は、2.1で送られた文字を取得する方法と合わせてif文で書いていきます
説明は下手なのですぐにコードを書いていく

コード

if(d.content.startsWith("!change")){
            let name = d.content.split(' ')[1];

            let payload = {
            op:3,
            d : {
                afk:false,
                since:0,
                status:"online",
                activities : [{name: "Custom Status", type: 4, state: `${name}`, emoji: null}]
            }
        }
            ws.send(JSON.stringify(payload));
        }

これで
!change ノラと皇女と野良猫ハート
でプレイ中がノラと皇女と野良猫ハートになります


3 終わりに

まずこんな記事を読んでいただきありがとうございます。
noteで書く物がなくこんな物を投稿しましたが、内容もソースコードもゴミになってしまいました。
ごめんなさい
誤字やソースコードの間違いなどがあったら教えていただけるとうれしいです
直した方がいい書き方なども教えていただけるとありがたいです


この記事が気に入ったらサポートをしてみませんか?