thirdweb: Create a Discord Bot That Gives Roles to NFT Holders
Learn how to create a Discord bot that gives roles to NFT holders.
What is thirdweb?
1. Start by navigating to the thirdweb dashboard and connecting your crypto wallet.

2. Select ‘Deploy New Contract'.

3. Under 'NFTs', select ‘NFT Collection’:


4. Give your NFT collection a name, icon, and description, then confirm that the recipient address is your crypto wallet address.

5. Select ‘Deploy Now’ and confirm the transaction through your crypto wallet.
6. Next, we need to create an IPFS bucket on Filebase.
7. Select ‘Buckets’ from the left sidebar menu, or navigate to.

8. Enter a bucket name and choose the IPFS storage network to create the bucket.

9. Now, upload your NFTs to Filebase using the web console and selecting ‘Folder’, then select the folder that contains your NFT files.
10. You will see your folder uploaded as a single object:

11. Copy the CID of your folder:

12. Navigate to your IPFS Folder using the Filebase IPFS gateway to see your folder’s files:
13. Head back to the thirdweb dashboard, where you will see the page for your NFT collection.
14. Open a command line window and install the thirdweb SDK:
15. Open an IDE such as VSCode and insert the following code, replacing the following values:
16. Save this script as mint.js, then run this script with the command:
17. Refresh your thirdweb dashboard. Your NFTs will be listed.

18. Then, in a new terminal window, create a thirdweb app using the thirdweb CLI:
19. Go to the Discord Developer Portal and select ‘New Application’:

20. Give your app a name, then select ‘Create’:

21. Once created, select the ‘Bot’ option on the left side-bar menu.


22. Give your bot a name to be displayed when it joins the server, and then toggle ‘public bot’ to be off.

23. Scroll down to bot permissions, then select ‘Manage Roles’ as the only permission given to this bot.

24. Save your changes.
25. Select the ‘OAuth2’ option from the left side bar menu, then ‘URL Generator’.

26. Select the check boxes for ‘bot’ under ‘Scope’, and ‘Manage Roles’ under ‘Bot Permissions’.

27. Open the copied URL in your browser.

28. Navigate back to your terminal window, and navigate inside the thirdweb app we created earlier and install the required dependencies:
29. Then, create a new folder within the directory pages called api, with another folder inside called auth:
pages called api, with another folder inside called auth:30. Navigate into the auth folder, then create a new file called [...nextauth].ts
auth folder, then create a new file called [...nextauth].ts31. Back in the Discord Developer Portal, copy the Client ID and Client Secret values.

32. Navigate back to the root of your project, then create a new file called .env.local.
.env.local.33. Then, back in the Discord Developer Portal, add the following redirect link for your bot:

34. Save your changes.
35. Open the […nextauth].ts file and insert the following code:
[…nextauth].ts file and insert the following code:36. Save this file.
37. Next, we need to create the code for the following workflows:
38. First, create a new folder at the root of the project called components and create a SignIn.tsx file inside it.
SignIn.tsx file inside it.39. Open the index.tsx file and replace the existing content with the following:
index.tsx file and replace the existing content with the following:40. Run the following command to start your app:
41. Your app will be running at localhost:3000 and will look like this:
localhost:3000 and will look like this:
42. Select ‘Connect Wallet’ to connect your crypto wallet to your app.
43. Then, select ‘Connect Discord’ to connect your Discord account.
44. Select ‘Authorize’ to authenticate your Discord bot with your Discord account.

45. You will see a ‘Give me the role!’ button. Let’s add functionality for this before using it.

46. Head to the Discord Developer Portal and select ‘Bot’ from the left side-bar menu.

47. Open your .env.local file and insert the following line for your bot’s token:
.env.local file and insert the following line for your bot’s token:48. Create a new file in the api directory called grant-role.ts.
api directory called grant-role.ts.
49. Open the index.tsx file and add the following code to create a new function after the const sdk = useSDK(): line:
index.tsx file and add the following code to create a new function after the const sdk = useSDK(): line:50. Then, add the replace the existing button code with the lines:
51. Restart your app with yarn run dev, and connect your wallet and Discord to the app again.

52. Once signed, the bot will give the authenticated user the configured role:

Previousthirdweb: Build an NFT Minting Page with thirdweb, IPFS, RainbowKit, and WAGMINextthirdweb: Create a Gated Website Using NFTs and IPFS
Last updated