æè¿ãå人ãšé話ãããæ©äŒãå€ãã®ã§ãããä»ãŸã§Discordã«ä¹ãæããã®ãé¢åã ãšäžçªå€§åãªæ©èœããªãçã®è²ã çç±ãä»ããŠLINEã®ã°ã«ãŒãé話æ©èœã䜿ã£ãŠããŸããã
ããããäžåºŠDiscordã®é話æ©èœã«æ £ããŠããŸããšLINEé話ãäžäŸ¿ã§ä»æ¹ãªãã®ã§ä»åºŠããDiscordã§é話ãããããšããæµãã«ãªã£ãã®ã§ãããããã§äžçªå°ã£ãã®ãé話ã®éå§ã»çµäºã®éç¥ããªãããšã§ãããããäžçªå€§åãªæ©èœã§ããããæ¬ ããŠããããDiscordã«ç§»è¡ãã«ãããšããçç±ã«ãªã£ãŠããŸããã
ãã®ã°ã«ãŒãã§ã¯èª°ããé話ãéå§ããŠåŸ æ©ããæãªäººãé©åœã«åå ãããšããã¹ã¿ã€ã«ããšã£ãŠããŸãããªã®ã§ãæåã«èª°ããé話ãå§ãããšãã«ãããåšç¥ããè¡ããªããã°æåã§ãã£ãããæµããããããŸããããã£ãããã ãã®ããšãªã®ã§ãããæ¯åãã®éç¥ãäººã®æã§è¡ãã®ã¯é¢åã§ãããLINEã®æ¹ã§ã¯èªåã§ããŠããæ©èœãªã®ã§åšå²ããã®äžæºã倧ããã£ãã§ãã
ãã®äžäŸ¿ãªç¹ãè§£æ¶ããããšããããšã§ãè²ã 調ã¹å§ããŸãããããšBotãå ¥ããã°ã§ãããšããèªåã§Botãäœããšãè²ããªè§£æ±ºææ®µãã§ãŠããŸãããã®äžã§ãªãèªåã§Botãäœãããšã«ããã®ããšãã話ãšãçŸåšãããã§å ¬éãããå€ããšã¯ããŒãžã§ã³ã®é¢ä¿ã§ã³ãŒãã«äºæããªãã®ã§ãBotäœææç¹ã§ã®ææ°çã®v13.6.0ã§èªåã®æ±ããæ©èœãå®è£ ãããšãã話ã§ãã
ã¡ãªã¿ã«ãç§ã¯CèšèªãJavaãå°ãè§ŠããçšåºŠãããªãã®ã§ãJavaScriptææ¢ãã§å®è£ ãã圢ã«ãªãã®ã§ãå®è£ ãäžé©åãªå Žæãªã©ãããããšæããŸãããããã¯ãææããã ãããšä¿®æ£ã§ããŸãããå匷ã«ããªãã®ã§æ°ã¥ããããšãããã°ã³ã¡ã³ãã§ãGithubã«ã§ããããããé¡ãããŸãã
ç®æ¬¡
- ãã®èšäºã§ç®æãããšã»ã§ããããš
- å®çŸæ¹æ³ãæ€èšãã
- äœ¿ãæ¹ç
- ã³ãŒãã®è§£èª¬ãšä»æ§
- ãŸãšã
ãã®èšäºã§ç®æãããšã»ã§ããããš
ã¯ããã«ã欲ããæ©èœããã®èšäºã«ãã£ãŠæçµçã«ã§ããããã«ãªãããšãèšããŸãããã®éšåã¯åããããªå 容ã®ä»ã®ãµã€ããšäŒŒãŠããããã§éãéšåãããã®ã§ãèªåã®æ±ããå 容ã§ããããããã§ç¢ºèªããŠãã ããã
ç§ã欲ãããšæã£ãæ©èœã¯éåžžã«ã·ã³ãã«ã§ç®æ¡æžããããšãããªæãã§ãã
- ç¹å®ã®VCã«èª°ãããªãç¶æ
ã§é話ãéå§ãããšéç¥
- éç¥å 容ã¯èª°ãé話ãå§ããã
- ç¹å®ã®VCãã誰ãããªããªã£ãéã«çµäºã®éç¥
- ãã¡ãã¯çµäºããããšã ããéç¥
ç§ãæ±ããæ©èœã¯ãã£ãããã ããä»ã®ãµã€ãã ãšèª°ããå ¥ã£ãã¿ã€ãã³ã°ã§ãããéäžéç¥ãããã®ã ã£ãããããŸããã§ãããæ±ããã®ã¯LINEé話ãšåççšåºŠã®æ©èœã§ååã§ãã誰ããé話ãããŠããããããã ãã§ããã§ãããç¡é§ã«éç¥ãããããšéç¥ãããŸã£ãŠããŸã寧ãè¯ããªããšèããŸããããããç§ãåœåç®çãšããŠãããã®ã§ãã

