Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.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
Node.js 如何避免“;超过'的配额;ReadGroup'”;谷歌api中的错误_Node.js_Google Sheets Api_Discord.js - Fatal编程技术网

Node.js 如何避免“;超过'的配额;ReadGroup'”;谷歌api中的错误

Node.js 如何避免“;超过'的配额;ReadGroup'”;谷歌api中的错误,node.js,google-sheets-api,discord.js,Node.js,Google Sheets Api,Discord.js,我已经创建了一个机器人,它可以在谷歌电子表格中获取一些数据,然后再通过DM发送给50名加入Discord的工会成员 但是,由于对数据的要求很高,我收到一条错误消息,说我已超过组“ReadGroup”的配额,并限制了“USER-100” 为了避免出现这个错误,我创建了一个缓冲区函数,但是它仍然不起作用,有人知道如何避免出现这个限制错误吗 以下是我在Discord中键入特定命令时启动的主代码: const client1 = new google.auth.JWT(keys.client_email

我已经创建了一个机器人,它可以在谷歌电子表格中获取一些数据,然后再通过DM发送给50名加入Discord的工会成员

但是,由于对数据的要求很高,我收到一条错误消息,说我已超过组“ReadGroup”的配额,并限制了“USER-100”

为了避免出现这个错误,我创建了一个缓冲区函数,但是它仍然不起作用,有人知道如何避免出现这个限制错误吗

以下是我在Discord中键入特定命令时启动的主代码:

const client1 = new google.auth.JWT(keys.client_email, null, keys.private_key, ['https://www.googleapis.com/auth/spreadsheets']);
const client2 = new discord.Client(); 
.
.
.
let valeur1 = await liste(client1);
await sleep(100000);
console.log("End of first buffering time (100s)");
for (i = 0; i < valeur1.length; i++){
    if (valeur1[i] != undefined){
        try{
            let valeur2 = await envoi(client1, valeur1[i]);             
            const user = client2.users.get(String(valeur1[i])) || await client2.fetchUser(String(valeur1[i]));
            console.log("Ready to send to : " + user.id);
            await user.send("The character you need to improve is : " + valeur2[0] + "\n 1. " + valeur2[1] + " = " + valeur2[2] + " >>> " + valeur2[3] + "\n 2. " + valeur2[4] + " = " + valeur2[5] + " >>> " + valeur2[6] + "\n 3. " + valeur2[7] + " = " + valeur2[8] + " >>> " + valeur2[9]);
            console.log("Message sent for : " + user.id);
        } 
        catch(err){
            console.error(err);
            console.log("Error detected for : " + valeur1[i]);
            break;
        }
    }
}

更奇怪的是,这个错误涉及到一个已经收到DM的成员(他是列表中前10个成员之一)

多亏了Tanaike,我使用电子表格.values.batchGet()方法更新了代码。通过这种方式,我提取了一批值,而不是按值提取值


然后我做了我的公式。现在我不再有任何问题,甚至更好的是,我的脚本要快得多:)

在脚本中,为了检索值,可以使用spreadsheets.values.get方法。在这种情况下,发生这种错误是因为for循环中请求了此方法。为了避免这种情况,使用spreadsheets.values.batchGet方法如何?此外,例如,可以从
Serveur!检索值!函数
liste()
中的C3:C52
。在这些情况下,一个API调用可以检索多个值。我认为,通过这种方式,可以消除错误。如果这不是您想要的方向,我很抱歉。这很好,非常感谢:)最后,我只提取了一次,然后在提取后管理数据:)谢谢您的回复。我很高兴你的问题解决了。如果您的问题已经解决,您能否将其作为答案发布并接受?这样,它将对其他有相同问题的用户有用。
async function liste(client){
    const gsapi = google.sheets({version:'v4',auth: client});
    let data1 = new Array();

    for (i = 0; i < 50; i++) {
        const opt1 = {spreadsheetId: 'XXXXXX', range: 'Serveur!C' + (3+i)};
        let data2 = await gsapi.spreadsheets.values.get(opt1);  
        data1.push(data2.data.values);
    }
    return data1;
}
async function envoi(client, id){   
    const gsapi = google.sheets({version:'v4',auth: client});
    for (i = 0; i < 50; i++){
        const opt1 = {spreadsheetId: 'XXXXXX', range: 'Discord!A' + (3+i)};
        let data1 = await gsapi.spreadsheets.values.get(opt1);
        if (parseInt(id) === parseInt(data1.data.values)){                                  
            const opt2 = {spreadsheetId: 'XXXXXX', range: 'Discord!C' + (3+i)};
            let data2 = await gsapi.spreadsheets.values.get(opt2);
            const opt3 = {spreadsheetId: 'XXXXXX', range: 'Discord!D' + (3+i)};
            let data3 = await gsapi.spreadsheets.values.get(opt3);
            .     
            .
            .
            const opt10 = {spreadsheetId: 'XXXXXX', range: 'Discord!K' + (3+i)};
            let data10 = await gsapi.spreadsheets.values.get(opt10);
            const opt11 = {spreadsheetId: 'XXXXXX', range: 'Discord!L' + (3+i)};
            let data11 = await gsapi.spreadsheets.values.get(opt11);

            var stats = [data2.data.values,data3.data.values,data4.data.values,data5.data.values,data6.data.values,data7.data.values,data8.data.values,data9.data.values,data10.data.values,data11.data.values];

            await sleep(10000);
            console.log("Extraction done for " + parseInt(id));
            return stats;
        }
    }
console.log("Member not found");
return "erreur";
}
End of first buffering time (100s)
Extraction done for 408575708424699900
Ready to send to : 408575708424699925
Message sent for : 408575708424699925
.
.
.
Extraction done for 438420776652374000
Ready to send to : 438420776652374036
Message sent for : 438420776652374036
Error: Quota exceeded for quota group 'ReadGroup' and limit 'USER-100s' of service 'sheets.googleapis.com'
.
.
.
Error detected for : 493854774446391296