#development
1 messages Β· Page 431 of 1
np
When you forget to await asyncio.sleep() so your bot spams your DMs and gets ratellimited. 
wall of text
yoU FORGOT TO AWAIt
Is there a way to change an app name ?
in discord I mean ?
globally
ie : my bot name is Coinbot and I wanna change it to Koinbot
The lib your using should have a name function
i'll look at it
by either using the client or client user
@mental solstice Nevermind I found a solution. I added a substring so when the user triggers the bot with "@" it uses the second api for replies but if the message contains "@!" It uses discords API
In short term just added a substring
.
What the double flip flop
perms.js
var ranksContent = require('./ranks.json');
var ranks = [ ranksContent ];
if (ranks.some(rank => rank.hdevs === msg.author.id )) {
msg.channel.send("You are a head developer | Permission level: `7`")
} else {
if (ranks.some(rank => rank.devs === msg.author.id )) {
msg.chanel.send("You are a developer | Permission level: `6`")
} else {
if (ranks.some(rank => rank.managers === msg.author.id)) {
msg.channel.send("You are a manager | Permission level: `5`")
} else {
if (ranks.some(rank => rank.hadmins === msg.author.id)) {
msg.channel.send("You are head an administrator | Permission level: `4`")
} else {
if (ranks.some(rank => rank.hmods === msg.author.id)) {
msg.channel.send("You are a a head moderator | Permission level: `3`")
} else {
if (ranks.some(rank => rank.mods === msg.author.id)) {
msg.channel.send("You are a moderator | Permission level: `2`")
} else {
msg.channel.send("You are a user | Permission level: `1`")
}
}
}
}
}
}
ranks.json
{
"hdevs": [ "231733082804322304" ],
"devs": [ "208639802231226368" , "304619179762515968" ],
"managers": [ "297433416998191127" ],
"hadmins": [ "260470661732892672" ],
"admins": [ "116930717241311236" , "217006264570347520" ],
"hmods": [ "294129532531638272" ],
"mods": [ "188013936442867713" , "227110473466773504" , "338024531098861569" , "145557815287611393" , "447856788885471242" , "393857965536313345" , "252001272146821120" , "386941684723744768" ],
"trustedusers": [ "241723504620339201" , "274990180857937922" , "220875646270701568" , "239790360728043520" ],
"donators": []
}
any ideas why this doesn't work?
switch
error pls?
also yeah switch jesus fuck
JSON 
XML 
SQL 
TXT file 
Physical Piece of Paper 
.YTD file 
.docx file 
Oh wait, didn't see Adam's message. 
@feral matrix please send the error message
there's no error
it just says mod is user for example
but head developer is gooda
and head mod
and head admin
and manager
basically just mods, admins and devs aren't working
in others world it's always good if array have only one item
you're doing
rank.devs === msg.author.id```
If I read your json correctly, it'll test
```javascript
[ "208639802231226368" , "304619179762515968" ] == msg.author.id```
as if an array can be equal to a string
Only special case is when array has one elem
That way, [ 2] == 2 will return true
that's why it only works for your arrays who got one elem
do it manually ?
Help :(
If you use iframes, you need to use at least 300 more characters..
Yes I use an iframe, but what would I need to add?
Idk
βhello and welcome to this mean-less content, he is here only because I use iframe and I need to add at least 300 words, I hope you enjoy reading this becauseI enjoyed writing thisβ
Add this
^
Hmmm
Thanks
So... hm... add mean-less <style>
Like... re-write the original page <style>, so it wonβt effect the page but it will do those 300 words
u need the 300 characters + 300 more
also if you chain if else. please dont do it
if (condition) {
} else {
if (condition) {
}
}
Instead fo
if (condition) {
} else if (condition) {
}
"Haha I do that"
Why else if, instead of another seperate if statment
Because what if both conditions are true?
If you only want one of the two to run, then you do else-if
Or else
Idk. I've never seen a better reason to use else if, over if.. usually makes the code look sloppy.. so im just curious as to why
Example of why to use else if:
// my fancy robot that jitters because it's evaluating both statements separately
if (FORWARD_BUTTON) {
MOVE_FORWARD();
} else {
STOP_MOVING();
}
if (BACKWARD_BUTTON) {
MOVE_BACKWARD();
} else {
STOP_MOVING();
}
// my fancy robot that doesn't jitter
if (FORWARD_BUTTON) {
MOVE_FORWARD();
} else if (BACKWARD_BUTTON) {
MOVE_BACKWARD();
} else {
STOP_MOVING();
}
I could instead do this:
// my fancy robot that doesn't jitter
if (FORWARD_BUTTON) {
MOVE_FORWARD();
} else {
if (BACKWARD_BUTTON) {
MOVE_BACKWARD();
} else {
STOP_MOVING();
}
}
But as I add more statements (maybe I want to go left or right) it gets nested very deep making it harder to follow and understand. Also let's say I decide I no longer want the robot to be able to go backwards, I can simply remove that else-if without having to go through and fix formatting.
If (FORWARD_BUTTON)
MOVE_FORWARD;
If (BACK_BUTTON)
MOVE_BACK;
STOP_MOVING;
It would be in a while loop since it keeps going through and checking if a button is released, or if the user pushes a new button. Even if yours was in a loop, it would jitter since you are giving the motors power and then cutting it (I'm not making this up, this has been a real issue with improper programming in my robotics club).
An actual simple program for these robots would look like:
#pragma config(Motor, port1, motor1, tmotorVex393_HBridge, openLoop, awesomeMotor)
task main()
{
while (true)
{
if (vexRT[Btn8U])
{
motor[awesomeMotor] = 127; //set motor power to 127
}
else if (vexRT[Btn8D])
{
motor[awesomeMotor] = -127; //set motor power to -127
}
else
{
motor[awesomeMotor] = 0; /set motor power to 0
}
}
}
Hi, how do I do for my bot only to have certain commands in servers where someone voted for it?
u need the dbl api
ok the bot keeps making me loose on crash even though i hit stop before it said i lost
^^^^

(Actual robot code is more command-based, obviously, but that is valid robot code)
If you did what Uncle did, the robot would move and stop constantly since it's doing both MOVE_FORWARD and STOP_MOVING every time. If you pressed both the forward and the back button, it would go forward, go backwards, and stop, all within a few milliseconds.
It is very rare that you actually use separate if statements; else-if are easier to debug and are much less buggy. The only time you use separate if statements is in the same situations where you wouldn't use the break keyword at the end of a case in a switch statement.
Does anyone here actually send sharded stats?
yes
argh
a lot of people do
what's the point of it? If my bot knows its total guild count can it just keep sending that?
More accurate how, what?
ok
I guess it's very useful if you have independent shards that only know their own guild count, you could have each shard send its own stats
i'ved receive error
Error: EACCES: permission denied, open '../server.json'
how to fix that? π¦
using glitch
server.json 
its name of file connect from write Json when command called.
i use json like autorole its working fine
this new json file need permission
don't use json as a db π
@trim plinth use sqlite?
i usually using sqlite.. when i arrange the code.. my brain dizzy.. π #cadet
are sqlite have many diffrence with another db services?
or same?
well not a lot of differences I'd think if you're talking about sql databases
NoSQL dbs are a different story
every noSQL lib is a special snowflake

and most noSQL dbs require a server instance
SQLite is probably the best embedded db
period
better-sqlite3 for node
hello.. i want ask (again).
why this code to get server id from config.json not working?
function getroles() {
for (let index = 0; index < servers.length; ++index) {
bot.guilds.get(servers).roles.find('name', config.roleName)```
servers.json file :
``` "servers": ["430720567675453440", "441923029140897792"],```
error console :
```TypeError: Cannot read property 'roles' of undefined
9:24 AM```
From what I see:
bot.guilds.get(servers)
..your trying to get a guild from an array of IDs, which won't work
const servers = config.servers;
servers.forEach(id => <client>.guilds.get(id).roles.find('name', 'name here'))
// => <role>, <role>
iirc, something like that should work.

