Javascript 在给定时间加入Discord语音聊天
我正在编写一个机器人,它在午夜自动进入语音聊天,然后播放一首歌 我试过用这个:Javascript 在给定时间加入Discord语音聊天,javascript,node.js,discord.js,Javascript,Node.js,Discord.js,我正在编写一个机器人,它在午夜自动进入语音聊天,然后播放一首歌 我试过用这个: // require the discord.js module const Discord = require('discord.js'); // create a new Discord client const { prefix, token } = require('./config.json'); const client = new Discord.Client(); const fs = requi
// require the discord.js module
const Discord = require('discord.js');
// create a new Discord client
const { prefix, token } = require('./config.json');
const client = new Discord.Client();
const fs = require('fs');
const broadcast = client.voice.createBroadcast();
// Checks the date
var date = new Date()
// when the client is ready, run this code
// this event will only trigger one time after logging in
client.once('ready', () => {
console.log('Ready!');
});
client.login(token);
function timeReached(){
setInterval(function(){ date = new Date(); }, 30000);
if (date.getHours() === 14 && date.getMinutes() === 8)
{
return true;
}
else
{
return false;
}
}
client.on("ready", () => {
const channel = client.channels.cache.get("my chat");
if (!channel) return console.error("The channel does not exist!");
while (timeReached != true)
{
timeReached();
}
const conection = channel.connect();
const dispatcher = connection.play ("audio.mp3");
setTimeout(function(){
connection.disconnect();
}, 5000)
});
但运行一段时间后,控制台上会显示以下消息:
<--- Last few GCs --->
[13860:00000136C7E96090] 23337 ms: Scavenge 2028.1 (2035.6) -> 2027.6 (2036.4) MB, 9.1 / 0.0 ms (average mu = 0.142, current mu = 0.062) allocation failure
[13860:00000136C7E96090] 23346 ms: Scavenge 2028.8 (2036.4) -> 2028.3 (2047.1) MB, 6.6 / 0.0 ms (average mu = 0.142, current mu = 0.062) allocation failure
[13860:00000136C7E96090] 23485 ms: Scavenge 2035.3 (2047.1) -> 2034.5 (2040.1) MB, 10.3 / 0.0 ms (average mu = 0.142, current mu = 0.062) allocation failure
<--- JS stacktrace --->
==== JS stack trace =========================================
0: ExitFrame [pc: 00007FF7E62C77DD]
Security context: 0x0261bc4408d1 <JSObject>
1: incRefCount(aka incRefCount) [0000021BF3E94141] [internal/timers.js:~289] [pc=0000019AF4857628](this=0x0042117804b1 <undefined>)
2: /* anonymous */ [0000025542A3FFC9] [C:\Users\R2\Desktop\oleo_de_macaco_bot\index.js:~34] [pc=0000019AF485910C](this=0x03aac97c2429 <EventEmitter map = 00000101FF0CA349>)
3: emit [000003FAB26E3969] [events.js:327...
FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
1: 00007FF7E56B470F napi_wrap+113583
2: 00007FF7E565F7D6 v8::base::CPU::has_sse+66646
3: 00007FF7E56605D6 v8::base::CPU::has_sse+70230
4: 00007FF7E5E742EE v8::Isolate::ReportExternalAllocationLimitReached+94
5: 00007FF7E5E5C3C1 v8::SharedArrayBuffer::Externalize+833
6: 00007FF7E5D2890C v8::internal::Heap::EphemeronKeyWriteBarrierFromCode+1436
7: 00007FF7E5D33B40 v8::internal::Heap::ProtectUnprotectedMemoryChunks+1312
8: 00007FF7E5D30664 v8::internal::Heap::PageFlagsAreConsistent+3204
9: 00007FF7E5D25E63 v8::internal::Heap::CollectGarbage+1283
10: 00007FF7E5D2C6F4 v8::internal::Heap::GlobalSizeOfObjects+212
11: 00007FF7E5D6251B v8::internal::StackGuard::HandleInterrupts+907
12: 00007FF7E5AAD719 v8::internal::interpreter::JumpTableTargetOffsets::iterator::operator=+7737
13: 00007FF7E62C77DD v8::internal::SetupIsolateDelegate::SetupHeap+546637
14: 0000019AF4857628
似乎我的机器人内存不足。我怎样才能为它分配更多内存或解决这个问题
注:这是我的第一个机器人,我对javascript知之甚少。在代码的底部,我看到了以下while循环: 当时间到达时!=符合事实的 { 达到的时间; } 我不太确定您在这里要做什么,但TimeReach是一个函数,所以这个条件,TimeReach!=true,始终返回true,这意味着将重复调用timereach,直到程序终止。这就是我假设错误来自的地方 尝试更改代码以查看函数返回的值是否为true请注意括号:
while (timeReached() != true)
{
timeReached();
}
在代码的底部,我看到了以下while循环: 当时间到达时!=符合事实的 { 达到的时间; } 我不太确定您在这里要做什么,但TimeReach是一个函数,所以这个条件,TimeReach!=true,始终返回true,这意味着将重复调用timereach,直到程序终止。这就是我假设错误来自的地方 尝试更改代码以查看函数返回的值是否为true请注意括号:
while (timeReached() != true)
{
timeReached();
}
我认为TimeReach函数内部创建的间隔导致了巨大的内存泄漏
由于您总是检查while语句中是否达到了日期,因此我认为您应该在小时检查函数setIntervalfunction{date=new date;},30000;只需const date=新日期 我认为TimeReach函数内部创建的间隔导致了巨大的内存泄漏
由于您总是检查while语句中是否达到了日期,因此我认为您应该在小时检查函数setIntervalfunction{date=new date;},30000;只需const date=新日期 这回答了你的问题吗?这回答了你的问题吗?非常感谢。我已经实施了您的更改,但问题仍然存在。中间的几行稍有改动,但错误信息保持不变。你能告诉我你想用timereach函数实现什么吗?那将帮助我解决这个问题。谢谢!我已经实施了您的更改,但问题仍然存在。中间的几行稍有改动,但错误信息保持不变。你能告诉我你想用timereach函数实现什么吗?这将帮助我解决这个问题。我已经改变了这一点,现在它似乎正在发挥作用。只需要调整房间连接代码。无论如何谢谢你@LucasMoura尝试替换您的channel.connect和channel.join;现在问题在于连接。播放'audio.mp3';一点它没有被重新组织为有效函数。@卢卡斯穆拉您应该切换到。thenconnection=>{在这种情况下,在加入通道后立即回调,并确保将join函数下面的所有代码移到新回调中。then@LucasMoura很高兴我能帮上忙:我已经改变了这一点,现在它似乎正在工作。只需要调整房间加入代码。无论如何,谢谢!@LucasMoura尝试替换你的频道。连接with channel.join;现在问题在于连接。播放'audio.mp3';位。它没有被重新组织为有效的函数。@LucasMoura您应该切换到一个。然后连接=>{在这种情况下,在加入通道后立即回调,并确保将join函数下面的所有代码移到新回调中。then@LucasMoura很高兴我能帮上忙: