#development

1 messages · Page 1165 of 1

karmic compass
#

does anyone know how i can fetch api similar to node-fetch in java?

if i wanted to grab "id" from a JSON website, how would this be done

earnest phoenix
#

can't you just use the built in HttpClient?

karmic compass
#

i'm super new to java so i don't actually know what that means

#

i just wanted to see if it was a thing i could do as easily as nodefetch

fluid basin
#

google java http json request example

#

afaik HttpUrlConnection should be the easiest to use

karmic compass
#

i think for now i'll stick to other things lol

#

wait nevermind i managed to get it kinda working

#

if needed i can send the ss of what it looks like

#

wait

#

nevermind i don't know what to do man

slate oyster
#

I'm probably just gonna drop this table and make any feature that uses it opt-in

earnest phoenix
#

don't insert until you have an actual need to

#

i did a big oopsie of having anyone who uses a command inserted into a database

obsidian wagon
#

hey guys if anyone could help me i want to get news feeds into a channel in my discord like benzinga news cnn etc is there a way to do this?

earnest phoenix
#

causing a growth of a bunch of unnecessary data

#

not the place to ask the question, anyways, make your server a community server in the server settings @obsidian wagon

fluid basin
#

check out APIs for news feeds, and make a bot to subscribe and track them

earnest phoenix
#

oh nvm

#

i just got

#

what they were trying to say

fluid basin
#

XD

earnest phoenix
#

look if zapier or IFTTT have something like that (or support for RSS feeds), if not you'll have to make it yourself

slate oyster
#

Yea
I actually did worse than insert every time they run a command
I'm storing data for every member who sends a message

#

It's for two features that are hardly used, so I'm just going to make them guild-based opt-in

faint prism
#

I have an integer for a user increment on a message

opal plank
#

im edgier, i store the message without content

#

9TB of space, yank it into the bd

#

👀

#

i saw that

slate oyster
#

I have multiple integers increment per message
And other data stored upon the first time sending a message, too

#

This is basically what each of the 7000+ documents in the table look like
Most likely, I'll just drop the table, than my DB will only be about 400kb or so

opal plank
#

7k?

#

cute

fluid basin
#

is that all user data?

opal plank
#

was about to say taht too

slate oyster
#

Only member data
There's another table for user data that is not bound to guilds

#

But it's alot more sane

#

At only 6 documents

fluid basin
#

damn

#

is member data not opt in?

midnight blaze
#

hmm, my bot can only join in a channel per one guild 👀 Can I post my music bot script in here? I dont see why this happens

slate oyster
#

Nope
After I drop the table, I plan to make it opt-in per guild
As this is ridiculous

fluid basin
#

hmm, my bot can only join in a channel per one guild 👀 Can I post my music bot script in here? I dont see why this happens
@midnight blaze like a user, you can only be in 1 channel at a time

slate oyster
#

@midnight blaze Discord limitation

midnight blaze
#

You misunderstood me

#

It can only join one channel in all guilds

fluid basin
#

oh?

slate oyster
#

Oh, weird

fluid basin
#

sure, let us take a look at your code

#

(do upload it on hastebin if its too long)

opal plank
#

thats just one table

fluid basin
#

damn

slate oyster
#

Oh wow
I hope your privacy policy mentions that

opal plank
#

it does

midnight blaze
#
var queue = []

async function startPlaying(voiceChannel){
  var connection = await voiceChannel.join()
  var info = await ytdl.getInfo(queue[0])

  connection.play(ytdl(info.url))
  .on('error', (err)=>{
    console.log(`REEEEEEEE An error occured.`)
    console.error(err)
  })
  .on('finish', async ()=>{
    queue.shift()
    if(queue[0] != undefined){
      startPlaying()
    }else{
      await voiceChannel.leave()
    }
  })
}

client.on('ready', ()=>{
  console.log(`Bot is ready on ${client.user.tag}!`)
})

client.on('debug' ,(debug)=>{
  console.log(debug)
})

client.on('message', async (message)=>{
  var prefix = 'kk'

  if(!message.content.startsWith(prefix)){
    return
  }

  var command = message.content.split(' ')[0].replace(prefix, '')

  if(command == 'play'){
    if(!message.member.voice.channel){
      message.channel.send(`REEEEEEEE join a voice channel`)
      return
    }
    var link = message.content.split(' ')[1]

    try{
      linkURL = new URL(link)
    }
    catch(err){
      message.channel.send(`REEEEEEEE enter a valid youtube link`)
      link = undefined
    }

    if(link == undefined){
      return
    }
    queue.push(link)

    if(queue[1] == undefined){
      startPlaying(message.member.voice.channel)
    }
    message.channel.send(`Starting to play your song`)
  }
})
opal plank
#

also encryped, so tos compliant

#

i dont store content

slate oyster
#

Oh, ok

opal plank
#

only authorid/channelid/guildid

#

im not interested in content of what people say

#

only stats

slate oyster
#

lol

opal plank
#

dataphile

fluid basin
#

oh, @midnight blaze, use a separate queue array for each guild, and play the song in the respective channels

#

you can use a map object, it allows for key-value data such as guild-queue

slate oyster
#

Anyways
I'm going to work on my bot rewrite for the next 15 minutes
It would be a breeze, except I'm trying to manage 2 chat clients at once
So I have to write interfaces and implementations, instead of using the raw libraries

midnight blaze
#

I see, ok , thanks

opal plank
#

wusup?

slate oyster
#

I've written an entire source folder dedicated to interfaces (and a few exceptions), oof

opal plank
#

oooh neatly organized

#

lemme post code porn too

fluid basin
#

wew those setintervals LOL

slate oyster
#

Nice dashboard
I was thinking of writing my own dash, but it wouldn't post memory usage or anything

opal plank
#

i could merge two of them

#

but sometimes i need to switch the values

#

still playing with how often i should be logging data to my database

#

per minute? per 5m? 10? 20?

slate oyster
#