次ã«ãå®éã«å®è£ ãè¡ã£ããã®ã瀺ããŸãã
- äžèšã®åœåã®æ©èœ
- é話æéã®è¡šç€º
åœåã®ç®çã«å ããŠé話æéã®è¡šç€ºãå®è£ ããŸãããå¥ã«ç¡ããŠãå°ããªãã®ã§ããããã£ããé¢çœãããšæãå®è£ ããŠã¿ãŸããã
ããã§ç޹ä»ããŠãããšãä»åã¯GlitchãšãããµãŒãã¹ãªã©ã䜿ããŸãããåºæ¬çã«ã¯ãã¡ãã®ããŒãžãåèã«ããŠäœæããŸããã
https://note.com/exteoi/n/nf1c37cb26c41
éåžžã«ãããããããããããèšäºãšãªã£ãŠããŸãããå°ãåã®è©±ãªã®ã§å€æŽãå¿ èŠãªå Žåãçµæ§ãã£ãã®ã§ãã®èšäºãããŒã¹ã«è©±ãé²ããŸãã
ãªããã®ãããªæ¹æ³ã«ãªã£ããããããã説æããŠãããŸããäžèŠãªãèªã¿é£ã°ããŠãè¯ãã®ã§ãããããããããããææ®µããšãå¿ èŠããªãå¯èœæ§ãããã®ã§èªãã§ãã倿ããããè¯ãããšæããŸãã
å®çŸæ¹æ³ãæ€èšãã
ãŸããæ±ããæ©èœã®å®è£ ã«ã¯Botã䜿ãä»ãªãã®ã§ãåºæ¬çã«ã¯ã©ãBotãçšæããããèããŸããã
èããããæ¹æ³ã¯ä»¥äžã®äºã€ã§ãã
- 誰ããäœã£ãŠãããBotãå©çšãã
- èªåã§ãµãŒããŒãç«ãŠãŠBotãäœã
åºæ¬çã«ã¯ãã®2çš®é¡ããå®çŸã®ãããããªãã®ã§ãããããã«ã€ããŠæ€èšããŸããã
ãŸãã誰ããäœã£ãŠãããBotãå©çšããæ¹æ³ãã§ããããã¯ãåããããªããšãèãã人ã¯å€ãæ€çŽ¢ã§ã¯ä»¥äžã®ãããªèšäºããããããŸãã
https://note.com/ryu_sv/n/n88cb16edefc6
ãã£ã±ãåãããšãèãã人ã¯å€ããã ãªãšæããšããããå ¥ããŠã¿ããã®ã®ã䜿ããããµãŒããŒã§ã¯åäœããŸããã§ãããçç±ã¯äžæã§ããããµãŒããŒãæ¢ããŠããããå®è£ äžã®åé¡ã ã£ããè²ã ãããšæããŸãããããæ£ããåãç°å¢ãªãä»åã®ããã«ãµãŒããŒãç«ãŠããããå¿ èŠã¯ãªããšæããŸãã
äžå®å®ãªã®ã§ã¯æµç³ã«ä»»ããããªããªãšããããšã§ãä¿¡ããããã®ã¯èªåã®ãµãŒããŒãšããããšã§èªåã§ãµãŒããŒãç«ãŠãããšã«ããŸããã
åºæ¬çã«ã¯èªåã§ãµãŒããŒãç«ãŠãå Žåã¯åãããèªå® ã«èšçœ®ããå¿ èŠããããŸããäœè«ã§ãããç§ã®å Žåã¯ãã®WebãµãŒããŒãèªå® ã«èšçœ®ããŠãã(çŸåšã¯WebARENA Indigoã«ç§»è¡)ã®ã§èšçœ®ã¯æµæãªãã§ããŸãã幞éãªããšã«äœ¿çšãããã·ã³ãæè¿é²ç»ãã·ã³ãããWebãµãŒããŒãšããŠã®åœ¹ç®ãçµããRaspberry Pi model 3B+ãããã®ã§ç°¡åã«ç«ãŠãããŸãã
ã§ãããDiscordã®botãããŸãã¡çè§£ããŠããªãç¹ããJavaScriptãnodeã®åäœããã£ã¡ãçè§£ããŠããªãã®ã«è¿éã«ãµãŒããŒãç«ãŠãã®ã¯å±éºæ§ããããããããŸããããã·ã³ãã«ã«æãããå¯èœæ§ããããŸããåŸã¯å®¶ã§åãããšãªããšãã¯ã黿°ä»£ããã·ã³ã®å¯¿åœãä»ããã®ã«ãªããŸãã
è²ã æžå¿µææãããäžã§èª¿ã¹ãŸãã£ãŠãããšä»åããŒã¹ãšãªãèšäºãçºèŠãGlitchãšãããµãŒãã¹ã䜿ãã°ç°¡åãªnodeã¢ããªãç¡æã§å®è¡ã§ããæš¡æ§ãå€å°å¶çŽãããã¿ããã§ãããããã工倫次第ã§äœãšããªãã¿ããã§ããããã ïŒãšããããšã§å®éã«å®è£ ãããŠã¿ããã©è²ã èºããã®ã§ããã®è§£æ±ºæ¹æ³ãšææ°ã®ã³ãŒããçšããŠå®è£ ãããã®ãä»åã®è©±ãšããããã§ãã
äœ¿ãæ¹ç
å è¿°ããŸãããããã®èšäºãåºæ¬ã«èšå®ãè¡ããŸãã
https://note.com/exteoi/n/nf1c37cb26c41
ãã®éãã«ããã°åé¡ã®ãªããšãããå€ãã§ããããŒã¯ã³ã®ååŸãªã©ã¯ãã®ãŸãŸè¡ããŸãããã ãå€ãå 容ã®ãããäžéšãã®ãŸãŸã§ã¯ãããªãã£ããã仿§ãå€ãã£ãŠããéšåãããã®ã§ãã®éšåã説æããŠãããŸãããšãããèªåã®åå¿é²ãå ŒããŠããŸãã
ã§ã¯ãã©ã®éšåãå€ãå 容ãªã®ããšãããšGlitchã®ãããžã§ã¯ãã®äœæéšåã§ãããããžã§ã¯ããäœæããéšåã§ãhello-expressããéžæãããšã®ããšã§ãããææ°ã®ããŒãžã§ã³ã§ã¯ãã®é ç®ããããŸãããããããäžçªè¿ãã®ããhello-nodeããªã®ã§ããããã®ç¶æ ã§ã¯ç°å¢å€æ°ãèšå®ã§ããŸããã§ãããããããããç§ãããçè§£ããŠããªããããªã®ããããããããŸãããããã®èšäºã«ããã.envããšããã®ããããŸããã
ãã®.envãšããã®ãå¿ èŠãšããçç±ãªã®ã§ãããè³æ Œæ å ±ãªã©ç°¡åã«èšãã°ç§å¯ã«ãããå 容ãããã«èšè¿°ããããšãã§ããããã§ããããã«ã¯ä»ã«ãçç±ããããŸããåŸè¿°ããŸãã
ããŠãä»ã®ãããžã§ã¯ããéããŠã¿ãŠãåããããªãã®ãç¡ãã£ãã®ã§ãªããšããªããªãããªããšæã£ãŠããã®ã§ãããå°ã匷åŒãªæ¹æ³ã§è§£æ±ºããããšã«ããŸãããGlitchã¯ããããè²ããªäººã®ã³ãŒããèŠãããšãã§ããã®ã売ãã§ããããä»äººã®ã¬ããžããªãç°¡åã«ã³ããŒã§ããŸãããã®ããããããæŽ»ãããŠæã®ãhello-expressããšåæ§ã®æ§æãæã€ãããžã§ã¯ããèªåã®ãããžã§ã¯ãã«ã³ããŒããŸããã³ããŒããã«ã¯ãã°ã€ã³ããç¶æ ã§å³äžã«ãããRemixããã¿ã³ãæŒãã°ãããžã§ã¯ããã³ããŒã§ããŸãã
https://glitch.com/edit/#!/important-chambray-liquid
ããã¯é©åœã«æ¢ããŠæŸã£ãŠããç©ã«ãªããŸãããããã䜿ã£ãŠå®è£ ããŠçµæçã«ã¯åé¡ãããŸããã§ãããåŸã¯åèã®èšäºã®éãã«å®è£ ãããŠãããŸãã
ããã§ãã.envãã®ç°å¢ãã§ããã°æ¬²ããçç±ãæžããŠãããŸããåèã®èšäºã§ã¯éå ¬éã«èšå®ããé ç®ã«ã€ããŠã®èšè¿°ããããšæãã®ã§ãããGlitchã¯ç¡æãŠãŒã¶ãŒã®ä»æ§ãå€ãããã³ãŒããéå ¬éã«ããèšå®ã¯ææãŠãŒã¶ãŒã§ãªããšã§ããªãããã«ãªããŸãããå ¬éã®ç¶æ ã§åé¡ãšãªãã®ã¯Discordã®ããŒã¯ã³ãèŠããŠããŸãããšã§ãããããä»äººã«ç¥ãããŠããŸããšBotã®ä¹ã£åããå¯èœã«ãªã£ãŠããŸãã®ã§éå ¬éã«ãããããã§ããã³ãŒãå šãŠãéå ¬éã«ããªããŠãè¯ãæ¹æ³ãããããããç°å¢å€æ°ã§ããç°å¢å€æ°ã«é¢ããŠã¯ä»¥äžã®ãã«ãããŒãžã«æ²èŒãããŠããŸãã
https://help.glitch.com/kb/article/18-adding-private-data/
ãã®ããŒãžã«ããããã«ãããžã§ã¯ããRemixããŠã³ããŒããŠã.envã«å«ãŸãã倿°ãèŠãããšã¯ã§ããŸãããå€éšããèŠãããšãã§ããŸããããªã®ã§ã³ãŒãèªäœãå ¬éããŠãåé¡ãªã䜿çšã§ããŸãããã®ããã.envããã¡ã€ã«ãæã€æ§æã§äœ¿çšã§ããã°ãããžã§ã¯ããéå ¬éã«ããªããŠãåé¡ãããŸããã
ããŠããããžã§ã¯ããäœæããããããžã§ã¯ããã³ããŒããŸããããªãã³ãŒãã倿ŽããŠããã®ã§ç§ã®GitHubã«å¥ã§çšæããŠããŸããGitHubããã€ã³ããŒãããéã«ãã¡ããæå®ããŠãã ããã
T-H-Un/Discord_VC_Notifer_Base
ãã¡ããã€ã³ããŒãããåŸã«ç°å¢å€æ°ãèšå®ããŸããèšå®ããå¿ èŠãããã®ã¯ä»¥äžã®3ã€ã§ãã
é ç® | å€ |
DISCORD_BOT_TOKEN | ããŒã¯ã³ã®æåå |
TEXT_CHANNEL_ID | éç¥ãéä¿¡ããã ããã¹ããã£ã³ãã«ID |
VOICE_CHANNEL_ID | é話éå§ã»çµäºå€å®ãè¡ã ãã€ã¹ãã£ã³ãã«ID |
å®éã«èšå®ãããšãããªæãã§ãããäžèŠãããããŸãããäžå¿ã¹ã¯ã·ã§ã眮ããŠãããŸãã

