我正在尝试创建一个函数来验证 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))
时却得到空对象?
如果我对您当前问题
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
。那么,下面的修改怎么样?
在此修改中,
async
被删除。本次修改仅修改了getInviteExpiration
。
async function getInviteExpiration(inviteUrl) {
function getInviteExpiration(inviteUrl) {
如果需要使用
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
}