I'm working on V4 rn
Right now I'm running V3 in deployment
V4 will be amazing (:

opal plank
#

i gave up on putting versions on mine

fluid basin
#

what kind of data are you storing? o.o

opal plank
#

all kinds of data

fluid basin
#

damn

opal plank
#

emojis, logs, profilers, events, voice activity, message activity, and a lot more

fluid basin
#

oh

opal plank
#

24MB here

fluid basin
#

if you do cache the info, maybe you can use a threshold-based timer?

#

like hitThreshold || maxTime

opal plank
#

im using set interval for that

fluid basin
#

then you can relax the maxTimer

#

hm ok

opal plank
#

im passing variables on that, once the code runs, it sends that cache and resets it

#

basically that

earnest phoenix
#

I'm kinda new to Twitter too so I'm not really sure how it works

opal plank
#

cache this until setInterval() runs

fluid basin
#

yeah its working @earnest phoenix

slate oyster
#

I don't have actual "versions"
But
V1) A terrible bot, completely scrapped
V2) Throw away V1, switching to async .subscribe
V3) V2, but refactored to use .flatMap instead of .subscribe
V4) In progress, rewrite from scratch. Abstracts the chat library away from the code, also improves code writability in the tiniest bit. Another goal is to work on a singular feature at a time, so I am forced to make everything work perfect before moving onto the next feature.

earnest phoenix
#

Ahh okay, tysvm

opal plank
#