ãã®ããã«3ã€ã®å€æ°ãèšå®ããç¶æ ã§ããã°æ£ããæ©èœãããšæããŸããã€ãã€ã颿°ã®ä»æ§ãããã£ãŠããªãã®ã§ãããããããããã¡ãã»ãŒãžãéä¿¡ããããã¹ããã£ã³ãã«ã§ã¯äžåºŠã¯äœãããã®ã¡ãã»ãŒãžãéããªããšæ£ããåããªããããããŸãããå®éã«Botãå°å ¥ãããšãããªæãã§ãã

åŸã¯ãããåèã«ããèšäºãåºã«Glitchã®ãµãŒããŒãã¹ãªãŒãããªãããã«ã¹ã¯ãªãããå®è¡ã§ããããã«ããŸããããã¯èšäºã®éãã§åé¡ãªã䜿ããŸãããããªã¬ã®å®è¡ééã1åã«ããŸããã
äžå¿ããã§åé¡ãªã䜿ããã®ã§ããã§ãããã£ãŠäººã¯ãããŸã§ã§å€§äžå€«ã§ããä»ã«æ©èœè¿œå ããããšãã§ããã°æ¬¡ã®é ã§ã³ãŒãã®è§£èª¬ãšä»æ§ãæ®ããŠããã®ã§ãã¡ããã芧ãã ããã
ã³ãŒãã®è§£èª¬ãšä»æ§
ã³ãŒãã®å šå®¹ã¯ãããªæãã§ãã
const http = require('http');
const querystring = require('querystring');
const { Client, Intents } = require('discord.js');
const client = new Client({ intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.GUILD_VOICE_STATES] });
//å©ãèµ·ããããã®ãµãŒããŒãèšçœ®ãã make zombie server with google scripts
http.createServer(function(req, res){
if (req.method == 'POST'){
var data = "";
req.on('data', function(chunk){
data += chunk;
});
req.on('end', function(){
if(!data){
res.end("No post data");
return;
}
var dataObject = querystring.parse(data);
console.log("post:" + dataObject.type);
if(dataObject.type == "wake"){
console.log("Woke up in post");
res.end();
return;
}
res.end();
});
}
else if (req.method == 'GET'){
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Discord Bot is active now\n');
}
}).listen(3000);
//ãããã皌åç¶æ
ã«ãªã£ããåŒã³åºãããã颿°ãšã¹ããŒã¿ã¹ãèšå®ããŠããã
//if Bot status is "ready", call this function. It7s start log and Set status of Bot.
client.on('ready', message =>{
console.log('Bot_Ready');
client.user.setActivity('Game', { type: 'PLAYING' });
});
/*é話çšã·ã¹ãã éšå for VC messages functions*/
//process.env.XXX ã¿ãããªã®ã¯å
šãŠ.envãã¡ã€ã«ã«æ£ããèšå®ãè¡ããŠããåæ
//process.env.DISCORD_BOT_TOKEN -> Discord botã®TOKENã®æååãæ ŒçŽãããŠãã
//process.env.TEXT_CHANNEL_ID -> channel IDã®æååãæ ŒçŽãããŠãã
//process.env.VOICE_CHANNEL_ID -> ãã€ã¹ãã£ãããã£ã³ãã«ã®æååãæ ŒçŽãããŠãã
var start_buf=Date.now();
var end_buf=Date.now();
client.on('voiceStateUpdate', (oldGuildMember, newGuildMember) =>{
if(oldGuildMember.channelId==undefined&&newGuildMember.channelId!=undefined){
if (newGuildMember.channelId == process.env.VOICE_CHANNEL_ID) {
console.log("ç¹å®ã®ãã€ã¹ãã£ãããã£ã³ãã«ã®ã¿åæ ");//OK
if(client.channels.cache.get(newGuildMember.channelId).members.size==1){
console.log("é話éå§ãã©ããã®æ¡ä»¶å€å®");//OK
let text="@everyone<@" + newGuildMember.id +"> ãé話ãéå§ããŸããã\n";
client.channels.cache.get(process.env.TEXT_CHANNEL_ID).send(text);//ãã®IDãéããããã£ã³ãã«ã«ããã1åã¯çºèšããŠããªããšãããããªãããã
start_buf = Date.now();
}
}
}
if(newGuildMember.channelId==undefined&&oldGuildMember.channelId!=undefined){
//console.log(client.channels.cache.get(oldGuildMember.channelId).members.size);
console.log("é話çµäºã®å€å®");//OK
let text="é話ãçµäºããŸããã\n";
//newGuildMember
if (oldGuildMember.channelId == process.env.VOICE_CHANNEL_ID) {
console.log("ç¹å®ã®ãã€ã¹ãã£ã³ãã«å€å®çµãã");//OK
if(client.channels.cache.get(oldGuildMember.channelId).members.size==0){
console.log("æåŸã®å€å®");
client.channels.cache.get(process.env.TEXT_CHANNEL_ID).send(text);
const end_buf = Date.now();
const totaltime=end_buf-start_buf;
const days=Math.floor(totaltime/1000/60/60/24);
const hours=Math.floor(totaltime/1000/60/60)%24
const min=Math.floor(totaltime/1000/60)%60;
const sec = Math.floor(totaltime/1000)%60;
let times="é話æé"+days+"æ¥"+hours+"æé"+min+"å"+sec+"ç§"
client.channels.cache.get(process.env.TEXT_CHANNEL_ID).send(times);
}
}
}
});
/*é話çšã·ã¹ãã ãããŸã§ end VC function*/
//ãã°ã€ã³ãã颿°åºæ¬çã«Discordç³»ã®é¢æ°äžçªäžã«ãããŠçœ®ã Login in on Discord with TOKEN
client.login( process.env.DISCORD_BOT_TOKEN );
ãã®ãããªã³ãŒãã«ãªã£ãŠããŸããåºæ¬çã«ã¯ã³ã¡ã³ãã¢ãŠãã§ããçšåºŠåãããšæããŸãã
//ãããã皌åç¶æ
ã«ãªã£ããåŒã³åºãããã颿°ãšã¹ããŒã¿ã¹ãèšå®ããŠããã
ãã®ã³ã¡ã³ãã¢ãŠãããäžã®è¡ã¯åèèšäºã®ãµãŒããŒãç«ãŠãã³ãŒãããã®ãŸãŸæåããŠããŸããããããäžã¯èªåã§æžããéšåã«ãªããŸããäžèšã³ã¡ã³ãã¢ãŠãã®ããäžã«ãããã®éšåã¯Botã®ã¹ããŒã¿ã¹ãèšå®ããŠããŸãã
client.on('ready', message =>{
console.log('Bot_Ready');
client.user.setActivity('Game', { type: 'PLAYING' });
});
Botã®æ¥ç¶ã確ç«ããããšãã«Bot_Readyãšã³ã³ãœãŒã«ã®ãã°ã«ã§ãŸãããŸããDiscordåŽã§ã¯ãGameããã¬ã€äžããšãªããšæããŸããGameã倿Žããã°å¥œããªã²ãŒã åçã«å€æŽã§ããŸãã
ãã以éã®éšåã¯åºæ¬çã«é話éç¥ã·ã¹ãã ã®éšåã§ãããŸã以äžã®å€æ°ã¯é話æéã®ã·ã¹ãã ã®ããã®å€éšã®å€æ°ã§ãã
var start_buf=Date.now();
var end_buf=Date.now();
ãããäžçªã»ãªãªãŒã¿ãããªã®ãããããã£ãŠããªãã®ã§ãé©åãªå®è£ æ¹æ³ããåãã§ããã°æããŠããã ãããããããªã®ã§ãããããã«ãã£ãŠæéã®æ å ±ãä¿æããŠããŸããããã¯åºæ¬çã«ããããªãã§ãã ãããé©åœãªå€ã§åæåã§è¯ãã§ãããäžå¿Date.now()ã§åæåããŠããŸãã
client.on('voiceStateUpdate', (oldGuildMember, newGuildMember) =>{
if(oldGuildMember.channelId==undefined&&newGuildMember.channelId!=undefined){
if (newGuildMember.channelId == process.env.VOICE_CHANNEL_ID) {
console.log("ç¹å®ã®ãã€ã¹ãã£ãããã£ã³ãã«ã®ã¿åæ ");//OK
if(client.channels.cache.get(newGuildMember.channelId).members.size==1){
console.log("é話éå§ãã©ããã®æ¡ä»¶å€å®");//OK
let text="@everyone<@" + newGuildMember.id +"> ãé話ãéå§ããŸããã\n";
client.channels.cache.get(process.env.TEXT_CHANNEL_ID).send(text);//ãã®IDãéããããã£ã³ãã«ã«ããã1åã¯çºèšããŠããªããšãããããªãããã
start_buf = Date.now();
}
}
}
ãã®éšåãé話éå§ãå€å®ããŠããéšåã§ãããã£ãŠããããšã¯ä»¥äžã®æé ã§å€å¥ããŠããŸããifæã远ã£ãŠããã°ããããšæããŸãã
- åãVCã«åºå ¥ãããéã®ã¹ããŒã¿ã¹ã®æŽæ°ã
- æ°ããã¹ããŒã¿ã¹ã¯æå®ããVCã
- 人æ°ã0(undefined)ãã1ã«ãªã£ãã
ãã®æ¡ä»¶åå²ãåŸãŠç¹å®ã®VCã«äººãåããŠå ¥ã£ãããå€å®ããŠããŸãããã®ããšã«ã¡ãã»ãŒãžãçæããŠéã£ãŠãããšããæãã§ãã
ãã®åŸã«ããããã¯ãã®æã®ã·ã¹ãã æéãèšé²ããŠããŸãã
start_buf = Date.now();
ããã¯çµäºæã®æéãçµã¿åãããã®ã§ãã®é¢æ°ã§ã¯ãããšèšã£ãŠäœ¿ãããã§ã¯ãããŸããã
次ã«ãã®é¢æ°ã§çµäºãå€å®ããŠããŸãã
if(newGuildMember.channelId==undefined&&oldGuildMember.channelId!=undefined){
console.log("é話çµäºã®å€å®");//OK
let text="é話ãçµäºããŸããã\n";
if (oldGuildMember.channelId == process.env.VOICE_CHANNEL_ID) {
console.log("ç¹å®ã®ãã€ã¹ãã£ã³ãã«å€å®çµãã");//OK
if(client.channels.cache.get(oldGuildMember.channelId).members.size==0){
console.log("æåŸã®å€å®");
client.channels.cache.get(process.env.TEXT_CHANNEL_ID).send(text);
const end_buf = Date.now();
const totaltime=end_buf-start_buf;
const days=Math.floor(totaltime/1000/60/60/24);
const hours=Math.floor(totaltime/1000/60/60)%24
const min=Math.floor(totaltime/1000/60)%60;
const sec = Math.floor(totaltime/1000)%60;
let times="é話æé"+days+"æ¥"+hours+"æé"+min+"å"+sec+"ç§"
client.channels.cache.get(process.env.TEXT_CHANNEL_ID).send(times);
}
}
}
});
å€å®ã¯ä»¥äžã®ããã«ãªã£ãŠããŸããåæ§ã«ifæãé çªã«è¿œãã°ã©ãããå®è£ ãããŠããããããããŸãã
- åãVCã«åºå ¥ãããéã®ã¹ããŒã¿ã¹æŽæ°ã
- æ°ããã¹ããŒã¿ã¹ã¯æå®ããVCã
- 人æ°ã1ãã0ã«ãªã£ãã
ã¡ãã»ãŒãžãéä¿¡ããåŸã«æéã®èšç®äœæ¥ãããŠããŠããããã®éšåã§ãã
ã const end_buf = Date.now();
const totaltime=end_buf-start_buf;
const days=Math.floor(totaltime/1000/60/60/24);
const hours=Math.floor(totaltime/1000/60/60)%24
const min=Math.floor(totaltime/1000/60)%60;
const sec = Math.floor(totaltime/1000)%60;
let times="é話æé"+days+"æ¥"+hours+"æé"+min+"å"+sec+"ç§"
client.channels.cache.get(process.env.TEXT_CHANNEL_ID).send(times);
ãã åã«ããã°ã©ã çã«æéãæ±ããŠããã ãã§ããã·ã¹ãã æéããã·ã¹ãã æéãåŒãç®ããããšã§æéãæ±ããŠããŸããããããããæå»ããæ±ããæ¹æ³ãããã®ãããããŸãããç§ã¯å è¿°ã®æ¹æ³ãçšããŠããŸãã
ãã®ãããªæ¹æ³ã§é話ã®éå§ãšçµäºã®éç¥ãå®çŸããŠããŸãããã£ãŠããããšã¯ç°¡åãªã®ã§ãããdiscord.jsã®ä»æ§å€æŽãããããããè²ã èŠæŠããŸããã調ã¹ãŠåºãŠããã®ãæã®è©±ã°ãããªã®ã§èª¿ã¹ãããšããã£ãŠããããããããªãå Žåãæ®ã©ã§ããããã¥ã¡ã³ããããããããã£ããããå®è£ ã«èŠåŽããŸãããç¹ã«voiceStateUpdateã§è¿ã£ãŠããnewStateãšoldStateã¯ãããã«ããã£ãã§ããäžã®æ§é ãã€ãã€ãçè§£ãã«ããã£ãã®ã§æéãããã£ãŠããŸããŸããã
ãšããããå®è£ ã¯ã§ããŸããããç§ã¯åé ã«æžããéãCèšèªãjavaãå€å°ãããçšåºŠãªã®ã§å®è£ ãäžé©åãªå ŽåãããããšæããŸãããããã¯ãææããã ããã°ãšæããŸãã
ãŸãšã
åèã«ããèšäºãå 容ãå€ãããããèªåã§ã³ãŒããæžã工倫ããŠäœ¿ãã圢ã«ããŸããã
èªåã«å¿ èŠãªæ©èœã®ã¿ãå®è£ ããããã«ãããããªäžèŠãªæ©èœãæãããŠãããŸããããã以å€ã«ãv13系察å¿ã®æ°ããã³ãŒãã¯å°ãªãå ¬åŒããã¥ã¡ã³ãããããŒãã®ã§ãå®è£ ã¯çãã³ãŒããªã®ã«èŠåŽããŸããã
v13ç³»ã§ã¯åäŸãå°ãªããšæãã®ã§ãææ°ã®ç°å¢ãã¢ããããŒãã§åããããªããšãèããŠããæ¹ã®åœ¹ã«ç«ãŠã°å¹žãã§ãã
Glitch ã䜿çšãããã®ã§ã¯ãªããnode.jsã§äœ¿ããã³ãŒãã¯ãªãã§ããããã
ããã°ã©ãã³ã°æªçµéšã§ãã
ãããããé¡ãããããŸãã
ã³ã¡ã³ãããããšãããããŸãã
ã³ãŒããããããªããã§ããã°ãã®ããŒãžã®å 容ãã»ãŒçããªã®ãçè§£ãããŠããŸããïŒ
ãŸãã¯ãGlitchã§äœãããŠããããçè§£ããããšããããããšæããŸãã
ã³ãŒãèªäœã«ã¯äžå¯§ã«ã³ã¡ã³ãã¢ãŠããŸã§ä»ããŠããã®ã§ã©ã®éšåãäœãããŠããããããã¯ããããšæããŸãã
process.env.VOICE_CHANNEL_IDãªã©ã察å¿ããæååãåŒã³åºããŠããã®ã§ãåæ§ã®éšåãæååã«çœ®ãæããŠé¢æ°ãå®è¡ã§ããç°å¢ãªãåããããšæããŸãã
å ¥ã£ãvcã®æåŸ ãªã³ã¯ãéãããšã¯ã§ããŸããïŒ
ã³ã¡ã³ãããããšãããããŸãã
ç§ã¯ãã®æ©èœã䜿ããªãã®ã§ãã®VCã®æåŸ ãªã³ã¯æ©èœãç¥ããŸãããããããã®æåŸ ãªã³ã¯ãåºå®ã§ããã°ãããéãããšã¯å¯èœã§ãããå€åãããã®ã§ãã£ãŠããdiscord.jsã®é¢æ°ã§åŸããã§ããã®ã§ããã°å¯èœã ãšæããŸãã
èšäºå€§å€åèã«ãªããŸããã
質åãªã®ã§ããããé話ãã£ã³ãã«ãžæåã«å ¥ã£ã人ãéç¥ãã§ã¯ãªããé話ãã£ã³ãã«ãžæåã«å ¥ã£ãç¹å®ã®äººã®ã¿éç¥ãã«ã¯ã§ããã®ã§ããããïŒ(é¯ç®¡çè ãVCã«å ¥ã£ããéç¥ç)
äžå¹Žåã®èšäºã«è³ªåãããŠããŸã倧å€ç³ãèš³ãªãã®ã§ããããããããã°ãææããã ããããšæããŸãã
ã³ã¡ã³ãããããšãããããŸãã
ã§ãããšæããŸãã
詳现ã¯ç§ã®å®è£ ãèŠãŠããã ããšããŠãoldãnewGuildMember.idãšããã®ããoldãnewStateå ã§å€åã®ãã£ã人ã®idã瀺ãéšåãªã®ã§ãäŸãã°ç®¡çè ã®idãæŽæ°æã«çãããã°éç¥ããããã«ããã°å¯èœã ãšæããŸãã
ãã¡ãããæããã®ãå ¥ã£ãã®ããVoiceStateUpdateã§å€å®ããçã现éšã¯å¥éå®è£ ããå¿ èŠããããŸãã
åçããããšãããããŸãã
å®ã¯å šãããã°ã©ãã³ã°ãè§Šã£ãããšãåŠãã ããšããªãããããã®ç¥èã®ã¿ã§BOTãäœãããšããŠããŸããã
idã®éšåã¯ããã£ãã®ã§ãããããããã©ããã©ãããŠããã®ãèŠåœãã€ããªãã®ã§ãå èµ°ããåºæ¬çãªãšãããåŠãã§ããåãã£ã¬ã³ãžããããšæããŸãã
ç§ããããããšãå¯èœãšããããšãåãã£ãã ãã§ãã¢ãããŒã·ã§ã³ã«ãªããŸããã
ãããããåçãã ãã£ãã®ã«ãç³ãèš³ãããŸããã
èª ã«ããããšãããããŸããã
è¿ä¿¡ããããšãããããŸãã
ä»ã®èšèªãè§Šã£ãŠãããšããã¢ããã³ããŒãžã¯ãããŸããããããæžãããšãã¯ããã»ã©æ·±ãç¥ã£ãŠããããã§ã¯ãªãã£ãã®ã§é 匵ãã°ã§ãããšæããŸãã
æåã¯ããã¥ã¡ã³ããèªãã§ãäœã®ããšããâŠãšããæãããšæããŸãããé 匵ã£ãŠãã ããïŒ
ããã«ã¡ã¯ã
ãã¡ãã®èšäºãåèã«BotãäœãããŠé ããŠãããŸãã
æå®ããŠããVCã3ã€ä»¥äžã«å¢ããããšã¯å¯èœã§ããããã
.envãã¡ã€ã«ã«3ã€ä»¥äžã®ID(VOICE_CHANNEL_ID)ãèšè¿°ãããšãåäœããªããªããŸããã
è§£æ±ºæ¹æ³çããããŸãããè¿ä¿¡ããã ãããšå¹žãã§ãã
ã³ã¡ã³ãããããšãããããŸãã
å¯èœã ãšæããŸãããã©ãããåäœãæ³å®ãããã§è€éãã¯å€ãã£ãŠãããšæããŸãã
äŸãã°VC1ã«èª°ããããšãã«VC2ã«èª°ããæ¥ãã®ãæ¥ãªããã§ãã
ã©ããã®VCã«èª°ããæåã«å ¥ã£ãæãšããã ããªãifåã®å€å®æ¡ä»¶ã远å ããã ãã§ãã§ããŸããã
envãã¡ã€ã«ã«ïŒã€ä»¥äžèšè¿°ããããã¡ã ãšãªããšä»æ§ããç¥ããªãã®ã§ãGlitchåŽã®ä»æ§ã¯èª¿ã¹ãæ¹ãè¯ãããç¥ããŸããã
å人ã§äœ¿ãåã«ã¯ææªenvãã¡ã€ã«ã§ã¯ãªãããœãŒã¹ã«IDãæžã蟌ããšããææ®µããããŸãã