How do you get roles around here?
You can get the bot developer role if you submit a bot you have created
That's unfortunate
I reckon there are a few hosts you can get for free but they aren't very good
SkySilk. 
if you have a computer somewhere that you dont use much, you can use that as a host, i used a random laptop as a host for my Discord Bot
Even though they are great for starters, you should get a proper host when your bot gets bigger
I have like 5 laptops which are like 8 years old, do you think I can run a shard on each 
If you choose a computer you'll need to ensure it can run the entire day as well
a laptop is a suprisingly good idea, and if you can get some backup data from a phones hotspot, the bot can still run if your power goes out
oh
hi
my bot is not added
If you submitted it, just wait.
It can take up to a week (Right now it takes longer than usual so just be patient)
It will be added once its approved
quick question: can you get the subsetest class of an instance? Java
ok I found there is instanceof in Java
problemo fixedo
What's the difference in user mentions with <@UserID> vs <@!UserID>?
it displays the nickname even without the ! tho
hello.. anyone know command get console.log send it channel text chat?
discord.js
Why do I get an error when I do this?
for(i = 0; i = data.maxemoji[message.guild.id]; i++){
var item = Math.floor(Math.random()*emojis.length);
console.log(emojis[item])
message.react(emojis[item])
emojis.splice(item)
}
data.maxemoji[message.guild.id] = 10
emojis = ["π―","π","π","448998892718260224","415240771332210708","448998892328189980","420354639570141184","448998889698099221","π±","π"]
no the for works, the message.react gives me this error:
TypeError: Emoji must be a string or Emoji/ReactionEmoji
But i logged it, and it is an Emoji/ReactionEmoji
it is probably π
??
I think it is a compound emoji (or whatever it is called) so it doesn't recognize it
Well which emoji is giving the problem
the for loop isn't entirely correct, you want a < instead of an = for the second statement
^
No
no
<:emojiname:emojiID>?
nope
Like that
^ might work
not for reactions
What shiv said
you need the id only
That's how reactions are supposed to be 
Can you at least try it without telling us we are wrong
when i do 6+6*6 it says invalid syntax
ids work
^
when i do 6+6*6 it says invalid syntax
idk what case your using it in, but in eval it works for me
Did you console.log the emoji
oooh i did 6+6&6
lol
nvm
One of your ids might be incorrect
it doesn't work with any emoji
oh
What is logging?
the emoji