let a = 0;
setInteval(() => {
database.send(a);
a = 0;
} ,1000);
client.on('event' () => {a++};

@fluid basin to put it very basic, thats what im doing

#

of course, with maps and more complicated stuff

fluid basin
#

yeah I'm suggesting something like

opal plank
#

every sec, it'd send whatever a is

fluid basin
#
let a = 0;
setInterval(() => {
  if ( a < threshold) return;
  database.send(a);
  a = 0;
}, 5000);
opal plank
#

could be doable too

#

could also add that if on the event

#

if ( a > threshold) database.send(a);

fluid basin
#

yeah well you have to reset a too

slate oyster
#

Goodnight, I didn't really work on my V4 those 15 minutes...

midnight blaze
#

@fluid basin I tried with MAP, I am just new with it, I would like to know how to use it. I worked with db before, but dunno, I feel like I am close to understand it, can you check the code again? It seems like something is missing

fluid basin
midnight blaze
#

I am reading that

#

atm

dire obsidian
#

ah shit, here we go again...

midnight blaze
#

and I follwed the guide and it works fine, the only thing that is not working rn is that the array in the map are always empty

#

I dont need the answer, just let me know if I am on the right track. 🙏 ^^

fluid basin
#

Why would it be always empty? Are you accessing the map correctly?

#

Use the guild ID as the key, instead of the guild itself

midnight blaze
#

I use the guild ID as the key

#

I think I do access it correctly, I do console log it and it seems fine

#

the push function works also, but it still is empty, no errors

fluid basin
#

use array mutators such as push and pop

midnight blaze
#

read my message

#

I use push

fluid basin
#

still empty?

midnight blaze
#

yep

fluid basin
#

could I take a look at your code again

midnight blaze
#

that would be amazing

fluid basin
#

ah theres the problem at line 32

#

use map mutators methods, not array accessors

#

the example on the mdn page is marked red and means its a bad example (what you should not do)

#

follow the green one or scroll down for more examples

midnight blaze
#

ok

#

thank you again

slate oyster
#

@opal plank My actual code is not as beautiful as my organization though...

fluid basin
#

wew lambdas

opal plank
#

looks decent

#

its code

#

need some code porn though

slate oyster
#

Look at that nesting level

opal plank
#

oh, you think THATS bad?

#

hold your horses

slate oyster
#

Why? You got a screenshot?

opal plank
#

you may starboard the fuck out of this if you wish

slate oyster
#

Oh my god, wow

opal plank
#

worst part, it worked

earnest phoenix
#

Nice stairscase

opal plank
#

thats the defintion of 'idk how to do it in a good way, but i can make it work'

#

that was me a couple days into Js

slate oyster
#

What are you nesting there for?
For me, it's because I'd loose access to the variables if I didn't nest
But I've been told it's bad to use an AtomicReference to store variables

opal plank
#

i was chaining .then()'s

slate oyster
#

Ah, ok

opal plank
#

promise.Resolve.then(=>)

fluid basin
#

gosh, use await bloblul

opal plank
#

you assume i knew that 5 or 6 days into js learning

fluid basin
#

callbacks => callback hell,
promises => promise hell
thats why async was born

opal plank
#

well yeah, im well aware now, but abck then i didnt get to async yet

#

even i knew whatever the fuck i was doing, it was wrong

slate oyster
#

Ah, ok
I had forgotten about JS promises lol
I was initially thinking Reactor's .then
Which is similar, but different

sinful lotus
#

before making a bot you should make sure you know how to secure your bot token and any other credentials. @earnest phoenix

slate oyster
#

The Reactor equivalent of JS .then is .flatMap
Or .then, but only if you don't need the argument
Usually, flatMap saves you from this kind of nesting

opal plank
#

await is a blessing

earnest phoenix
#

before making a bot you should make sure you know how to secure your bot token and any other credentials. @earnest phoenix
@sinful lotus i did

blazing copper
#

k

earnest phoenix
#

i put it as env var in my site

#

my cloud u can say

sinful lotus
#

you can eval env var tho

#

if Im not mistaken

#

just dont put eval if you want lmao

earnest phoenix
#

oh

fluid basin
#

@opal plank except for the fact that sometimes UncaughtPromiseRejections are hard to track

opal plank
#

not if you smart enough

sinful lotus
#

or dont put eval on your "production" bot

opal plank
#

i can eval my token fi you wish

earnest phoenix
#

what is that thing

opal plank
#

look*

slate oyster
#

.flatMap is a blessing
Before I started using .flatMap, I had code like this:

#

Just for a ban command...

#

Good thing I started using .flatMap (:

#

Well, goodnight

opal plank
#

like i said, parse your output

#

otherwise its bad eval

lyric mountain
#

Ngl, for a second I though the code above was java

opal plank
#

everything is java if you squint hard enough

slate oyster
#

My code is Java (:

#

Ok, goodnight

lyric mountain
#

Gn

opal plank
pine aspen
#

Hey!

#

How'd I do a check for Mongoose.

fluid basin
#

check for mongoose?

#

as in?

pine aspen
#
const Users = require('../../models/users');
Users.find({ votes: >= 1 }).then(docs => {
docs
});
#

Like this

#

How can i check is votes is greater or equal to 1

fluid basin
#

there should be a count function or something

pine aspen
#

That's to get the list of all?

#

oh

#

wait nvm

#

No, that wont work.

fluid basin
#

so you want a list of users that is greater than 1 vote?

pine aspen
#

Yes.

fluid basin
#

sorry if I misunderstood your qn

#

ah ok

pine aspen
#

Sorry, I wasn't very clear.

midnight blaze
#

@fluid basin hey, thanks again for help

#

it worked xd

fluid basin
#

use query operators such as $gte or $gt

#

your welcome

#

e.g. query.find( { marks: { $gte: 89} } )

pine aspen
#

gte?

#

greater

#

or equal?

#

yep

fluid basin
#

gt is greater (>), gte is greater or equals to (>=)

pine aspen
#

OK thanks!

fluid basin
#

np

#

alternatively, you can use the query syntax:

query.find().where('votes').gte(1).exec();
pine aspen
#

MongoError: unknown operator: isArray

#

ah

#

I'll try that.

#

yeah that works.

#

Thanks!

dusky mason
#

@earnest phoenix do you need help getting the bot back?

earnest phoenix
#

nah

#

i need help in not getting hacked again

dusky mason
#

Did you regenerate the token?

#

Just don’t give out the token

#

That’s all

#

Don’t record, stream, or do anything that shows the token

#

If you stream yourself coding, put the token in a Json and load it

midnight blaze
#

be aware about github. Maybe put in .gitignore

dusky mason
#

He didn’t hack you, he just grabbed your token somewhere, regenerate it and ur fine

#

I keep my git on private

lyric mountain
#

i need help in not getting hacked again
@earnest phoenix try to "hack" it urself

#

The best way to fix code leaks is to try to self-sabotage

#

As a security layer, ask someone else to try to "hack" ur bot, then ask them how they achieved it

earnest phoenix
#

hacking doesn't exist in this context lol

#

there's nothing to hack

lyric mountain
#

Note the quotation marks

earnest phoenix
#

you either have the token or dont

#

yeah

#

ik

#

i get you i was trying to tell them that you cant hack a token

lyric mountain
#

I have like 2-3 people constantly trying to break my bot's money system (non intentional), thanks to them I fixed about 5-7 issues last couple weeks

earnest phoenix
#

tip, whenever you design something for public use think as your user with the most malicious intents to break it

#

hmm

#

best mindset to work with and write bug free code

fluid basin
#

tip, whenever you design something for public use think as your user with the most malicious intents to break it
too much design considerations

#

XD but its the truth

#

it works

earnest phoenix
#

the only way they can get access to the token is by hacking my cloud account

lyric mountain
#

TL;DR: be your own devil

earnest phoenix
#

and thats quite impossible

lyric mountain
#

What about that dude whom you share the cloud with?

earnest phoenix
#

good that this happened

lyric mountain
#

Is he/she trustworthy?

earnest phoenix
#

i will be careful from next time

#

What about that dude whom you share the cloud with?
@lyric mountain i didnt share with anyone

lyric mountain
#

Oh, I though you said u did

earnest phoenix
#

nah..

#

you leaked it somewhere if it was hijacked, the token can also be extracted from the process memory that's running the bot so you might want to check for malicious admin privileged programs

#

ohh

shy rose
#

process memory that's running the bot so you might want to check for malicious admin privileged programs
@earnest phoenix presumably if said admin has access to processes then they have access to the file system and can access you configs file unless your doing on boot hand in

delicate shore
#

how to do I configure shards?

shy rose
#

whats your lib?

delicate shore
#

discord js

#

wait

#

does that mean

#

some of my commands won't work?

#

@shy rose

shy rose
rancid bramble
#

when someone uses the kick command and even tho the bot couldn't kick the mentioned user, it still sends the member kicked message. How can I make it say that it couldn't kick the mentioned member?

fluid basin
#

shortest way to get bot ws latency using eris? (1 shard only)

earnest phoenix
#

Handle exceptions properly @rancid bramble
And don't send the message BEFORE attempting the kick, in the code

supple quarry
#

Anybody know how to get a custom status on your bot that shows the number of servers it is on?

#

I've been trying to figure it out and can't seem to find anything about it anywhere

opal plank
#

lib?

#

@supple quarry

supple quarry
#

Wdym lib

sonic lodge
#

what library

supple quarry
#

discord.js

#

Sry my bad lmao

sonic lodge
#

client.user.setActivity('in X servers');

fluid basin
#

shortest way to get bot ws latency using eris? (1 shard only)
this anyone?

supple quarry
#

client.user.setActivity('in X servers');
@sonic lodge I know how to set a bot activity, but how do i make it automatically change the number of servers everytime its added

thick gull
#

on a guildCreate event

sonic lodge
#

watch for the guildCreate event

supple quarry
#

ok

sonic lodge
#

when that happens, just grab your bot's guild count and set the activity to that

delicate shore
#

hey

#

do i get guild object in guildDelete

#

event also ?

sonic lodge
#

yes

delicate shore
#

if yes can i use guild.owner and dm him

#

when he removes me

#

i mean my bot

sonic lodge
#

well the bot has to share a server with that user to dm them

#

i don't know if you can do that before your bot is removed

thick gull
#

client.guilds.cache.get('supportserver').ban(guild.owner)

#

kek

earnest phoenix
#

Is it possible to change the encoding in json.sqlite?

#

Cuz i have lots of weird characters in there

delicate shore
#

Cuz i have lots of weird characters in there
@earnest phoenix
No lol

#

But u can download a databse reader

#

client.guilds.cache.get('supportserver').ban(guild.owner)
@thick gull
Lol it won't work
But maybe I can ban some people 😉

earnest phoenix
#

I have downloaded quick.db

delicate shore
#

No

#

Databse reader

#

Is different

earnest phoenix
#

How do i get that

#

like which one should i get

delicate shore
#

Or

earnest phoenix
#

Oh thank you

restive furnace
#

or use real one

#

like Database Reader SQLite

earnest phoenix
#

Oh

delicate shore
#

Yeh

#

This is good option tho

restive furnace
#

you cant convert back tho

#

if u want to make changes

earnest phoenix
fluid basin
#

Math.random is very biased

earnest phoenix
#

what should i use @fluid basin

sonic lodge
#

i think he was joking lol

earnest phoenix
#

k

restive furnace
#

who

#

he isnt joking

earnest phoenix
#

idk why isnt it randomizing

sonic lodge
#

is a new one chosen each time your bot restarts?

faint flax
#

YALL how do we get bots

earnest phoenix
#

is a new one chosen each time your bot restarts?
@sonic lodge yes

sonic lodge
#

then you're generating the random number only once

fluid basin
#

oh lol

#

put the let pick... after the command is ran

earnest phoenix
#

then you're generating the random number only once
@sonic lodge how to gen it each time the command works

sonic lodge
#

whenever you run the command, you need to generate a new one

earnest phoenix
#

yess

sonic lodge
#

where do you send the gif link

earnest phoenix
#

in a embed

faint flax
#

Anyone?

earnest phoenix
#

i will send the pic

faint flax
#

How can we add bots to group

earnest phoenix
restive furnace
faint flax
#

Ty

fluid basin
#

above const embed...

sonic lodge
#

set pick to a new gif link

earnest phoenix
#

i didnt get you

sonic lodge
#

move the line that sets pick to a new random gif link before the line that creates the embed

earnest phoenix
#

ok

opal plank
#

why you got multiple switches?

#

you're comparing the same thing

sonic lodge
#

i was wondering that too

#

condense it into one, or even better, use a command handler

earnest phoenix
#

ok

opal plank
#

switch(something) {
case 1 : //do a
break

case 2: //do b
break

case 3: //do c
break

}

#

@earnest phoenix

earnest phoenix
#

ok

#

move the line that sets pick to a new random gif link before the line that creates the embed
@sonic lodge but i have set it as set image

sonic lodge
#

i meant this

let pick = // random gif
const embed = new Discord.MessageEmbed()
                         .setImage(pick);```
earnest phoenix
#

ok

#

i should do it inside the switch ?? @sonic lodge

sonic lodge
#

yes?

earnest phoenix
#

ok

#

@sonic lodge it works thxx

sonic lodge
#

very good

worthy glacier
pale vessel
#

openUri() is not a promise

fluid basin
#

why

crystal bison
#

soo.,... i cant figure why its sending 2 messages at once??? its only ment to show once but for weird reason it shows 2 instances

polar temple
#

Hello could someone help me?

delicate shore
#

i wanna make a dashbord

#

for my discord bot

#

only nickname

#

and prefix

misty sigil
cinder sandal
#

how to make aliases for commands?

misty sigil
#

i wanna make a dashbord
@delicate shore I wouldn’t advise making one for just nick and prefix

delicate shore
#

O

#

but i have a free domain

#

tho

#

:_:

misty sigil
#

kinda a waste of time when you can just have a command to do that

#

I have a paid domain

delicate shore
#

i already have clareemey

cinder sandal
#

how to make the bot change his prefix?

delicate shore
#

I have a paid domain
@misty sigil me too

cinder sandal
#

w/ a command

delicate shore
#

how to make the bot change his prefix?
@cinder sandal database

misty sigil
#

how to make the bot change his prefix?
@cinder sandal dyatbase

polar temple
#

I started now with lavalink, followed this video: https://www.youtube.com/watch?v=_oM6ftzy33g

but I got this error and I can't find anything on the internet

=== [ LAVALINK RESOURCES ] ===
https://pastebin.com/kNa7nULz

=== [ VIDEO AUTHOR ] ===
› Gavin ( aesthetical#2545 )

=== [ OUR WEBSITE ] ===
https://discordbots.co

=== [ DISCORD ] ===
https://discord.gg/WeftAFp
In our Discord server, you can get support with fixing y...

▶ Play video
delicate shore
#

wot

misty sigil
#

what error

delicate shore
#

which error

polar temple
cinder sandal
#

what error

delicate shore
#

error. says everything

misty sigil
#

It’s only 1 ?

golden condor
#

No

#

You need node v14

#

It's a node module issue

delicate shore
#

What node v14 is there?

#

wth

cinder sandal
#

who even uses node v14

polar temple
#

node12

#

hm

#

ok

cinder sandal
#

i use the stable version (v12)

delicate shore
#

i use node 12

polar temple
#

I'll try to update and see, thanks anyway

golden condor
#

It works in v14

#

so...

cinder sandal
#

i use node v12 because... i have windows 7

polar temple
#

i use node v12 because... i have windows 7
@cinder sandal wow

delicate shore
#

r

golden condor
#

The error isn't their fault

polar temple
#

win 7 is wonderful

delicate shore
#

The error isn't their fault
@golden condor yes

golden condor
#

You could just get Linux instead lol

cinder sandal
#

^

delicate shore
#

linux tough

golden condor
#

I should make a tutorial on how to dual boot on medium

delicate shore
#

windows ez

cinder sandal
#

i will kind aget linux too but with dualboot

polar temple
#

I have dualboot because of that kk

cinder sandal
#

does vscode has a node.js terminal built-in?

earnest phoenix
#

@golden condor do i

delicate shore
#

We can run 2 bots in one bot

earnest phoenix
#

T

misty sigil
#

does vscode has a node.js terminal built-in?
@cinder sandal yes

golden condor
#

@earnest phoenix what?

earnest phoenix
#

Do it dualboot tutorial

golden condor
#

ok

#

I will

delicate shore
#

I am trying to run 2 bots on in one application

golden condor
#

Not sure how I'll get the images tho

cinder sandal
#

@cinder sandal yes
@misty sigil can the built-in node.js terminal run the bot

golden condor
#

I'll use some old pc I've got

misty sigil
#

yes

golden condor
#

@earnest phoenix once it's done I'll let you know

delicate shore
#

I am trying to run 2 bots on in one application
@delicate shore

misty sigil
#

client and client2

fluid basin
#

a ?? b => a == null ? b : a

misty sigil
#

what

golden condor
#

Yep

fluid basin
#

null coalescing operator

delicate shore
#

client and client2
@misty sigil yes and for events like messagei will do client2. right ?

misty sigil
#

yea

#

and just client.login("bot1 token") client2.login("bot2 token")

dusty tulip
#

What does c++ mean?

delicate shore
#

lang

polar temple
#

hi

#

i am att my node

#

for node14

slender thistle
#

Token that you tried to log in with was invalid

polar temple
#

it just so happens that I just generated a new one, that's why it's strange to me

#

ow shit

#

1moment

slender thistle
polar temple
#

sorry

thick gull
golden condor
#

It shouldn't do that

#

You might have overloaded the server

thick gull
#

yeah i was testing something

#

and it randomly said undefined

#

so i just started spamming to see if it was a ratelimit or something

#

here i wasnt even spaming anything it just said undefined randomly

#

so im not sure

cinder sandal
#

how to make the bot respond after you ping him

#

i tried but works only on pc

thick gull
#

i just checked if message.content started with my bot's <@ID>

#

its probably ineffecient

#

but /shrug

cinder sandal
#

same thing tried

#

pinging him works only on desktop discord

delicate shore
#

¯_(ツ)_/¯

thick gull
#

message.content.startsWith(<@!blah>) || .startWith(<@blah>) {} ?

#

should work if you did that

delicate shore
#

it's been one month 6 days my bot not reveiwed by @cosmic surge

thick gull
#

if the bot is nicked there will be a ! infront of the id

misty sigil
#

string

cinder sandal
#

bruh

#

i accidentaly called someone

thick gull
golden condor
#

Never happened to me

#

Also

#

Use a regex

thick gull
#

sorry im an idiot

#

so i dont know how to

golden condor
#

h

delicate shore
#

h

thick gull
#

it's entirely possible i messed up the schema cause this is my first time using mongo

cinder sandal
#

h

thick gull
#

-hpost

golden condor
#

o

cinder sandal
golden condor
#

Are you using mongoose?

thick gull
#

yea

#

i know you have abc.db

golden condor
#

what's your model/schema?

#

;)

thick gull
#

const guildSchema = new mongoose.Schema({
guildID: String,
prefix: String,
announcementsChannel: String,
ignoredChannels: Array,
})

#

i felt it would be more reliable to use mongoose instead of abcdb cause you could just dip randomly

#

and then my code would die

#

:)

golden condor
#

Wdym

#

Dip randomly?

thick gull
#

yes

golden condor
#

What

thick gull
#

just randomly vanish

golden condor
#

lol

thick gull
#

off the face of the internet

golden condor
#

The docs still exist

thick gull
#

and never update your abcdb

golden condor
#

And the package works

thick gull
#

and then abcdb slowly goes into obsecurity

#

:)

golden condor
#

It just wouldn't be maintained

thick gull
#

yes exactly

#

i'd rather have something maintained kek

golden condor
#

Yeah but I won't go off the internet any time soon :)

thick gull
#

'tis fine i want to learn mongoose anyways

golden condor
#

yus

#

so

#

Do you model it?

thick gull
#

english pls

#

kek

golden condor
#

mongoose.model(guildSchema) ?

thick gull
#

yea

golden condor
#

ok

thick gull
#

module.exports = mongoose.model("guilds", guildSchema)

golden condor
#

It should work

thick gull
#

it works fine

golden condor
#

I have never been rate limited

thick gull
#

it seems to randomly just make the data "undefined"

#

though

#

so idk

golden condor
#

oh

#

That's weird

#

Uh what is your message event code

thick gull
#

i mean it might be because some of my code is still in quick.db

golden condor
#

perhaps

thick gull
#

still messing around with mongo

cinder sandal
#

how to make aliases for commands
discord.js

golden condor
#

Collection#migrateFromQuickDB what

thick gull
#

i was geniunely considering not learning mongo and then just migrating to quickdb every time i startup on my bot

#

ops

#
    let prefix;
    if (message.channel.type === "dm") {
        prefix = defaultprefix
    } else {
        db.set(`guild.${message.guild.id}.ignoredChannels`, [])
        if (!db.has(`guild.${message.guild.id}.prefix`)) {
            db.set(`guild.${message.guild.id}.prefix`, defaultprefix)
            db.set(`guild.${message.guild.id}.ignoredChannels`, [])
        }
        let findGuild = await Guilds.findOne({
            guildID: message.guild.id
        })
        if (!findGuild) {
            findGuild = new Guilds({
                guildID: message.guild.id,
                prefix: defaultprefix,
                announcementsChannel: `0`,
                ignoredChannels: [],
            })
            await findGuild.save().catch(e => console.log(e))
        }
        await Guilds.findOne({
            guildID: message.guild.id
        }, async (err, guildChosen) => {
            prefix = guildChosen.prefix || defaultprefix;
        })
    }
#

this is probably very sloppy

#

some of it is still in quickdb

golden condor
#

no you can just do it once, or eval it lol

#

Uh

thick gull
#

idk

golden condor
#

Is defaultprefix undefined?

thick gull
#

i just mashed together whatever i could use my brain on

#

default prefix is defined in a config.json file

#

which i am requiring

#

const {
    token,
    version,
    defaultprefix,
    mongoDB
} = require('./utils/json/config.json');
golden condor
#

Also why do you use the callback, you can just await it

#

ah ok

thick gull
#

idk

#

kek

#

i used whatever 2 braincells i had after playing animal crossing for a full day without sleep

golden condor
#

This is weird

#

It shouldn't do that

thick gull
#

ohh

#

i think i know

#

idk how it was working

golden condor
#

What was it?

thick gull
#

but i had two different things for findguild

golden condor
#

o

thick gull
delicate shore
#
const ytdl = require("ytdl-core");
const YouTube = require("simple-youtube-api");
const youtube = new YouTube("API");

module.exports = {
    name: 'play',
    description: "play",
    async execute(msg, args) {

        const args2 = msg.content.split(" ");
        const queue = new Map();
        const searchString = args2.slice(1).join(" ");
        const url = args2[1] ? args2[1].replace(/<(.+)>/g, "$1") : "";
        const serverQueue = queue.get(msg.guild.id);
        const voiceChannel = msg.member.voice.channel;
        if (!voiceChannel)
            return msg.channel.send(
                "I'm sorry, but you need to be in a voice channel to play a music!"
            );
       voiceChannel.join().then(connection => {
    // Yay, it worked!
    console.log("Successfully connected.");        if (url.match(/^https?:\/\/(www.youtube.com|youtube.com)\/playlist(.*)$/)) {
            const playlist = await youtube.getPlaylist(url);
            const videos = await playlist.getVideos();
            for (const video of Object.values(videos)) {
                const video2 = await youtube.getVideoByID(video.id); // eslint-disable-line no-await-in-loop
                await handleVideo(video2, msg, voiceChannel, true); // eslint-disable-line no-await-in-loop
            }
            return msg.channel.send(
                `✅  **|**  Playlist: **\`${playlist.title}\`** has been added to the queue`

            );
        }
    }
}```
thick gull
#

literally the only time i mention it too

#

BUT SOMEHOW

#

it was working

delicate shore
#

SyntaxError: await is only valid in async function

thick gull
#

async

#

module.exports

delicate shore
#

i do

thick gull
#

ph wait

#

no

delicate shore
#

async execute(msg, args) {

thick gull
#

is there a line

delicate shore
#

wha

golden condor
#

@delicate shore async connection

thick gull
#

ok wait

#

so

golden condor
#

Also

thick gull
#

in the .catch i had

golden condor
#

Why not just

thick gull
#

i defined findguild

#

kek

#

chosenguild*

delicate shore
#

@delicate shore async connection
@golden condor what?

thick gull
#

not catch

#

my brain is turning to goop

#

gonna sleep goodbye

golden condor
#

const connection = await voiceChannel.join()

#

Just do this

#

As it's async anyway

delicate shore
#

ok

cinder sandal
#

the command handling from discord js guilde doesn'te even work

golden condor
#

Just get rid of the callback

#

And yes it does

#

You are doing it wrong clearly

thick gull
#

i used it

#

it works

delicate shore
#

i use fs

#

for command handler

thick gull
#

that is what it uses

#

yes

delicate shore
#

nice

golden condor
#

You use fs

#

lmfao

delicate shore
#

some people use disocord commando

#

it sucks

golden condor
#

Just use collections

delicate shore
#

yes callum

#

that's what i se

#

use

golden condor
#

i use fs
@delicate shore

thick gull
#

it uses a mix of the two

delicate shore
#

^^

thick gull
#

fs/collections

golden condor
#

oh ye

delicate shore
#

^^

thick gull
#

yea

golden condor
#

read the folders

delicate shore
#

yep

golden condor
#

And get the cmds

#

And set them

delicate shore
#

yes

golden condor
#

You should also use classes

#

For your commands

delicate shore
#

i fdo\

#

i do*

golden condor
#
const ytdl = require("ytdl-core");
const YouTube = require("simple-youtube-api");
const youtube = new YouTube("API");

module.exports = {
    name: 'play',
    description: "play",
    async execute(msg, args) {

        const args2 = msg.content.split(" ");
        const queue = new Map();
        const searchString = args2.slice(1).join(" ");
        const url = args2[1] ? args2[1].replace(/<(.+)>/g, "$1") : "";
        const serverQueue = queue.get(msg.guild.id);
        const voiceChannel = msg.member.voice.channel;
        if (!voiceChannel)
            return msg.channel.send(
                "I'm sorry, but you need to be in a voice channel to play a music!"
            );
       voiceChannel.join().then(connection => {
    // Yay, it worked!
    console.log("Successfully connected.");        if (url.match(/^https?:\/\/(www.youtube.com|youtube.com)\/playlist(.*)$/)) {
            const playlist = await youtube.getPlaylist(url);
            const videos = await playlist.getVideos();
            for (const video of Object.values(videos)) {
                const video2 = await youtube.getVideoByID(video.id); // eslint-disable-line no-await-in-loop
                await handleVideo(video2, msg, voiceChannel, true); // eslint-disable-line no-await-in-loop
            }
            return msg.channel.send(
                `✅  **|**  Playlist: **\`${playlist.title}\`** has been added to the queue`

            );
        }
    }
}```

H

delicate shore
#

this is not my code

#

my friend was having error

golden condor
#

o

#

lol

delicate shore
#

lol

thick gull
#

it looks copy pasted to me

golden condor
#

Do you use a custom command structure?

radiant knot
#

hey

delicate shore
#

me?

thick gull
#

hey

golden condor
#

Yes

delicate shore
#

yes

golden condor
#

Nice

radiant knot
#

let me send somethng here

delicate shore
#

one thing

#

i have one thing to ask

golden condor
#

Go on

delicate shore
#

Is there any way if someone does s!help play

golden condor
#

yes

thick gull
#

yea

delicate shore
#

so it will get description

#

and usage and tell it

golden condor
#

check the first arg

#

Check if it's a valid command

#

If it is

#

Get the info

#

If not

#

Return that it isn't valid

delicate shore
#

how to get info

cinder sandal
#

it basically doesn't work i thinks that the command doesn't exist and does nothing

#

command handling bad

golden condor
#

@delicate shore collection.get

delicate shore
#

oh ok

#

how is @tacit pilotm not verified bot dev

cinder sandal
#

so

#

command hadling doesn't even work for me

delicate shore
#

it works for me

golden condor
#

Because he hasn't applied?

delicate shore
#

@golden condor they dont have a bot

golden condor
#

Or is stil waiting for a turnaround

thick gull
#

@pliant gorge is waiting

delicate shore
#

y

#

s

thick gull
#

whoever made it,aprobably team did

#

so yea

golden condor
#

Because it is massive

earnest phoenix
#

?

#

@delicate shore

radiant knot
#

oh sorry wrong server

delicate shore
#

@earnest phoenix ask here

earnest phoenix
#

kk

radiant knot
#

.

earnest phoenix
#

Wait i will ask later cuz i need to eat now @delicate shore

delicate shore
#

ok

thick gull
#

why

cinder sandal
#

my command handling ingnores itself

thick gull
#

delete the apk file

cinder sandal
#

basically it ignores the fs thing, and ignores the commands folder

delicate shore
#

SEND CODE

golden condor
#

Wait what

delicate shore
#

dude

golden condor
#

Can I ask you if it is possible for you to show us your code?

cinder sandal
#

i removed the command handling code

delicate shore
#

Right way to ask ^

#

Bruh

golden condor
#

oh

cinder sandal
#

but it's like in discordjs

#

guilde

#

i copied it from there

golden condor
#

So it should work in that case

delicate shore
#

Maybe a syntax erro

#

or maybe lowercase

#

or uppercase

#

error

#

@outer marsh

cinder sandal
#

should the fs thing be at the stat of the code or under require .env

delicate shore
#

start

cinder sandal
#

maybe that's the mistake

#

it put it under require .env

earnest phoenix
#

Dotenv not require env

cinder sandal
#

typo

#

forgot what the env module is named

#

basically u should put require fs upon require dotenv?

#

and should i remove the commands from the main file and put them into the js files in commands folder?

delicate shore
#

Is

#

is

#

is Oxide hosting better than GalaxyGate

#

is Oxide hosting better than GalaxyGate

#

Discord lagging wth

#

Discord lagging wth

icy fractal
#

hi

earnest phoenix
#

@coral trellis do the -vps

cinder sandal
#

and should i remove the commands from the main file and put them into the js files in commands folder?
@cinder sandal

delicate shore
#

-vps

golden condor
#

@delicate shore they are both good, but gg is known to be faster

delicate shore
#

oh ok

#

it's expensive then Oxide

golden condor
#

As I said

#

They are both good

coral trellis
#

-vps

gilded plankBOT
#

A VPS or virtual private server is a virtualized server instance run in the cloud. It acts like a normal server, allowing you to remotely login and manage it just like a physical server or computer. If you're looking for a way to keep your bot online 24/7, a VPS is a great option.

Having trouble choosing a VPS provider or don't know where to start? Click here for a list of common and affordable VPS providers.

clever vector
#

Anyone know the best 24/7 host place?

#

except from vps

delicate shore
#

gg is best ig

#

Anyone know the best 24/7 host place?
@clever vector your PC

golden condor
#

Rpi?

delicate shore
#

replit

golden condor
#

If you've got a static html page then glitch

delicate shore
#

but it goes down

#

after 5 mins

golden condor
#

no

#

Static html pages

thick gull
#

I would use glitch / repl.it for a html page

golden condor
#

Are free

delicate shore
#

really?

golden condor
#

Yes

#

They stay online

delicate shore
#

oh ok thnx

golden condor
#

If they are static

#

Just normal html

thick gull
#

for bots i would home host

delicate shore
#

@golden condor which vps u use

thick gull
#

Unless you got a vps

cinder sandal
#

i host with heroku

golden condor
#

I use contabo

thick gull
#

I might get a DO

delicate shore
#

Sorry What?

polar temple
#

hi, this is wrong?

delicate shore
#

Contabo?

polar temple
golden condor
#

I use contabo

thick gull
#

What is tracks

golden condor
#

They are quite cheap

polar temple
#

What is tracks
@thick gull whats?

#

sorry

thick gull
#

sorry no i saw it

polar temple
#

1x lavalink

delicate shore
#

their website is ugly

thick gull
#

I think your issue is you're not accessing tracks properly

golden condor
#

Yeah it could do with a revamp but the point still stands, it's good.

thick gull
#

I'm not sure how lava link works

#

you could check tracks with console.log

#

and go from thrre

delicate shore
#

lol

thick gull
#

¯_(ツ)_/¯

golden condor
#

it isn't .info.setTimestamp

thick gull
#

that's what I would do if I was thrown code and had to fix it

royal portal
#

:D

#

lol

thick gull
#

Timestamp is fine

royal portal
#

burber is back

golden condor
#

It isn't a property that exists

thick gull
#

yes it is

golden condor
#

That's why it's undefined.

thick gull
#

kek

golden condor
#

No

#

He accessed it on the track

thick gull
#

oh Fuck me im blind

golden condor
#

Not the embed

thick gull
#

I thought you meant the embed

golden condor
#

That's why it's undefined

thick gull
#

Idk im feeling very proud cause I managed to use Mongo properly

#

:D

golden condor
#

Gg

cinder sandal
#

how to make arguments without the commas ,

golden condor
#

It's an array?

pure lion
#

Join with something other than commas

golden condor
#

It's gonna have commas

polar temple
#

and how would it be the right way? : /

thick gull
#

no he is splitting in commas

golden condor
#

A

cinder sandal
#

Even if i do .join(' ')

pure lion
#

He means like argN,argN etc

polar temple
#

video I saw was like this, I know nothing about lavalink

thick gull
#

.join turns the arrays

delicate shore
#

^

thick gull
#

into a string with spaces

golden condor
#

join turns the array to a string

pure lion
#

He is splitting straight facts

golden condor
#

Joined by the character you specify

thick gull
#

so ["blah", "Bleu"]
becomes "blah Bleu"

cinder sandal
#

i have .join(/ +/g)

golden condor
#

yes

#

Why overcomplicate it

#

Just use " "

delicate shore
#

just do .join(" ")

cinder sandal
#

argumens with commas are kinda useless

golden condor
#

Can someone send me the mdn pages for array.reduce and array.sort, they really confuse me lol

cinder sandal
#

with spaces better

thick gull
#

"blah Bleu"
.split(" ")
would become
["blah", "Bleu"]

#

wait

#

am i doing this right

#

kek

golden condor
#

Yes

#

You are

delicate shore
#

YES

thick gull
#

ok goos

#

good

delicate shore
polar temple
#

thx

thick gull
#

i have .join(/ +/g)
@cinder sandal you are turning the array into a string not turning a string into an array

delicate shore
#

@cosmic surge

golden condor
#

Idk why but I am just so confused by reduce and sort

thick gull
#

or something

#

.join joins array values with whatever you specify

golden condor
#

yeah like

pure lion
#

Sort is just sort

golden condor
#

[1, 2].join(", ") returns "1, 2"

radiant knot
pure lion
#

No

radiant knot
#

Wrongg

thick gull
#

@radiant knot can you not keep accidentally sending an apk file in this channel

#

cause you've sent it here twice

#

kek

golden condor
#

I need the mdn stuff for this I am very confused by these two functions

radiant knot
#

@radiant knot can you not keep accidentally sending an apk file in this channel
@thick gull i send these my mobile

delicate shore
#

@radiant knot that is just virus

thick gull
#

ok but

#

I don't want your apk files

radiant knot
#

I dont say install them .p

delicate shore
golden condor
delicate shore
#

Callum

#

do u make custom bots ?

thick gull
pure lion
#

Yeah, I made a package

golden condor
#

do u make custom bots ?
@delicate shore lol why

delicate shore
#

because

pure lion
delicate shore
#

@delicate shore lol why
@golden condor you can earn some $$

golden condor
#

god fuck why @pure lion

pure lion
#

It doesn't work properly

golden condor
#

@delicate shore I tried to before but it didn't really work

pure lion
#

Lmao

delicate shore
#

oh

pure lion
#

@golden condor same

golden condor
#

You didn't even put a readme

#

Lmfao

pure lion
#

Ik

#

I'll make a better version that's not shit

#

But typing didn't work for me :(

golden condor
#

@pure lion parseInt() exists

pure lion
#

Ik

#

But typing

golden condor
#

Wdym

thick gull
golden condor
#

That actually looks epic

thick gull
#

I really can't be bothered to pay for hostinf

#

So it's inefficient and when I add new data it needs an update

pure lion
#

I want to make an actually useful package but idk what

thick gull
#

just find something random and make it easier

#

or do data collection

pure lion
#

Like?

thick gull
#

and make yet another food package™️

#

Idk

fathom sky
delicate shore
thick gull
#

you'll get an idea eventually

#

@fathom sky literally 0 clue what you're trying to do here

pure lion
#

Try pnpm enable

fathom sky
#

i did

pure lion
#

Oof

gleaming island
#

what's the best way to delete an embed?

thick gull
#

is pnpm a valid path?

pure lion
#

Try looking at docs

gleaming island
#

i was trying to mess around with message.suppressEmbeds() but i cant figure it out

pure lion
#

Just delete the message

thick gull
#

.then(msg => {})?

pure lion
#

^^^^^ or await

delicate shore
#

Just delete the message
@pure lion yes

#

bruh

ivory seal
#

any markdown guides?(pls ping as i have this muted)

earnest phoenix
#

Please help

pale vessel
#

nice api key

earnest phoenix
#

lol

#
    const ytdl = require("ytdl-core");
    const YouTube = require("simple-youtube-api");
    const youtube = new YouTube("api key");

    module.exports = {
        name: 'play',
        description: "play",
        async execute(msg, args) {

            const args2 = msg.content.split(" ");
            const queue = new Map();
            const searchString = args2.slice(1).join(" ");
            const url = args2[1] ? args2[1].replace(/<(.+)>/g, "$1") : "";
            const serverQueue = queue.get(msg.guild.id);
            const voiceChannel = msg.member.voice.channel;
            if (!voiceChannel)
                return msg.channel.send(
                    "I'm sorry, but you need to be in a voice channel to play a music!"
                );

            if (url.match(/^https?:\/\/(www.youtube.com|youtube.com)\/playlist(.*)$/)) {
                const playlist = await youtube.getPlaylist(url);
                const videos = await playlist.getVideos();
                for (const video of Object.values(videos)) {
                    const video2 = await youtube.getVideoByID(video.id); // eslint-disable-line no-await-in-loop
                    await handleVideo(video2, msg, voiceChannel, true); // eslint-disable-line no-await-in-loop
                }
                return msg.channel.send(
                    `✅  **|**  Playlist: **\`${playlist.title}\`** has been added to the queue`

                );
            }
        }
    }
