owned this note
owned this note
Published
Linked with GitHub
---
title: Discord Haus Game
tags: bright ideas
---
## How to play:
- Player types "/haus"
- Add +1 to a counter
- Code randomly generates a number
- when number is hit, person is declared the winner
- players can not go twice in a row.
- players can go 5 times per game max
### Prompt
can you write code for a game using discord.js that does the following:
generates a random number between 1 and 100
players type "/haus" which adds 1, starting at zero incrementally until someone gets the correct number
winner is the person who lands on the random number
players can not go twice in a row, they must wait until someone else has gone before them
people can only go maximum 5 turn per game
```
const Discord = require('discord.js');
// create a new Discord client
const client = new Discord.Client();
// generate a random number between 1 and 100
const targetNumber = Math.floor(Math.random() * 100) + 1;
// keep track of the current number
let currentNumber = 0;
// keep track of the players who have gone so far
let players = [];
// maximum number of turns per game
const MAX_TURNS = 5;
client.on('message', message => {
// only process messages that start with "/haus"
if (!message.content.startsWith('/haus')) return;
// don't process messages from bots
if (message.author.bot) return;
// add the player to the list of players who have gone
players.push(message.author.id);
// increment the current number
currentNumber++;
// if the current number is greater than the target number,
// end the game and announce the winner
if (currentNumber >= targetNumber) {
message.channel.send(`Congratulations, ${message.author}! You won the game by getting the correct number: ${targetNumber}`);
// reset the game state
currentNumber = 0;
players = [];
} else if (players.length >= MAX_TURNS) {
// if the maximum number of turns has been reached,
// end the game and announce that no one won
message.channel.send('Sorry, no one won this game. Better luck next time!');
// reset the game state
currentNumber = 0;
players = [];
} else {
// if the game is still going, let the player know
// what the current number is
message.channel.send(`The current number is: ${currentNumber}`);
}
});
// log the client in using the token from your Discord app
client.login('YOUR_DISCORD_APP_TOKEN_HERE');
```
### can that code interact with web3.js?
Yes, it's possible to use the discord.js and web3.js libraries together in a project. web3.js is a JavaScript library that allows you to interact with the Ethereum blockchain, and discord.js is a library for building Discord bots.
Here's a simple example of how you might use both libraries together:
```
const Discord = require('discord.js');
const Web3 = require('web3');
// create a new Discord client
const client = new Discord.Client();
// create a new web3 instance, connecting to the Ethereum network
const web3 = new Web3('https://mainnet.infura.io/YOUR_INFURA_API_KEY');
// define the contract ABI
const contractABI = [
{
constant: true,
inputs: [],
name: 'name',
outputs: [{ name: '', type: 'string' }],
payable: false,
stateMutability: 'view',
type: 'function'
},
// more contract ABI definitions here...
];
// define the contract address
const contractAddress = '0x1234567890123456789012345678901234567890';
// create a web3 contract instance
const contract = new web3.eth.Contract(contractABI, contractAddress);
client.on('message', message => {
// only process messages that start with "/web3"
if (!message.content.startsWith('/web3')) return;
// don't process messages from bots
if (message.author.bot) return;
// call the contract's `name` method, and send the result
// to the user who sent the message
contract.methods.name().call().then(name => {
message.channel.send(`The contract's name is: ${name}`);
});
});
// log the client in using the token from your Discord app
client.login('YOUR_DISCORD_APP_TOKEN_HERE');
```
This code creates a Discord bot that listens for messages starting with /web3, and when it receives one, it queries the contract's name method and sends the result to the user who sent the message.
### can you mint an erc20 token by using discord.js interacting with web3.js
Yes, it's possible to mint an ERC20 token using discord.js and web3.js. ERC20 is a standard for implementing tokens on the Ethereum blockchain, and web3.js is a JavaScript library that allows you to interact with the Ethereum blockchain. discord.js is a library for building Discord bots.
Here's a simple example of how you might use these libraries to mint an ERC20 token:
```
const Discord = require('discord.js');
const Web3 = require('web3');
// create a new Discord client
const client = new Discord.Client();
// create a new web3 instance, connecting to the Ethereum network
const web3 = new Web3('https://mainnet.infura.io/YOUR_INFURA_API_KEY');
// define the contract ABI
const contractABI = [
{
constant: true,
inputs: [],
name: 'name',
outputs: [{ name: '', type: 'string' }],
payable: false,
stateMutability: 'view',
type: 'function'
},
// more contract ABI definitions here...
];
// define the contract address
const contractAddress = '0x1234567890123456789012345678901234567890';
// create a web3 contract instance
const contract = new web3.eth.Contract(contractABI, contractAddress);
client.on('message', message => {
// only process messages that start with "/mint"
if (!message.content.startsWith('/mint')) return;
// don't process messages from bots
if (message.author.bot) return;
// get the user's Ethereum address from their Discord profile
const userAddress = message.author.id;
// call the contract's `mint` method, sending 10 tokens
// to the user's Ethereum address
contract.methods.mint(userAddress, 10).send({
from: 'YOUR_ETHEREUM_ADDRESS',
gas: '1000000'
}).then(() => {
message.channel.send(`10 tokens were minted and sent to ${message.author}`);
}).catch(err => {
message.channel.send('Sorry, there was an error minting the tokens.');
console.error(err);
});
});
// log the client in using the token from your Discord app
client.login('YOUR_DISCORD_APP_TOKEN_HERE');
```
### can someone have an erc721 token minted to their wallet by winning a game in discord using discord.js and web3.js?
```
const Discord = require('discord.js');
const Web3 = require('web3');
// create a new Discord client
const client = new Discord.Client();
// create a new web3 instance, connecting to the Ethereum network
const web3 = new Web3('https://mainnet.infura.io/YOUR_INFURA_API_KEY');
// define the contract ABI
const contractABI = [
{
constant: true,
inputs: [],
name: 'name',
outputs: [{ name: '', type: 'string' }],
payable: false,
stateMutability: 'view',
type: 'function'
},
// more contract ABI definitions here...
];
// define the contract address
const contractAddress = '0x1234567890123456789012345678901234567890';
// create a web3 contract instance
const contract = new web3.eth.Contract(contractABI, contractAddress);
client.on('message', message => {
// only process messages that start with "/mint"
if (!message.content.startsWith('/mint')) return;
// don't process messages from bots
if (message.author.bot) return;
// get the user's Ethereum address from their Discord profile
const userAddress = message.author.id;
// call the contract's `mint` method, sending a token
// with the ID 1 to the user's Ethereum address
contract.methods.mint(userAddress, 1).send({
from: 'YOUR_ETHEREUM_ADDRESS',
gas: '1000000'
}).then(() => {
message.channel.send(`A token was minted and sent to ${message.author}`);
}).catch(err => {
message.channel.send('Sorry, there was an error minting the token.');
console.error(err);
});
});
// log the client in using the token from your Discord app
client.login('YOUR_DISCORD_APP_TOKEN_HERE');
```
This code creates a Discord bot that listens for messages starting with /mint, and when it receives one, it calls the contract's mint method to mint a token with the ID 1 and send it to the user's Ethereum address.
Note that in order for this code to work, the contract must have a mint method that allows for tokens to be minted, and the contract must be deployed to the Ethereum network.