strange
How do I make a bot?
- learn a coding language
what programming language do you want to use
Idk
Want to learn a different language? Over the course of 25 episodes, our friend Bob Tabor, from www.LearnVisualStudio.net, teaches you the fundamentals of C# programming. Tune in to learn concepts appl
Thx
there's this one too
pick a language and learn it
come back when you know your way around a good language
also pick c# instead js is shit
Ok
also Java sucks too don't use that 
Java is great
Java is nice and has its uses
If you wanted to make use of the JVM I'd recommend Kotlin
Syntax is nice and has a few things that Java doesn't
Fundamentally they both translate into the same bytecode
So performance should be equal
how do people make redirect uris? mine for example shows unkown error
I like Java's syntax more than Kotlin's
Let's stop the X-language-is-better-than-Y thing or move it to #memes-and-media. 
Kotlin seems to reflect Python a little more - the way you can access arrays in Kotlin and also filter them etc is a little cleaner than Java IMO
We are not saying any language is better than any other we are just talking about our opinions on languages
@slender thistle It's a civil discussion, I'm providing my opinion on why I use Kotlin/prefer it over others
Tryna backseat mod here, don't mind me.
smh lol
Leave the modding to the mods
Slowly moving my bot to Kotlin, 64.6% Java, 35.4% Kotlin ^^
π
One of the things I do like in Kotlin is string interpolation
I'm used to things like ```js
console.log(error: ${error})
Or ```py
print(f"Hey {username}!")
Ah
Being able to do ```kotlin
"Error in x: $err"
is very nice
I have been programming in Java for 4 years so I have never done such things π
Not sure how performance fares though lol
Kek
If you ever find time, give Kotlin a try :)
Oo, I have been on your profile before. I was browsing through like Aeth's github and then it led me to you somehow
lol
Hi, how do you use DBL api? DM me or mention me if you know pls (I'm gonna be offline for 10 mins)
@violet wyvern You posted that a few minutes ago π€
?
That message
I did?
classic excuse

how to change channel name with js?
docs\β’
can js make find channel with includes text?
example : newUser.guild.channels.find.includes('name', 'Member :')
No need for .includes
yes.. i want change channel name including some "words". Any code for this command?
how much messages should i make my bot/discord.js cache?
depends on how much advantage you personally have from a cache
if you don't fetch past messages alot, 0
hmm ok
anyone can teach me how to create a watch.json i using glitch but his always auto restart
@earnest phoenix use this ```json
{
"install": {
"include": [
"^package\.json$",
"^\.env$"
]
},
"restart": {
"exclude": [
"^public/",
"^dist/"
],
"include": [
"\.js$",
"\.json"
]
},
"throttle": 900000
}
@trim plinth thanks, i will try it
np
its working thanks
Which is better. JS or Python?
Honestly it's subjective
depends on what you want to do

Python however, has an unorthodox syntax compared to most other languages
no need to use both to make a good bot
Knowing both is someone I would advise
both can do basically everything you'll ever need
At least Javascript is still a nice skill to have
knowing both helps choosing the most appropriate one
but you don't need to use both if you don't want
Hmm π€
Exactly, for example, discord.py has no way to receive audio streams from Discord
It can send fine, it cannot listen
Onto remaking my bot in Javascript! :v
Node.js ftw
c#β’
How would I make node.js inputs output to a website?
what
that's outside of the scope of what we do here
Wut
fair enough
you have two options basically, either have your website accept inputs via get or post (with proper authorization), or have nodejs itself run the server and serve the page
rather do it here so more people can see and input their insights
do you have a website?
so set up a php page that listens to GET requests for example
for example, lets say you have mywebsite.com/page.php
in this page.php you'll have something like $data = $_GET["data"]
Right-
and when you access this page with mywebsite.com/page.php?data=abcd
its node.js not php from what I saw? π
your $data variable will have that information
You can do it with node.js
Well
so inside node.js, you just make a request to "mywebsite.com/page.php?data="+nodejsvariablehere
As long as it works
a simple express and ejs setup would work fine and better than php imo
sure, but were assuming he already has an existing website
you don't need to use php at all if you have node
another way is to do it the other way around
My webhost doesnt support node
rip
set up a node.js server with express or something, and have your php page send a request to your node.js server ip address
@quartz kindle so I need a vps
why my bot have write N/A
Then install a webserver on it?
to run node.js yes

Sounds complex
I may just make the node.js save to a text doccument
Then make a script that uploads those every 24 hours
you can make node do the uploading
why my bot have write N/A
no idea

You didn't post server count
@earnest phoenix you aren't posting your server count, or your not posting it correctly.
Hhmm I've filled it right before the entry, is there any other way?
server count
You need to do that via your bot
how, can you teach me? 
thanks
Find your bot lang and the docs are there
what is discordDBL token?
@earnest phoenix found on your bots edit page at the bottom, or the API docs page iirc.
Also, does anyone know a way to get Socialblade infomation for a YouTube channel, or detailed data on a channel? A search brought up https://github.com/xissy/node-socialblade-data, but it just returns null as the data ;-;
i not understand, later i will try it because now i very busy 
Use the YouTube v3 api
I'm honestly not a fan of the raw API, so trying to avoid it @heavy rock >.>
thats my last resort
Use an api wrapper if you find one
simple-youtube-api
I already use it for my video function, might try it π
https://github.com/Haidy777/node-youtubeAPI-simplifier/blob/master/examples/channel-functions.js
owo this looks promising though
Why don't you like it?
await api.getChannel(args.join(' ').startsWith('https://youtube.com/channel/') ? args.join(' ') : 'https://youtube.com/channel/'+args.join(' '))
.then(results => {
console.log(results[0]);
const embed = new Discord.RichEmbed()
.setAuthor(results[0].title)
m.edit({ embed: embed });
}).catch(console.error);
I get errors with that:
How would I make Discord.JS grab messages in certain channels then save to a text document?
I'm so confused with this part...
@sick cloud wut are u searching
nevermind, fixed it :l
if(cmd === `${prefix}avatar`){ message.channel.send(message.author.avatarURL); };
Whats wring with this...
It wont send the avatar. (Discord.JS)
ok... does the command even run?
as in console.log a test inside the if statement
to see if the command is even trying to run
I can't tell without seeing the message handeling event
if(message.author.bot) return;
if(message.channel.type === "dm") return;
let prefix = botconfig.prefix;
let messageArray = message.content.split(" ");
let cmd = messageArray[0];
let args = messageArray.slice(1);
let name = botconfig.botname;
Do other commands work?
Yes
Can you show the full event then?
What do you mean?
the whole bot.on('message')
π€ I need to see the other commands to see if the = signs are messed up π€¦
use https://hastebin.com and post the whole bot.on message
I wouldn't
Also, if tokens are in it, you can jsut remove them
do an elimination process
console log each individual parts and see whats working and what isnt
//Grab "banned" messages so you may punish user at later date.
if (message.content.includes ("@")){
console.log(`[${name}//Spam Handler]: Harmless (user) error detected, extensive report suppressed. The "@" text/symbol was sent by (<@${message.author.id}>) in "${message.guild.name}".`);
console.log(`[${name}//Spam Handler]: Offendor ID: "${message.author.id}"`);
console.log(`[${name}//Spam Handler]: Offendor Name: "${message.author.username}"`);
console.log(`[${name}//Spam Handler]: Offended Guild: "${message.guild.name}"`);
console.log(`[${name}//Spam Handler]: Message ID: "${message.id}"`);
console.log(`[${name}//Spam Handler]: Timestamp: "${message.createdAt}"`);
message.channel.sendMessage("**Alert:** *Mass mentions are generally frowned upon. Please use them sparingly.*").then(msg => msg.delete(2000));
}
});```
How should I edit this so it only runs after "@" is sent multiple times in succession?
create a map with the user id and 1, then add 1 to that 1 if done again and if its greater than 3l, or 5, then ban them.
so like
bot.on("message", msg => {
const enmap = require('enmap')
const spammers = new Enmap();
// If the content includes a mention, and they are not saved in the spammers, add them in
if (msg.content.includes('@') && !spammers.keyArray().includes(msg.author.id)) spammers.set(msg.author.id, 1);
// If they are already there, add 1 to it.
if (msg.content.includes(`@`) && spammers.keyArray().includes(msg.author.id)) spammers.set(msg.author.id, spammers.get(msg.author.id)+1);
// Check if they have more than 5. If so, ban that mofo
if (spammers.get(msg.author.id) > 5) msg.guild.ban(msg.author.id, 'Spammed too much - AutoBanned')
})
// Put this in your ready event:
bot.setInterval(() => {
spammers.forEach(key => {
spammers.delete(key);
})
// Erase the spammers every 10 seconds.
}, 10000)
I dont want it to auto ban
I just want it to set a variable to 1
or something
Idk..
console.log(`[${name}//Spam Handler]: Harmless (user) error detected, extensive report suppressed. The "@" text/symbol was sent by (<@${message.author.id}>) in "${message.guild.name}".`);
console.log(`[${name}//Spam Handler]: Offendor ID: "${message.author.id}"`);
console.log(`[${name}//Spam Handler]: Offendor Name: "${message.author.username}"`);
console.log(`[${name}//Spam Handler]: Offended Guild: "${message.guild.name}"`);
console.log(`[${name}//Spam Handler]: Message ID: "${message.id}"`);
console.log(`[${name}//Spam Handler]: Timestamp: "${message.createdAt}"`);
message.channel.sendMessage("**Alert:** *Mass mentions are generally frowned upon. Please use them sparingly.*").then(msg => msg.delete(2000));
}```
I need it to do thta
that**
@grizzled isle
I gave an example for you. You can cancel some things, you can add, etc.
You won't get the code spoonfed to you :^)
Took 10 mins to type that example from the top of my head. lol
I think I got it
I just dont know how Ill collect user data for my console.log
When it hits 5
Wait...
I got it... Im just being stupid...
It's spelled "Offender"
You need to use a website or github that has the DBL widget on it so yea
@buoyant oak not entirely, but you need full documentation on how to use the bot (on a website, GitHub, etc..) as well as somewhere with the widget on it. So you can use a website, yeah, but you can also use a GitHub repository, A Gitlab one even owo or something else.
No problem.
So, I have this fancy scrollbar thing. π
How do I make the scrollbar float?
So its like, 5px or something off the edge of the window.
Don't scrollbar css tricks only work on webkit based browsers?
Yeah, IE and Firefox just show the default scrollbar.
So that means you shouldn't make the scrollbar the center of your design
And your design should also work with other scrollbars
Still, you can make it float by applying a :after element
And making it 5 wide
margin or padding? but okay
Its margin
You can achieve padding as well by :after-ing internal elements
Scrollbar CSS is super bizzare
it isn't working ;-;
Hmmm
::-webkit-scrollbar {
width: 10px;
}
::-webkit-scrollbar-track {
background: #FF0000;
}
::-webkit-scrollbar-thumb {
background: #b62f2f;
}
::-webkit-scrollbar-thumb:after {
margin: 5px;
}
..still the same:
you want the scrollbar... outside the browser window...?
No x.x
I want it so it floats inside the browser window, with a 5px padding around it, so it isn't sticking to the border
Ah
Dont set actual margin
Set element size
Like width
Or height
And location relative to rest of scrollbar
Scrollbar styling is something you'll waste your time on instead of doing something beneficial to the site itself (that can be seen on all browsers not just chrome on pc)
feels confused
POP
if temVar is more then 2k chars make another tempVar possible for the extra?
What is tempVar?
Is that a function? Can you send relevant code?
do unhandled rejections crash the process in node 10+? https://please.zbot.me/GXSGkdcK.png
if so, is there a way to stop this?
yeah but to my knowledge it was only deprecating uncaught unhandled rejections (ie, if you didn't have an event catching the rejections)
also it was deprecated ages ago
so it can't be that https://please.zbot.me/0KJEL4ms.png
^
i do though 
And its a database error
first line in my bot.js file (the one i use to run everything) is this https://please.zbot.me/nqZku1tw.png
So maybe its not the unhandled
yeah in any case if they are different it must have been updated to crash on error
yeah, both are the exact same version
4.33.4
ill try a downgrade to node 8/9 to see if that helps, if they did fully remove unhandled rejections that's real bad news
because discord.js loves unhandled rejections
Hmm π€
im still on node 8
hmm ok
I don't use node at all 
good solution
Yeah π
ew you java
?
@quiet bobcat message.guild.roles.exists(role id)
or message.guild.roles.has(role id)
exists shouldn't be used with id blake
oh
const role = message.guild.roles.get("190843013847");
if (role) {
//exists
} else {
// does not
}
has returns boolean if key is in the collection, get returns value by id or undefined
(node:972) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): TypeError: fn.bind is not a function```
oh you are on master right?