marble nexus
#

Hello

#

Hm

earnest phoenix
#

Could anyone pls help with my command..my bot isn't joining

delicate shore
#

@earnest phoenix u removed line i said u

earnest phoenix
#

No it seems like i cant show the key

delicate shore
#
const connection =        voiceChannel.join().then(connection => {
    // Yay, it worked!
    console.log("Successfully connected.");```
earnest phoenix
#

Someone deleted my code

delicate shore
#

this one

earnest phoenix
#

oh

delicate shore
#

yeh

earnest phoenix
#
    const ytdl = require("ytdl-core");
    const YouTube = require("simple-youtube-api");
    const youtube = new YouTube("youtube api");

    module.exports = {
            name: 'play',
            description: "play",
            async execute(msg, args) {

                const args2 = msg.content.split(" ");
                const queue = new Map();
                const searchString = args2.slice(1).join(" ");
                const url = args2[1] ? args2[1].replace(/<(.+)>/g, "$1") : "";
                const serverQueue = queue.get(msg.guild.id);
                const connection = voiceChannel.join().then(connection => {
                        // Yay, it worked!
                        console.log("Successfully connected.");


                        if (!voiceChannel)
                            return msg.channel.send(
                                "I'm sorry, but you need to be in a voice channel to play a music!"
                            );

                        if (url.match(/^https?:\/\/(www.youtube.com|youtube.com)\/playlist(.*)$/)) {
                            const playlist = await youtube.getPlaylist(url);
                            const videos = await playlist.getVideos();
                            for (const video of Object.values(videos)) {
                                const video2 = await youtube.getVideoByID(video.id); // eslint-disable-line no-await-in-loop
                                await handleVideo(video2, msg, voiceChannel, true); // eslint-disable-line no-await-in-loop
                            }
                            return msg.channel.send(
                                `✅  **|**  Playlist: **\`${playlist.title}\`** has been added to the queue`

                            );
                        }
                    }
                }



            }

