Google Apps 脚本中 Discord Invite API 响应的日期解析问题

问题描述 投票:0回答:1

我正在尝试创建一个函数来验证 Discord 邀请并检查该邀请是否只是来自 Discord 邀请 URL 的临时邀请。如果邀请是临时的,我希望它以

new Date
的形式返回到期日期。如果它没有过期,我希望函数返回
false

async function getInviteExpiration(inviteUrl) {
  // Extract the invite code from the URL
  const regex = /discord\.gg\/([a-zA-Z0-9]+)/;
  const match = inviteUrl.match(regex);
  if (!match) {
    throw new Error('Invalid invite URL');
  }

  const inviteCode = match[1];

  const response = UrlFetchApp.fetch(`https://discord.com/api/invites/${inviteCode}?with_counts=true`);
  if (response.getResponseCode() !== 200) {
    throw new Error('Failed to fetch discord invite information');
  }

  const inviteData = JSON.parse(response.getContentText());
  console.log(inviteData.expires_at);  // Temporary, just for testing
  console.log(new Date(inviteData.expires_at));  // Temporary, just for testing
  if (inviteData.expires_at === null) {
    return false; // Invite never expires
  } else {
    return new Date(inviteData.expires_at); // Return expiration date
  }
}

我做了一个测试函数来测试

getInviteExpiration

function test() {
  const permanentUrl = "https://discord.gg/minecraft";
  console.log(getInviteExpiration(permanentUrl)); // Expecting false
  
  const tempUrl = "https://discord.gg/DdMJXskh";
  console.log(getInviteExpiration(tempUrl)); // Expecting Date
}

这是输出的控制台,

null
Wed Dec 31 1969 18:00:00 GMT-0600 (Central Standard Time)
{}
2024-04-18T02:27:18+00:00
Wed Apr 17 2024 21:27:18 GMT-0500 (Central Daylight Time)
{}

为什么我在

getInviteExpiration
函数中能够解析
console.log(new Date(inviteData.expires_at))
时却得到空对象?

javascript google-apps-script discord.js
1个回答
0
投票

如果我对您当前问题

Why is it that I'm getting empty objects when in the getInviteExpiration function, it was able to parse console.log(new Date(inviteData.expires_at))?
的理解是正确的,我猜测您当前问题的原因是由于
async
。那么,下面的修改怎么样?

修改后的脚本1:

在此修改中,

async
被删除。本次修改仅修改了
getInviteExpiration

来自:

async function getInviteExpiration(inviteUrl) {

致:

function getInviteExpiration(inviteUrl) {

修改后的脚本2:

如果需要使用

async
,下面的修改如何?本次修改仅修改了
test

来自:

function test() {
  const permanentUrl = "https://discord.gg/minecraft";
  console.log(getInviteExpiration(permanentUrl)); // Expecting false
  
  const tempUrl = "https://discord.gg/DdMJXskh";
  console.log(getInviteExpiration(tempUrl)); // Expecting Date
}

致:

async function test() {
  const permanentUrl = "https://discord.gg/minecraft";
  console.log(await getInviteExpiration(permanentUrl)); // Expecting false

  const tempUrl = "https://discord.gg/DdMJXskh";
  console.log(await getInviteExpiration(tempUrl)); // Expecting Date
}
© www.soinside.com 2019 - 2024. All rights reserved.