discord api test

This commit is contained in:
Kalle (Sendou)
2020-12-22 13:11:54 +02:00
parent 18e804ba24
commit c49c279807
3 changed files with 98 additions and 4 deletions

31
package-lock.json generated
View File

@@ -2768,6 +2768,14 @@
"dev": true,
"requires": {
"tweetnacl": "^0.14.3"
},
"dependencies": {
"tweetnacl": {
"version": "0.14.5",
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
"integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
"dev": true
}
}
},
"big.js": {
@@ -4412,6 +4420,14 @@
}
}
},
"discord-interactions": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/discord-interactions/-/discord-interactions-1.4.1.tgz",
"integrity": "sha512-JLB+uAWEluymJWlJkQ9GJui2cYdTMM3pGOEN5j3p2S/+7xdRjjGtqGgRGAqA5tyPVUHHchtsV/EAooVgM0cVBg==",
"requires": {
"tweetnacl": "^1.0.3"
}
},
"dom-helpers": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz",
@@ -9593,6 +9609,14 @@
"jsbn": "~0.1.0",
"safer-buffer": "^2.0.2",
"tweetnacl": "~0.14.0"
},
"dependencies": {
"tweetnacl": {
"version": "0.14.5",
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
"integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
"dev": true
}
}
},
"ssri": {
@@ -10229,10 +10253,9 @@
}
},
"tweetnacl": {
"version": "0.14.5",
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
"integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
"dev": true
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz",
"integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw=="
},
"type": {
"version": "1.2.0",

View File

@@ -32,6 +32,7 @@
"@prisma/client": "^2.13.1",
"@sendou/react-sketch": "^0.5.2",
"countries-list": "^2.5.6",
"discord-interactions": "^1.4.1",
"framer-motion": "^3.1.1",
"next": "^10.0.3",
"next-auth": "^3.1.0",
@@ -39,6 +40,7 @@
"next-images": "^1.6.2",
"next-seo": "^4.17.0",
"nprogress": "^0.2.0",
"raw-body": "^2.4.1",
"react": "^17.0.1",
"react-dom": "^17.0.1",
"react-draggable": "^4.4.3",

69
pages/api/discord.ts Normal file
View File

@@ -0,0 +1,69 @@
import { verifyKey } from "discord-interactions";
import { NextApiRequest, NextApiResponse } from "next";
import getRawBody from "raw-body";
/*
{
"type": 2,
"token": "A_UNIQUE_TOKEN",
"member": {
"user": {
"id": 53908232506183680,
"username": "Mason",
"avatar": "a_d5efa99b3eeaa7dd43acca82f5692432",
"discriminator": "1337",
"public_flags": 131141
},
"roles": ["539082325061836999"],
"premium_since": null,
"permissions": "2147483647",
"pending": false,
"nick": null,
"mute": false,
"joined_at": "2017-03-13T19:19:14.040000+00:00",
"is_pending": false,
"deaf": false
},
"id": "786008729715212338",
"guild_id": "290926798626357999",
"data": {
"options": [{
"name": "cardname",
"value": "The Gitrog Monster"
}],
"name": "cardsearch",
"id": "771825006014889984"
},
"channel_id": "645027906669510667"
}
*/
const discordCommandHandler = async (
req: NextApiRequest,
res: NextApiResponse
) => {
const PUBLIC_KEY =
"90bc7521c9602f53db2c93c6a00a68d71a4dbb703f8dc91ef66eb2462ad63d93";
const signature = req.headers["X-Signature-Ed25519"] as string;
const timestamp = req.headers["X-Signature-Timestamp"] as string;
const body = await getRawBody(req); // rawBody is expected to be a string, not raw bytes
const isValidRequest = verifyKey(body, signature, timestamp, PUBLIC_KEY);
if (!isValidRequest) {
return res.status(401).end("Bad request signature");
}
// if req.json type === 1
res.status(200).json({
type: 1,
});
};
export default discordCommandHandler;
export const config = {
api: {
bodyParser: false,
},
};