idk..i have an error

delicate shore
#

@earnest phoenix which error

earnest phoenix
delicate shore
#

see terminal

#

for error

#

I am Bot Developer ™️

low shard
earnest phoenix
#

okay so

#
    const ytdl = require("ytdl-core");
    const YouTube = require("simple-youtube-api");
    const youtube = new YouTube("key");

    module.exports = {
        name: 'play',
        description: "play",
        async execute(msg, args) {

            const args2 = msg.content.split(" ");
            const queue = new Map();
            const searchString = args2.slice(1).join(" ");
            const url = args2[1] ? args2[1].replace(/<(.+)>/g, "$1") : "";
            const serverQueue = queue.get(msg.guild.id);
            const voiceChannel = msg.member.voice.channel;
            // Yay, it worked!
            console.log("Successfully connected.");

            if (!voiceChannel)
                return msg.channel.send(
                    "I'm sorry, but you need to be in a voice channel to play a music!"
                );

            if (url.match(/^https?:\/\/(www.youtube.com|youtube.com)\/playlist(.*)$/)) {
                const playlist = await youtube.getPlaylist(url);
                const videos = await playlist.getVideos();
                for (const video of Object.values(videos)) {
                    const video2 = await youtube.getVideoByID(video.id); // eslint-disable-line no-await-in-loop
                    await handleVideo(video2, msg, voiceChannel, true); // eslint-disable-line no-await-in-loop
                }
                return msg.channel.send(
                    `✅  **|**  Playlist: **\`${playlist.title}\`** has been added to the queue`

                );
            }
        }
    }
