Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 刷新值NodeJS(DiscordJS)GameDig_Javascript_Node.js_Discord.js_Gamedig - Fatal编程技术网

Javascript 刷新值NodeJS(DiscordJS)GameDig

Javascript 刷新值NodeJS(DiscordJS)GameDig,javascript,node.js,discord.js,gamedig,Javascript,Node.js,Discord.js,Gamedig,我正在制作一个Discord机器人,它允许给出游戏服务器的指示。我使用GameDig库,但值不会刷新。我必须重新启动应用程序(bot.js)才能看到更改。我希望它能自动刷新每个x时间 我尝试了setInterval(()=>{…},6000) const Gamedig=require('Gamedig'); Gamedig.query({ 类型:“garrysmod”, 主持人:“xx.xx.xx.xx”, 端口:'27015' })。然后((状态)=>{ console.log(状态); 让

我正在制作一个Discord机器人,它允许给出游戏服务器的指示。我使用GameDig库,但值不会刷新。我必须重新启动应用程序(
bot.js
)才能看到更改。我希望它能自动刷新每个
x
时间

我尝试了
setInterval(()=>{…},6000)

const Gamedig=require('Gamedig');
Gamedig.query({
类型:“garrysmod”,
主持人:“xx.xx.xx.xx”,
端口:'27015'
})。然后((状态)=>{
console.log(状态);
让nom=state.name
让carte=state.map
让jouersmax=state.maxplayers
让jouers=state.players.length
让latence=state.ping
client.on('ready',()=>{
client.user.setStatus(“联机”)
设置间隔(()=>{
client.user.setActivity(jouers+'/'+jouersmax+'jouers');
}, 6000); 
此外,我不能在我的消息处理程序中使用来自游戏状态的变量(
nom
carte
,等等):

client.on('message',message=>{
如果(!message.content.startsWith(prefix)| | message.author.bot)返回;
const args=message.content.slice(prefix.length.trim().split(+/);
const命令=args.shift().toLowerCase();
//命令国家
如果(命令=='state'){
message.channel.send(“''.'**Nom**.''.'+Nom”);
message.channel.send(''映射**.''+点菜);
message.channel.send(''焦耳**焦耳**焦耳:'+jouers+'/'+jouersmax);
message.channel.send(“延迟**延迟**”+“延迟+”ms”);
}
//其他命令。。。
如果(命令=='say'){
message.delete().catch()
message.channel.send(args.join(“”).catch(console.error);
}
如果(命令=='ping'){
message.channel.send(`BotServer01:Latency为${Date.now()-message.createdTimestamp}ms.API Latency为${Math.round(client.ws.ping)}ms`);
}
});

您只查询了一次游戏服务器。如果要刷新值并将其发送到discord,则必须更改顺序

  • 首先,你得到了discord客户机
  • 然后查询游戏服务器
  • 最后得到刷新的值

另一方面,您应该使用
const
over
let

您可以在顶部声明
state
,这样您就可以在
client.On('message')
client.On('ready')中访问它
。每次收到游戏服务器的响应时,您都可以从间隔中更新此
状态
变量

您可以在bot准备就绪时设置此间隔,但如果要更新它,请确保每隔
x
秒获取一次状态。在当前代码中,当您在
setInterval
之外获取时,它只获取一次,并且每次使用相同的状态。因此,您需要将其移动到
setInterval
的callbac中k

我使用了获取和重命名状态变量。我还使用了async/await来处理承诺,也许它更容易阅读:

//在client.on之外声明状态,以便您可以在“ready”和“ready”中访问它
//和“信息”
让state=null;
client.on('消息',(消息)=>{
如果(!message.content.startsWith(prefix)| | message.author.bot)返回;
const args=message.content.slice(prefix.length.trim().split(+/);
const命令=args.shift().toLowerCase();
如果(命令=='state'){
//如果状态为空,只需发送一条错误消息
如果(!状态){
返回message.channel.send('Oops,游戏状态还不可用');
}
//解构状态
常数{
姓名:nom,,
地图:点菜,
最大玩家:Jouersmax,
平:迟到,
玩家:{length:jouers},
}=国家;
message.channel.send(“''.'**Nom**.''.'+Nom”);
message.channel.send(''映射**.''+点菜);
message.channel.send(''焦耳**焦耳**焦耳:'+jouers+'/'+jouersmax);
message.channel.send(“延迟**延迟**”+“延迟+”ms”);
}
//其他命令。。。
});
client.on('ready',()=>{
client.user.setStatus(“在线”);
setInterval(异步()=>{
试一试{
//更新在这些函数之外声明的状态
//不需要常量、let、var关键字
state=wait Gamedig.query({
类型:“garrysmod”,
主持人:“xx.xx.xx.xx”,
端口:'27015',
});
常数{
最大玩家:Jouersmax,
玩家:{length:jouers},
}=国家;
setActivity(`${jouers}/${jouersmax}jouers`);
}捕获(e){
//您需要以某种方式处理错误!
控制台日志(e);
}
}, 6000);
});
如果您不想使用异步/等待和解构,那么这个应该可以:

let state=null;
client.on('消息',(消息)=>{
如果(!message.content.startsWith(prefix)| | message.author.bot)返回;
const args=message.content.slice(prefix.length.trim().split(+/);
const命令=args.shift().toLowerCase();
如果(命令=='state'){
//如果状态为null,只需发送一条错误消息
如果(!状态){
返回message.channel.send('Oops,游戏状态还不可用');
}
const nom=state.name;
const carte=state.map;
const jouersmax=state.maxplayers;
const jouers=state.players.length;
const latence=state.ping;
message.channel.send(“''.'**Nom**.''.'+Nom”);
message.channel.send(''映射**.''+点菜);
message.channel.send(''焦耳**焦耳**焦耳:'+jouers+'/'+jouersmax);
message.channel.send(“延迟**延迟**”+“延迟+”ms”);
}
//其他命令。。。
});
client.on('ready',()=>{
client.user.setStatus(“在线”);
设置间隔(()=>{
Gamedig.query({
类型:“garrysmod”,
主持人:“xx.xx.xx.xx”,
端口:'27015',
})
.然后((更新状态)=>{
状态=更新状态;
const jouersmax=state.maxplayers;
const jouers=state.players.length;
setActivity(`${jouers}/${jouersmax}jouers`);
})
.捕获((e)
// connected to your discord client
client.on('ready', () => {
  client.user.setStatus('online')
  
  // you want to refresh your data every 6 seconds
  setInterval(() => {
    // query your game server
    Gamedig.query({
      type: 'garrysmod',
      host: 'xx.xx.xx.xx',
      port: '27015'
    }).then((state) => {
      const joueursmax = state.maxplayers
      const joueurs = state.players.length
      
      // send new data to your discord server
      client.user.setActivity(joueurs+'/'+joueursmax+' Joueurs');
    });
  }, 6000); 
});