让Discord机器人通过Google Sheets API读取和更新JavaScript中的电子表格

让Discord机器人通过Google Sheets API读取和更新JavaScript中的电子表格,javascript,google-sheets,discord,google-sheets-api,glitch-framework,Javascript,Google Sheets,Discord,Google Sheets Api,Glitch Framework,我在glitch.com上托管了一个Discord机器人,其目的是为用户存储、读取和更新一些基本统计数据。由于此设置导致每次项目进入睡眠状态时都重置变量,因此我成功地设置了GoogleSheetsAPI,以便将用户的统计数据永久存储在其他地方。然而,看在上帝的份上,我无法弄清楚如何让我的JavaScript变量从电子表格中获取它们的值 我最初的代码只是有很多变量存储每个成员的各种统计数据,例如: var User1Gold = 0 var User2Gold = 0 等等。对于像我这样的新手

我在glitch.com上托管了一个Discord机器人,其目的是为用户存储、读取和更新一些基本统计数据。由于此设置导致每次项目进入睡眠状态时都重置变量,因此我成功地设置了GoogleSheetsAPI,以便将用户的统计数据永久存储在其他地方。然而,看在上帝的份上,我无法弄清楚如何让我的JavaScript变量从电子表格中获取它们的值

我最初的代码只是有很多变量存储每个成员的各种统计数据,例如:

var User1Gold = 0 
var User2Gold = 0
等等。对于像我这样的新手爱好者来说,这很容易操作,但现在我发现自己一遍又一遍地阅读文档(我怀疑我寻求的答案是),却一无所获。有没有办法让我的变量等于某个电子表格中的某个单元格,然后直接使用它,或者说它远没有那么简单?也许是这样的:

var User1Gold = {spreadsheetId: 'iD', range: 'B3',};
编辑 好的!我前进了!我能够让我的机器人访问电子表格,找到一个特定的值,然后发送一条带有该值的消息。这正是我想要的,只是它似乎只能做一次?这是API附带的示例代码,我对其进行了调整,使变量等于电子表格中的一个单元格

var myvariable

function getvalue(auth) {
  const sheets = google.sheets({version: 'v4', auth});
  sheets.spreadsheets.values.get({
    spreadsheetId: 'SpreadsheetId',
    range: 'Sheet1!B3',
  }, (err, res) => {
    if (err) return console.log('The API returned an error: ' + err);
    const rows = res.data.values;
    if (rows.length) {
      rows.map((row) => {
      myvariable = (`${row[0]}`);
      });
    } else {
      console.log('No data found.');
    }
  });
} 
这和预期的一样,但我显然希望从我的电子表格中引用多个值(用户健康点、硬币等)。但是当我第二次复制粘贴上面的内容时,给变量和函数起了另一个名字,它就是不起作用。我收到错误消息:

(节点:2930)未处理的PromisejectionWarning:DiscordAPIError:缺失 权限

我做错了什么?为什么我的第一个函数似乎有权限,而我的第二个相同的函数却没有权限?有没有比为我想要获得的每个值声明一个函数更简单的方法呢

编辑2
我能够修复错误(不知道如何诚实),但我的问题仍然存在。我无法使用第二个函数从电子表格中检索第二个值并将其分配给第二个变量。控制台中没有出现错误,但程序根本没有这样做,而第一个函数(示例中的函数)工作得很好。

好的,我设法修复了它,所以我把这个留在这里,以防其他人也有同样的问题。为了让它工作,我只需调用原始函数(返回数组)中所需的所有值,然后将每个变量设置为数组中的特定值

var myvar1
var myvar2

    function getvalue(auth) {
      const sheets = google.sheets({version: 'v4', auth});
      sheets.spreadsheets.values.get({
        spreadsheetId: 'SpreadsheetId';
        range: 'Copa!B2:B3',
      },(err, res) => {
        if (err) return console.log('The API returned an error: ' + err);
        myvar1 = res.data.values[0];
        myvar2 = res.data.values[1];
        });
    }

好吧,我设法解决了,所以我把这个留在这里,以防其他人也有同样的问题。为了让它工作,我只需调用原始函数(返回数组)中所需的所有值,然后将每个变量设置为数组中的特定值

var myvar1
var myvar2

    function getvalue(auth) {
      const sheets = google.sheets({version: 'v4', auth});
      sheets.spreadsheets.values.get({
        spreadsheetId: 'SpreadsheetId';
        range: 'Copa!B2:B3',
      },(err, res) => {
        if (err) return console.log('The API returned an error: ' + err);
        myvar1 = res.data.values[0];
        myvar2 = res.data.values[1];
        });
    }

[更新了新代码和错误。]@PatrickRoberts感谢您的回答,但是我的机器人已经在服务器中拥有更高的角色,并且授予了所有权限,问题仍然存在。当我删除从电子表格中检索第二个值的第二个函数时,问题就消失了。我需要我的机器人检索几个不同的值,并将它们分配给不同的变量。这个错误不是来自谷歌表单。听起来这应该是一个完全不同的问题。@tehhowch谢谢你的回答,现在我明白这是一个无关的问题。我不知道怎么做,但这个错误已经修复,所以我只剩下问题的主要问题:我似乎无法获得上述函数的第二个副本,即使它的名称完全相同。[更新了新代码和错误。]@PatrickRoberts感谢您的回答,但是我的bot已经在服务器中具有更高的角色,并且授予了所有权限,问题仍然存在。当我删除从电子表格中检索第二个值的第二个函数时,问题就消失了。我需要我的机器人检索几个不同的值,并将它们分配给不同的变量。这个错误不是来自谷歌表单。听起来这应该是一个完全不同的问题。@tehhowch谢谢你的回答,现在我明白这是一个无关的问题。我不知道怎么做,但这个错误已经修复,所以我只剩下问题的主要问题:我似乎无法获得上述函数的第二个副本,即使它与不同的名称完全相同。