delicate shore
#

who can be banned?

#

member or user?

honest perch
#

Both

delicate shore
#

really?

#

but isn't user universal

#

i mean user is property for a user like @delicate shore is a user whose presence is dnd

#

but a member does not have presence

#

thingy so

honest perch
#

I thought user was a person outside of the server

#

And member a member in the server

delicate shore
#

yes

#

so how can user be banned?

honest perch
#

I'm guessing with the id

delicate shore
#

yeh but how can one get member property of a user

honest perch
#

With the api you can get usernamr etc from an id, doesnt matter if the user is in the server or not

delicate shore
#

yeh but how can one get member property of a user
like if i do s!ban 48923598852

Do i need. to get member property of user

honest perch
#

Not sure actually

delicate shore
#

alr

#

maybe someone else can help me

thick gull
#

user . member?

#

iirc that's a thing right

quartz kindle
#

to get a member object from a user object you have to either:
a. check the guild's member cache and get the member that matches the user id
b. fetch the member using the user id

#

you dont need the member to ban/unban, the user id is enough

delicate shore
#

you dont need the member to ban/unban, the user id is enough
Oh ok thanks

#

iirc that's a thing right
@thick gull what is iirc

thick gull
#

if I remember correctly

earnest phoenix
#

best music player for java?

honest perch
#

Javascript

#

Use lavalink after