yeah
you need to pass a function
it isn't key, value anymore, it only accepts a function now
π€
its only for find and exists tho
π
Collection.find(value => value === expectedValue)
something like that
yea but he used something else which throw his error and i just wanted to explain to him π. If you wanna get a value by ID use .get(), if you want get a value by property use .find() with a function
Does Collection extend Map 
yes
oh yh igy
const role = message.guild.roles.find(r => r.name === "some_role_name");
if (role) {
// exists
} else {
// does not
}
i need some commands for people to earn money if their balance is 0
i have a work command
you do +work and it just gives you like 30 dollars for "working"
its on a 30 minute cooldown in my case
you could have something like a "chance" command to have a random event occur (like in monopoly) and it gives you a certain amount of money with funny responses
ofc it'd be on a cooldown too
maybe a gambling command
How do I see if a user has a role in discord.js (v12)
doesn't work
what does it say
.find(role => role.name === "name") remember
rip
.help
yes
if(!rMember.roles.has(gRole.id)) return message.reply("They don't have that role!");
``` it always reply saying `They don't have that role!`
same with addrole but it replys They already have that role!
By defining it
okay
is messageArray defined
i succes
if(!rMember.roles.has(gRole.id)) return message.reply("They don't have that role!");
it always reply saying They don't have that role!
same with addrole but it replys They already have that role!
at emitOne (events.js:121:20)
at Client.emit (events.js:211:7)
at MessageCreateHandler.handle (C:\Users\charl\Desktop\BOTD\node_modules\discord.js\src\client\websocket\packets\handlers\MessageCreate.js:9:34)
at WebSocketPacketManager.handle (C:\Users\charl\Desktop\BOTD\node_modules\discord.js\src\client\websocket\packets\WebSocketPacketManager.js:103:65)
at WebSocketConnection.onPacket (C:\Users\charl\Desktop\BOTD\node_modules\discord.js\src\client\websocket\WebSocketConnection.js:333:35)
at WebSocketConnection.onMessage (C:\Users\charl\Desktop\BOTD\node_modules\discord.js\src\client\websocket\WebSocketConnection.js:296:17)
at WebSocket.onMessage (C:\Users\charl\Desktop\BOTD\node_modules\ws\lib\event-target.js:120:16)
at emitOne (events.js:116:13)
at WebSocket.emit (events.js:211:7)```
I have no idea what the error is...
^
Well yeah...
const spammers = new Enmap();
I just have no idea why it isnt working...............
It shouldnt give me an error...
const enmap = require('enmap')
const spammers = new Enmap();
Should I move my const things to the top of my index?
the require definitely yes
the spammers dont need to be const
actually they cant be const
because const can only be defined once, and on message is a loop that fires every time you get a message
so it would be trying to re-define const all the time
^
ReferenceError: Enmap is not defined
at Client.bot.on.msg (C:\Users\charl\Desktop\BOTD\index.js:27:20)
at emitOne (events.js:121:20)
at Client.emit (events.js:211:7)
at MessageCreateHandler.handle (C:\Users\charl\Desktop\BOTD\node_modules\discord.js\src\client\websocket\packets\handlers\MessageCreate.js:9:34)
at WebSocketPacketManager.handle (C:\Users\charl\Desktop\BOTD\node_modules\discord.js\src\client\websocket\packets\WebSocketPacketManager.js:103:65)
at WebSocketConnection.onPacket (C:\Users\charl\Desktop\BOTD\node_modules\discord.js\src\client\websocket\WebSocketConnection.js:333:35)
at WebSocketConnection.onMessage (C:\Users\charl\Desktop\BOTD\node_modules\discord.js\src\client\websocket\WebSocketConnection.js:296:17)
at WebSocket.onMessage (C:\Users\charl\Desktop\BOTD\node_modules\ws\lib\event-target.js:120:16)
at emitOne (events.js:116:13)
at WebSocket.emit (events.js:211:7)```
True,
so should I use let?
yes
For both statements?
im checking the enmap npm
// Initialize an instance of Enmap
const myCollection = new Enmap();
// Adding data is simply a `set` command:
myCollection.set("myKey", "a value");
// Getting a value is done by key
let result = myCollection.get("myKey");```
both consts should be outside of the loop
you dont want to re-initialize the enmap on every message
^
ReferenceError: Enmap is not defined
at Object.<anonymous> (C:\Users\charl\Desktop\BOTD\index.js:16:16)
at Module._compile (module.js:643:30)
at Object.Module._extensions..js (module.js:654:10)
at Module.load (module.js:556:32)
at tryModuleLoad (module.js:499:12)
at Function.Module._load (module.js:491:3)
at Function.Module.runMain (module.js:684:10)
at startup (bootstrap_node.js:187:16)
at bootstrap_node.js:608:3```
Im so confused......
Wait hold on
you named the variable in lower case
Ik
anyways you should probably do ```
const Enmap = require("enmap");
const myCollection = new Enmap();
bot.on('message')```
and then work on the collection when you receive messages
Alright, so it logs my spam
Hold on
[EternityModeration//Spam Handler]: Timestamp: "Fri Jun 15 2018 08:31:02 GMT-0500 (Central Daylight Time)"
[EternityModeration//Spam Handler]: The "@" text/symbol was sent in rapid succession by (@dusky helm) in "EternityModeration Support & Testing".
[EternityModeration//Spam Handler]: The "@" text/symbol was sent in rapid succession by (@pseudo stump) in "EternityModeration Support & Testing".
[EternityModeration//Spam Handler]: Harmless (user) error detected, extensive report suppressed. The "@" text/symbol was sent by (@pseudo stump) in "EternityModeration Support & Testing".
[EternityModeration//Spam Handler]: Offendor ID: "448629905731747842"
[EternityModeration//Spam Handler]: Offendor Name: "LoreiusIuvenlis"
[EternityModeration//Spam Handler]: Offended Guild: "EternityModeration Support & Testing"
[EternityModeration//Spam Handler]: Message ID: "457175209561030662"
[EternityModeration//Spam Handler]: Timestamp: "Fri Jun 15 2018 08:31:03 GMT-0500 (Central Daylight Time)"
[EternityModeration//Spam Handler]: The "@" text/symbol was sent in rapid succession by (@pseudo stump) in "EternityModeration Support & Testing".
(node:17004) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 message listeners added. Use emitter.setMaxListeners() to increase limit```
So where should I increase listeners?
idk, are you adding event listeners on every spam log?
an event listener is when you're waiting for something to happen, like the .on('message'), you're waiting for the 'message' event to happen.
if you have too any pieces of code all waiting for something to happen, it shows this warning
but its just a warning, it should not stop your code from running
your code is probably looping somewhere
bot.on("message", async message => {
bot.on("message", msg => {
if (msg.content.includes('@') && !spammers.keyArray().includes(msg.author.id)) spammers.set(msg.author.id, 1);
if (msg.content.includes(`@`) && spammers.keyArray().includes(msg.author.id)) spammers.set(msg.author.id, spammers.get(msg.author.id)+1);
if (spammers.get(msg.author.id) > 5){
spammers.set(msg.author.id, spammers.get(msg.author.id)-5);
console.log(`[${name}//Spam Handler]: The "@" text/symbol was sent in rapid succession by (<@${message.author.id}>) in "${message.guild.name}".`);
message.channel.send("**Alert:** *Mass mentions are generally frowned upon. Please use them sparingly.*").then(msg => msg.delete(2000));
}});
if (message.content.includes ("@")){
console.log(`[${name}//Spam Handler]: Harmless (user) error detected, extensive report suppressed. The "@" text/symbol was sent by (<@${message.author.id}>) in "${message.guild.name}".`);
console.log(`[${name}//Spam Handler]: Offendor ID: "${message.author.id}"`);
console.log(`[${name}//Spam Handler]: Offendor Name: "${message.author.username}"`);
console.log(`[${name}//Spam Handler]: Offended Guild: "${message.guild.name}"`);
console.log(`[${name}//Spam Handler]: Message ID: "${message.id}"`);
console.log(`[${name}//Spam Handler]: Timestamp: "${message.createdAt}"`);
}});```
O
I have bot.on
twitce...
bingo
twice*
thats what's adding an event listener to every message
C:\Users\charl\Desktop\BOTD>node .
C:\Users\charl\Desktop\BOTD\index.js:39
if (message.content.includes ("@")){
^
ReferenceError: message is not defined
at Object.<anonymous> (C:\Users\charl\Desktop\BOTD\index.js:39:3)
at Module._compile (module.js:643:30)
at Object.Module._extensions..js (module.js:654:10)
at Module.load (module.js:556:32)
at tryModuleLoad (module.js:499:12)
at Function.Module._load (module.js:491:3)
at Function.Module.runMain (module.js:684:10)
at startup (bootstrap_node.js:187:16)
at bootstrap_node.js:608:3
Now I get the error...
bot.on("message", msg => {
you're catching the message event, and pass it on as a msg variable
so you have to work on msg, not message
or change the msg to message
^
ReferenceError: message is not defined
at Object.<anonymous> (C:\Users\charl\Desktop\BOTD\index.js:39:3)
at Module._compile (module.js:643:30)
at Object.Module._extensions..js (module.js:654:10)
at Module.load (module.js:556:32)
at tryModuleLoad (module.js:499:12)
at Function.Module._load (module.js:491:3)
at Function.Module.runMain (module.js:684:10)
at startup (bootstrap_node.js:187:16)
at bootstrap_node.js:608:3```
Still get that
its still undefined
bot.on("message", msg => {
bot.on("message", msg => {
^
yes
^
ReferenceError: message is not defined
at Object.<anonymous> (C:\Users\charl\Desktop\BOTD\index.js:39:3)
at Module._compile (module.js:643:30)
at Object.Module._extensions..js (module.js:654:10)
at Module.load (module.js:556:32)
at tryModuleLoad (module.js:499:12)
at Function.Module._load (module.js:491:3)
at Function.Module.runMain (module.js:684:10)
at startup (bootstrap_node.js:187:16)
at bootstrap_node.js:608:3```
Still an error
bot.on("message", message => {
if (msg.content.includes('@') && !spammers.keyArray().includes(msg.author.id)) spammers.set(msg.author.id, 1);
if (msg.content.includes(`@`) && spammers.keyArray().includes(msg.author.id)) spammers.set(msg.author.id, spammers.get(msg.author.id)+1);
if (spammers.get(msg.author.id) > 5){
spammers.set(msg.author.id, spammers.get(msg.author.id)-5);
console.log(`[${name}//Spam Handler]: The "@" text/symbol was sent in rapid succession by (<@${message.author.id}>) in "${message.guild.name}".`);
message.channel.send("**Alert:** *Mass mentions are generally frowned upon. Please use them sparingly.*").then(msg => msg.delete(2000));
}});
if (message.content.includes ("@")){
console.log(`[${name}//Spam Handler]: Harmless (user) error detected, extensive report suppressed. The "@" text/symbol was sent by (<@${message.author.id}>) in "${message.guild.name}".`);
console.log(`[${name}//Spam Handler]: Offendor ID: "${message.author.id}"`);
console.log(`[${name}//Spam Handler]: Offendor Name: "${message.author.username}"`);
console.log(`[${name}//Spam Handler]: Offended Guild: "${message.guild.name}"`);
console.log(`[${name}//Spam Handler]: Message ID: "${message.id}"`);
console.log(`[${name}//Spam Handler]: Timestamp: "${message.createdAt}"`);
};```
you have 'msg' mixed in with 'message' everywhere
So change every msg to message?
^
ReferenceError: message is not defined
at Object.<anonymous> (C:\Users\charl\Desktop\BOTD\index.js:39:5)
at Module._compile (module.js:643:30)
at Object.Module._extensions..js (module.js:654:10)
at Module.load (module.js:556:32)
at tryModuleLoad (module.js:499:12)
at Function.Module._load (module.js:491:3)
at Function.Module.runMain (module.js:684:10)
at startup (bootstrap_node.js:187:16)
at bootstrap_node.js:608:3```
if (message.content.includes('@') && !spammers.keyArray().includes(message.author.id)) spammers.set(message.author.id, 1);
if (message.content.includes(`@`) && spammers.keyArray().includes(message.author.id)) spammers.set(message.author.id, spammers.get(message.author.id)+1);
if (spammers.get(message.author.id) > 5){
spammers.set(message.author.id, spammers.get(message.author.id)-5);
console.log(`[${name}//Spam Handler]: The "@" text/symbol was sent in rapid succession by (<@${message.author.id}>) in "${message.guild.name}".`);
message.channel.send("**Alert:** *Mass mentions are generally frowned upon. Please use them sparingly.*").then(message => message.delete(2000));
}});
if (message.content.includes ("@")){
console.log(`[${name}//Spam Handler]: Harmless (user) error detected, extensive report suppressed. The "@" text/symbol was sent by (<@${message.author.id}>) in "${message.guild.name}".`);
console.log(`[${name}//Spam Handler]: Offendor ID: "${message.author.id}"`);
console.log(`[${name}//Spam Handler]: Offendor Name: "${message.author.username}"`);
console.log(`[${name}//Spam Handler]: Offended Guild: "${message.guild.name}"`);
console.log(`[${name}//Spam Handler]: Message ID: "${message.id}"`);
console.log(`[${name}//Spam Handler]: Timestamp: "${message.createdAt}"`);
};```
I have no idea what the issue is
this ``` if (message.content.includes ("@")){
console.log([${name}//Spam Handler]: Harmless (user) error detected, extensive report suppressed. The "@" text/symbol was sent by (<@${message.author.id}>) in "${message.guild.name}".);
console.log([${name}//Spam Handler]: Offendor ID: "${message.author.id}");
console.log([${name}//Spam Handler]: Offendor Name: "${message.author.username}");
console.log([${name}//Spam Handler]: Offended Guild: "${message.guild.name}");
console.log([${name}//Spam Handler]: Message ID: "${message.id}");
console.log([${name}//Spam Handler]: Timestamp: "${message.createdAt}");
};
is outside
if (message.content.includes('@') && !spammers.keyArray().includes(message.author.id)) spammers.set(message.author.id, 1);
if (message.content.includes(`@`) && spammers.keyArray().includes(message.author.id)) spammers.set(message.author.id, spammers.get(message.author.id)+1);
if (spammers.get(message.author.id) > 5){
spammers.set(message.author.id, spammers.get(message.author.id)-5);
console.log(`[${name}//Spam Handler]: The "@" text/symbol was sent in rapid succession by (<@${message.author.id}>) in "${message.guild.name}".`);
message.channel.send("**Alert:** *Mass mentions are generally frowned upon. Please use them sparingly.*").then(message => message.delete(2000));
}});```
this ^
hold on
bot.on("message", message => {
if (message.content.includes ("@")){
console.log(`[${name}//Spam Handler]: Harmless (user) error detected, extensive report suppressed. The "@" text/symbol was sent by (<@${message.author.id}>) in "${message.guild.name}".`);
console.log(`[${name}//Spam Handler]: Offendor ID: "${message.author.id}"`);
console.log(`[${name}//Spam Handler]: Offendor Name: "${message.author.username}"`);
console.log(`[${name}//Spam Handler]: Offended Guild: "${message.guild.name}"`);
console.log(`[${name}//Spam Handler]: Message ID: "${message.id}"`);
console.log(`[${name}//Spam Handler]: Timestamp: "${message.createdAt}"`);
};
if (message.content.includes('@') && !spammers.keyArray().includes(message.author.id)) spammers.set(message.author.id, 1);
if (message.content.includes(`@`) && spammers.keyArray().includes(message.author.id)) spammers.set(message.author.id, spammers.get(message.author.id)+1);
if (spammers.get(message.author.id) > 5){
spammers.set(message.author.id, spammers.get(message.author.id)-5);
console.log(`[${name}//Spam Handler]: The "@" text/symbol was sent in rapid succession by (<@${message.author.id}>) in "${message.guild.name}".`);
message.channel.send("**Alert:** *Mass mentions are generally frowned upon. Please use them sparingly.*").then(message => message.delete(2000));
}});```
test now
alright
Thanks so much man
π
π
Just out of curiosity, what's the general consensus on running a bot as root?
(Of course, this doesn't mean I do that)
Yeah I'd like to know too
I know it's obviously not a smart thing to do, but is there anyone that actually has a reason as to why you shouldn't
or anyone that runs it as root and thinks it's a benefit for whatever reason?
@rigid pulsar I got a VPS and couldn't be bothered learning how to setup a user, so I run my bot as root. There are obviously the security risks, the only thing I've noticed is that you can run things like apt get for packages like canvas and npm -g flags easier, thats all from me .-.
The main reason I'm concerned with running a bot as root is the attack vector, I'm used to always programming as if the user is an attacker
and if the bot is running as root, getting ACE is already enough to basically have control over the VPS
How would I gather information from a message
Such as message content
and the writter
in a server
discord.js?
Yep
message content? Have you tried reading the docs? 
Yes ma'am
If you have the Message object,
});
you'd use message.content to get the message contents
and message.author to get a User object
and if you need a GuildMember, you'd use message.member
messager.set(message.content);
console.log(`[${name}//Log Handler]: ${message.content}`);
});
So kinda like that?
Wait,,
I need to define messager
hold on
@sick cloud Setting up a user is pretty easy hahaha
Literally
useradd -m name
passwd name
And then you can log into the user with su name
I'm still too lazy to do so
oof dont think this is correct
I think your command is annonce
yep normal
sendEmbed is depreciated also.
what I must do ?
change to send({ embed: embed });
okay
also why do you have a message event for every command π
I'm goinf to change it I start JS 1 week ago x)
@sick cloud today I learned a lot of people are hahaha
So you're not the only one :P
π
setTimeout(spammers, 300000);
function spammers() {
console.log(`[${name}//Spam Handler]: Removing points from spammer.`)
}}```
Will that infinite loop?
there's nothing that would create an infinite loop there
Yeah.
it's just going to log that into the console after 300000 ms
I'm not a fan of how you use the same variable name for the function and spammers object
how do I get my emoji to show properly? π
.setAuthor(`${msg.author.username} `, msg.author.displayAvatarURL)
@pliant gorge
@gilded plank
@abstract aspen
yeah I placed them in that title because of that I think
you could still use \β lul
yeah it's likely because the author part doesn't support discord's markdown while the title, description and other parts do
yeah it does
Titles, footers and field names don't support emotes, I believe.
titles do support emoji
Ah, whoops
I think fields do as well
Let me check.
that's right
π
also how do you make an exec command again? i know you need some child process thing, but i can't remember ;-;
What language?
What's the latest npm version on Linux?
@tall falcon
You can upgrade to the latest version of npm using:
npm install -g npm@latest
@earnest phoenix I did that and I ran sudo apt-get install -y nodejs everything is fine now with async
So I'm trying to make my bot respond to a mention but it never works can someone tell me why? https://hastebin.com/davawaqanu.js
Error?
Does anyone know if bots can use rich presence?
Yeah
I did find this tho http://discordpy.readthedocs.io/en/rewrite/api.html#discord.Activity
I can't find anything here that would say it's not allowed to be used by bots
Hi I'm trying to fix my muted command. I'm trying to deny permission to send messages in every channel in that guild. I have this code right now js message.guild.channels.overwritePermissions({overwrites: [{ id: mutedRole.id, denied: ['SEND_MESSAGES'] }]});
discord.js
But I have something like a for loop
forgot to mention lib
what do you put in Brief description
for channel in message.guild.channels
@earnest phoenix Something about your bot, like what it does?
ooo
Music, Role Management, logging, Moderation, Customizable Behavior and leveling
thats what i put?
If you want?
whats Unable to fetch application
Check if you mistyped your ID
whats Bot awaiting approval!
yo
anyone
who uses discord.py
how do you get a progress bar
and like a layout
like IDLE RPG
or
MEE6 ?
maths
should i use a Set() to add users to a "dailyPool" or use a database 
db
how can i make the server count in js ?
dblapi.js - An official module for interacting with the discordbots.org API
Oops! Error: 403 This host is not accessible.
heh
ohh
this is #topgg-api stuff 
u are
question is there a way to calculate 1 var before another var?
discord.js by the way
what do you mean?
I am trying to calculate IVs before stats and I have put them all in a variable as far as the formulas go.. I was wondering how to calculate the IV variable before the STAT variable if there is any way
are you using async?
can a admin approval my bot
i mean, if you're doing sequential coding, just switch the order the vars are calculated
but if you're doing async, and need to wait for the calculation to finish, then its another story
I have tried switching the order and that didnt work either
show the code
ill have to hastbine
some of the code is relevant can i dm though please
i rather do it here so others can see and input their thoughts
id rather not post it here
you dont need to post everything
var ivatt = Math.floor(((attack/1 - 5) * 100) / pokelvl - 2 * inforow.att - 0/4);
var ivdef = Math.floor(((defense/1 - 5) * 100) / pokelvl - 2 * inforow.def - 0/4);
var ivspatt = Math.floor(((spattack/1.1 - 5) * 100) / pokelvl - 2 * inforow.spatt - 0/4);
var ivspdef = Math.floor(((spdefense/0.9 - 5) * 100) / pokelvl - 2 * inforow.spdef - 0/4);
var ivspeed = Math.floor(((speed/1 - 5) * 100) / pokelvl - 2 * inforow.speed - 0/4);
var attack = Math.floor((((2 * inforow.att + ivatt + 0/4) * pokelvl) / 100 + 5) * 1);
var defense = Math.floor((((2 * inforow.def + ivdef + 0/4) * pokelvl) / 100 + 5) * 1);
var spattack = Math.floor((((2 * inforow.spatt + ivspatt + 0/4) * pokelvl) / 100 + 5) * 1.1);
var spdefense = Math.floor((((2 * inforow.spdef + ivspdef + 0/4) * pokelvl) / 100 + 5) * 0.9);
var speed = Math.floor((((2 * inforow.speed + ivspeed + 0/4) * pokelvl) / 100 + 5) * 1);
var hp = Math.floor(((2 * inforow.hp + ivhp + (0/4 + 100)) * pokelvl) / 100 + pokelvl + 10);```
This is the part I am having trouble with
looks fine, what isnt working?
its posting NaN
is ivatt showing up as undefined?
oh
then there's something wrong with the math
check if there's strings instead of integers in the variable
it happened when i put the iv variables in the equation for the stats
for example, pokelvl or inforow.hp could be entering the math as strings instead
can you console log all the iv variables?
maybe one of them is not correct
wait
did you log them
no
you have the stats
inside the iv calculations
so you need to calculate the stats first
either way it goes it doesnt work
yeah because both of them depend on the other
ivspeed needs speed, and speed needs ivspeed
it started when the ivatt etc was inserted into the stats equations
you have to remove one of the dependencies
hmm maybe i need to do some more reading then Im just going by what bulbapedia gave me
arent ivs calculated from base stats?
if that's pokemon, no
yes
then the iv calculation is wrong, it shouldnt have real stats in their calculation
because real stats are not calculated yet
IV = ((Stat/Nature - 5) * 100) / Level - 2*Base - EV/4
that is the IV math
it asks for the stat
that stat needs to be defined somewhere
but the stat isnt really defined without the iv and iv isnt defined until it has a stat correct?
thats whats in your code, but it doesnt look correct
hmm ok i will do some more reading then... thanks for your help guys
hmm i think your code for the IV is to retrieve the IV value from the stats, not to create an IV value
On your bots page, can you set custom values for these?
pretty sure you can access meta tags with js
js isn't allowed on non-certified bots .-.
then rip
but it would be kinda useless, since crawlers get that info from page source, before js is loaded
yea
Anothber question, are there a way to get grids on your bots page? Like just a 50/50 design for the description box.
pretty sure you can
Wonder how π
have you tried using tables or inline-block divs?
Uh, I don't even know how to use either ;-;
.>
<div style="display: inline-block; width: 49%">content here</div>```
49% for safety, you can try with 50%
ook
if they are still not side-by-side, lower the width, the box might have padding
π
db suggestions?
depends on what you need
Mongo is great for documents and keys
If not mysql if you prefer SQL
yeah for portability you can use sqlite but it won't be good when the bot grows because it is file based
Any idea why I can't access a variable from a other file?
http://mudda-fuckin-slore.club/porn/Blowfish382330136.png
http://mudda-fuckin-slore.club/porn/Alpinegoat4804059Gf.png
http://mudda-fuckin-slore.club/porn/Galapagoshawk5511109rb.png
http://mudda-fuckin-slore.club/porn/Redstart3128557n4.png
One thing to note everything works how it should when I just use the local variable.
var servers = {};
so ytdl gives some readable stream
can you make that into a messageattachment?
(discord.js)
I have a question for discord.py
the docs say that client.on_message_edit can be triggered when a message is pinned or unpinned, but it only triggers for me if the content is changed
Async or rewrite?
async
this is what I have
it prints "edit" only when content is changed
so my question is, is there something I am doing wrong or is this a problem with discord.py?
Well, async version of discord.py is pretty outdated actually even tho it is "latest"
I strongly recommend switching to the rewrite version of discord.py
Other than that, it does seem like a d.py issue
how much different is the rewrite version?
Honestly a fuckton
Take a good look through this http://discordpy.readthedocs.io/en/rewrite/migrating.html
It's up to you to decide if you find it interesting but discord.py rewrite is a lot improved, syntax is a lot cleaner and everything is just a lot nicer and more things are supported, like nsfw channel checking etc.
alright, thanks for the help
I've been stuck on this forever thinking I was doing something wrong
Even if your pin check was incorrect (which it's not) print('edit') should still be called when a message is pinned
yeah, that's why I put it there and decided to come here with my question
with discord.py rewrite, there is a raw_message_edit event that gives you the payload of the websocket
You could listen for this event and print the output to console to see what is coming directly from discord
ok. I guess I will be spending some time looking into that
There is a converter utility, I've used it but still be prepared to look yourself
so how do I install the rewrite version since it has the same name as the async on pip?
py -m pip install -U git+https://github.com/Rapptz/discord.py@rewrite
That should work on Windows
Ok. Thanks again
btw, latest rewrite docs @ http://rapptz.github.io/discord.py/ @mental trellis, pip install is wrong tho 
Whats this issue when making an attachment in discord.js?
I hit it on some video requests, and not on others.
github is not ignoring file
http://you.can-fuck.me/ccXCbuT1m11AXDlP.png
http://you.can-fuck.me/PQhT1sCpekVivaVJ.png
have you thought about only adding it once 
yes donethat
then i git angry and spammed http://you.can-fuck.me/tMd4SG8IfcvDtezv.png
i has fixed it π
trying to make music bot and used const queue = require Map(); but i get error "Map" is not defined how can i define pls help
you can only use require on files/node modules
anyone know how to do a translate system on discord.py async
t
@gritty trellis an api 
How do I add a discord bot to the rank system
res
yes
how can i add level system to discord bot
how can i add level system to discord bot
how can i add level system to discord bot
Please stop spamming or I will have to mute you
don't spam. warning: 1
Also, if you want help provide as much information about the case and don't expect to just get the code
And I'm sure there are many tutorials out there to teach you how to do it
how would i add a countdown to a cooldown
yorks tut :^)
or daily command
Hello
store last command time
then if that timestamp is 24 hours greater than the current timestamp
hmm
let them use








