動機
コロナ渦の大学生なので,ずっと家にいて暇です.常に仲間とDiscordのVCをつないで作業をしています.
ふとトイレに行くときに,PCのマイクをミュートにし忘れることがあります.
イヤホンはBluetoothなので音は聞こえているのですが,トイレとかキッチンに行った時とかにミュートにし忘れることがあって不便です.
そこで,離れたところからスマホでPCのDiscordをミュートにできたらと思っていたのですが,DiscordのRPCなAPIで実現できそうだったので試してみました.
環境
- ThinkPad X270
- Arch Linux
- Node.js v14.16.0
- discord-rpc v3.2.0
- express
- Discord
Discordのアプリを,Node.jsで動くエージェントサーバーで操作する感じです.
Node.jsのサーバー上で,ExpressによるWebサーバーとDiscordRPCクライアントが走っています.
Webサーバーがリクエストを受け取ったらDiscordのミュートをトグルする,といった形です.
準備
Discordの
- ClientID
- ClientSecret
- AccessToken
が必要になります.
AccessTokenのScopesについては,私の場合は,
- rpc
- rpc.api
- identify
のトークンを発行しました.
ソース
constDiscordRPC=require('discord-rpc')constexpress=require('express')constclientId='CLIENT_ID'constclientSecret='CLIENT_SECRET'if(process.argv.length<=2){console.error('You must specify access_token')return}constaccessToken=process.argv[2]constrpc=newDiscordRPC.Client({transport:'ipc'});functionstartWebServer(){constapp=express()constport=3000app.get('/',(req,res)=>{rpc.getVoiceSettings().then((e)=>{returnrpc.setVoiceSettings({mute:!e.mute})}).then(()=>{res.sendStatus(200)})})app.listen(port,'0.0.0.0',()=>{console.log(`Discord Muter listening at http://localhost:${port}`)})}rpc.on('ready',()=>{startWebServer()});rpc.login({clientId,scopes:['rpc','rpc.api','identify'],accessToken}).catch(console.error);
やってみよう
Discordのアプリを開いて,ボイスチャットに入っておきます.$ node index.js {アクセストークン}
でサーバーを起動します.
その状態で,普通に,PCのブラウザから,http://localhost:3000/
にアクセスすると,ミュートになります.
もう一度アクセスでミュート解除です.
私はTaskerでウィジェット化しています.
他にもRPCにはいろいろなAPIが用意されていそうなので,時間があるときに探してみたいと思います!!