#development

1 messages · Page 511 of 1

earnest phoenix
#

IM GUESSING WINDOWS

#

OOOOOOOOOOOW

#

@lament meteor i dont have a client and i didnt make a new client in a client and a client.

lament meteor
#

then open command prompt, type cd drag the file into the command prompt then do the node cmd

#

@earnest phoenix ur using a cmd handler right

earnest phoenix
#

ok thx

#

yes, but i didnt use client in the handler, i made a new one only for that command, it isnt using the client from the main file

#

because that command pings everyone

#

....

#

@lament meteor u dont understand how handlers work if u think what u think, my error is cannot read id of undefined so the id of something is undefined but what

#

I think he knows more than you know Callumok2004

lament meteor
#

the only id there is, is message.author.id so idk @earnest phoenix but just saying it isnt a good practice to make a new client in the cmd. just saying

earnest phoenix
#

dont forget the channel id

#

both of which are correctly done

lament meteor
#
const discord = require('discord.js')
const {prefix, PREFIX, footer, owner, ownerID} = require('../../settings/config.json')

exports.run = async (message, args) => {
  const client = new discord.Client({disableEveryone: false});
//the only thing with a object that has a .id
  if (message.author.id !== ownerID) {
    message.channel.send("You are not authorized to use this command.");   
    message.delete();
  } return;
  message.delete();

  let announce = new discord.RichEmbed()
      .setAuthor("Announcement From ")
      .setTitle("Callumok2004")
      .setDescription(args.join(" "))
      .setFooter(footer)
//this will not cause the error
  client.channels.get("501467078172082176").send("@everyone", { embed: announce })

  message.delete();
client.login(process.env.TOKEN)


}```
smoky spire
#

If you make a new client, that client won't have any users or anything because those are populated on ready and you don't login with that client

#

So ready would never fire

lament meteor
#

that also might be the issue 🤷

heady anvil
#

could people not post a huge blob of code and say "why doesn't this work" that's not helpful to you or anyone else

lament meteor
#

@heady anvil i agree they should put the error msg with it at least

heady anvil
#

or what happens exactly

earnest phoenix
#

@smoky spire wrong, it had previously worked, even with a new client

smoky spire
#

Because you login in that file

earnest phoenix
#

i just said it worked are you dumb

#

ffs

lament meteor
#

but the issue is that he is getting .id of undefiend....

earnest phoenix
#

im moving to plexi

smoky spire
#

Good luck getting help there

earnest phoenix
#

and that the thing id is reading of is defined

quartz kindle
#

if your problem is only the ID, then whatever you're getting in that message has no author

#

but that code has a lot of other problems lol

quasi saddle
#

I have this code however I need to input more advance capacities in my bot

#

can someone assist please

lament meteor
#

@quartz kindle when people don't know how to read error msgs :/

#

u gave no details about what you are coding @quasi saddle

raven torrent
#

@quasi saddle what do you do?

quartz kindle
#

asks for help and doesnt say what they need help with

raven torrent
#

ikr

quasi saddle
#

Hi, I need to enable my BOT to be reactive to voice command

raven torrent
#

What's your main language ?

#

For sure not english

ruby dust
#

tfw someone tries way too hard to act very officially

quasi saddle
#

learn from the query of different devises

raven torrent
#

What's the language you speak

#

Like the main language you talk

quasi saddle
#

French

#

java is the code

#

I use REACT and JAVA NODE>JS

#

with JSON

raven torrent
#

bon

#

parle moi en francais

#

pask l'anglais c'est pas ton point fort

quasi saddle
#

lol merci

#

var Discord = require('discord.io'); var logger = require('winston'); var auth = require('./auth.json'); // Configure logger settings logger.remove(logger.transports.Console); logger.add(new logger.transports.Console, { colorize: true }); logger.level = 'debug'; // Initialize Discord Bot var bot = new Discord.Client({ token: auth.token, autorun: true }); bot.on('ready', function (evt) { logger.info('Connected'); logger.info('Logged in as: '); logger.info(bot.username + ' - (' + bot.id + ')'); }); bot.on('message', function (user, userID, channelID, message, evt) { // Our bot needs to know if it will execute a command // It will listen for messages that will start with ! if (message.substring(0, 1) == '!') { var args = message.substring(1).split(' '); var cmd = args[0]; args = args.splice(1); switch(cmd) { // !ping case 'ping': bot.sendMessage({ to: channelID, message: 'Pong!' }); break; //

#

on Padillo

raven torrent
#

Bon, déjà je pense pas trop pouvoir t'aider vu que c'est discord.js

quartz kindle
#

discord.js = javascript, non java

quasi saddle
#

Ok oui

quartz kindle
#

java cest different

raven torrent
#

Je viens de la dire

quartz kindle
#

and please use code blocks

raven torrent
#

ikr

#

xD

quasi saddle
#

vous avez tout compris mon idee

raven torrent
#

non

#

C'est illisible

quartz kindle
#

utiliseur code blocks pls

quasi saddle
#

ok

quartz kindle
#

``` code here ```

quasi saddle
#

ok

raven torrent
#
var Discord = require('discord.io'); var logger = require('winston'); var auth = require('./auth.json'); // Configure logger settings logger.remove(logger.transports.Console); logger.add(new logger.transports.Console, { colorize: true }); logger.level = 'debug'; // Initialize Discord Bot var bot = new Discord.Client({ token: auth.token, autorun: true }); bot.on('ready', function (evt) { logger.info('Connected'); logger.info('Logged in as: '); logger.info(bot.username + ' - (' + bot.id + ')'); }); bot.on('message', function (user, userID, channelID, message, evt) { // Our bot needs to know if it will execute a command // It will listen for messages that will start with ! if (message.substring(0, 1) == '!') { var args = message.substring(1).split(' '); var cmd = args[0]; args = args.splice(1); switch(cmd) { // !ping case 'ping': bot.sendMessage({ to: channelID, message: 'Pong!' }); break; //
quasi saddle
#

one min

raven torrent
#

still unreadable

quartz kindle
#

js beautifier

quasi saddle
#

OUI

raven torrent
#

?

quartz kindle
#

wait wat

#

his entire code is commented out?

raven torrent
#

true

quartz kindle
#

lmao

raven torrent
#

Everything is ignored

#

En gros y'a que ca dans ton code:

#
var Discord = require('discord.io'); var logger = require('winston'); var auth = require('./auth.json');
quasi saddle
#

je travail avec le code de d,autre person donc il me faut nettoyer les leurs

raven torrent
#

mais en gros le code y'a tout qui est ignoré

#

sauf les lignes que j'ai envoyés

lament meteor
#

it uses gateway v5 the stable iirc and it is already g7

raven torrent
#

then use

#

discord.js

#

I guess

#

xD

quartz kindle
#

here is the corrected code to the french guy

#
var Discord = require('discord.io');
var logger = require('winston');
var auth = require('./auth.json'); // Configure logger settings
logger.remove(logger.transports.Console);
logger.add(new logger.transports.Console, {
    colorize: true
});
logger.level = 'debug'; // Initialize Discord Bot
var bot = new Discord.Client({
    token: auth.token,
    autorun: true
});
bot.on('ready', function(evt) {
    logger.info('Connected');
    logger.info('Logged in as: ');
    logger.info(bot.username + ' - (' + bot.id + ')');
});
bot.on('message', function(user, userID, channelID, message, evt) { // Our bot needs to know if it will execute a command // It will listen for messages that will start with !
    if (message.substring(0, 1) == '!') {
        var args = message.substring(1).split(' ');
        var cmd = args[0];
        args = args.splice(1);
        switch (cmd) { // !ping
            case 'ping':
                bot.sendMessage({
                    to: channelID,
                    message: 'Pong!'
                });
                break; //
        }
    }
});```
#

lmao

lament meteor
#

d.js or eris. if you are new i think you should use d.js

raven torrent
#

I never used discord.js so I can't help :/

quartz kindle
#

he said it was a copy pasted code right?

raven torrent
#

yes

quartz kindle
#

facepalm

raven torrent
quartz kindle
#

@quasi saddle your code has discord.io which is very old and not good

#

use discord.js instead

raven torrent
#

It's not his code

lament meteor
#

im making a rlly lightwieght discord module but wont have all endpoints

raven torrent
#

It's his friend code

lament meteor
#

so it will be like d.io but maybe lighter 🤷 and caching i wanna rlly work on that

quasi saddle
#

I need to use discord to eanble the bot function so I can get it to work with Diaalog Flow and Adobe X Voice command

quartz kindle
#

well, good luck. but still, start with discord.js or eris, if you want to use javascript

earnest phoenix
#

No one wants to email you

quasi saddle
#

well guess I just kill thew community!!!

patent reef
#

Lets say user returns true/false

if not user:
And
if user is false:

Work the same right? Python btw ^

quartz kindle
#

it should yes

#

the difference is that user === false is strict, while !user is not, at least in js, idk about python

#

!user would work the same with false, 0 null, "", etc...

patent reef
#

Yeah in python theres no ===
For example if u wanna do that you would do

if a == b and type(a) == type(b)

crystal spear
quartz kindle
crystal spear
#

And what i need to change?

#

Im newbie at this

quartz kindle
#

url queries work as follows: &name=value&name=value&name=value

#

& adds a new field, and = specifies the value

crystal spear
#

&forDiscord=?

quartz kindle
#

your code is adding = twice, which is invalid

#

also, what does forDiscord do? it works perfectly without it

#

but not with it

#

even with the correct value

crystal spear
#

It dont refresh an image

#

It cashed it

quartz kindle
#

ah

#

try just &Date.time()

#

without the forDiscord

#

it should still bypass the cache

vapid spoke
#

hi guys

#

i want to add the "upvote command"

#

but.. i don't know how to set up webhooks inside of a bot

#

i mean

#

i know only the channel webhooks

#

so if some1 can help me

#

i'm here

#

*sorry if I'm wrong speakin' english but i'm italian and italians can do it better e.e *

glacial kestrel
#

anyone who says they can do something better often can't

#

sad but true fact

vapid spoke
#

why you have the most popular scratch gif like propic?

#

anyway

#

i know it

glacial kestrel
#

i have it because im a pokemon fan and umbreon is my favorite pokemon ameowhyperthink

vapid spoke
#

mh.. seems legit but let's stop chattin' here

dusk thorn
#

Would anyone know that discordapp.com api link that has a giant list of servers with the server widget turned on?

#

the particular link all those bots with invite link usernames use to spam join discords

earnest phoenix
#

node.js isn't installing GWfroggyBlobSweat

#

I open up the installer.. (I'm not on my main)

#

and I accept the agreement

#

and it crashes saying the volume D:\ isn't available

#

and I broke that usb a long time ago

dusk thorn
#

simple solution: GWfroggyBlobSweat

#

reinstall winders

smoky spire
#

Anthony, don't they do that by brute forcing the invite shortener site links?

earnest phoenix
#

re-install windows?? mate this computer will die @dusk thorn

dusk thorn
#

@smoky spire thats one way

#

but they can also parse some sweet jsons from the discord api

#

@earnest phoenix i dont think so

hushed berry
#

@dusk thorn its not an issue within discord's API

dusk thorn
#

never said it was an issue?

hushed berry
#

i mean

#

if it was in discord api

#

it would be an issue

#

iirc, discord said that the people were scraping it off of public server sites

slender thistle
#

Discord stated that?

earnest phoenix
#

well its the one that makes most sense

#

and it's honestly not hard

carmine echo
#

What's the character limit for a ban/kick reason? (discord.js)
Does one exist in the first place?

west raptor
#

I think so

#

140 characters iirc

spring mesa
#

discord truncates it at some point

#

iirc it's around 250 characters

#

*512

carmine echo
#

ok which answer is real

#

lol

spring mesa
#

in the app, you can set a reason up to 512 characters long

#

i tested something similar before, and it got truncated to 512

carmine echo
#

Good, big thank

spring mesa
#

np

slim heart
#

Curious, is there a way to collect a bunch of messages in a row and then add them together?

#

Like with discord.js how would I actually receive those messages I guess

serene plover
slim heart
#

Alright yeah I got it working and I can receive them. But I am still confused on how I could get them in order and add them up to make one string

earnest phoenix
#

sort by date

#

reduce and combine content

#

ez clap

slim heart
#

how would i sort by date lol

#

because the whole fetchMessages object is kind of confusing to me

earnest phoenix
#

lemme check the docs hang on

#

yeah it returns promise of collection of messages

#

and messages have a .createdAt property

#

so just use the .sort() method on collection

#

.sort((a, b) => a.createdAt - b.createdAt) i think

#

and then .reduce

#

and combine the message.content

shy rose
#

is it possible for a bot to make a discord server?
cause uh i need a large amount of emojis and screw making this manualy but it works out to 60 emojis servers needed....

earnest phoenix
#

yes but only if its in lless than 10 servers

smoky spire
#

Bots can make servers as long as they are in under 10 total servers

shy rose
#

so own less than 10?

earnest phoenix
#

no. in less than 10 total

#

else it cant make any

shy rose
#

thats a weird limit GWcfcThonk

earnest phoenix
#

yeah it is

smoky spire
#

It can own maximum 10 servers if it is in no other servers than the ones it's created

shy rose
#

ok so next question
whats the best way to make 60 emoji servers 😬

slim heart
#

it's to prevent like spam creating servers than transfering ownership to someone and can keep spamming servers

shy rose
#

i mean populating them is easy

earnest phoenix
#

just make an alt, make the alt create a bunch of servers

slim heart
#

seperate servers?

earnest phoenix
#

and have bot join it

#

then store emojis there

#

bot doesnt hve to own server to add emojis

shy rose
#

doesnt discord make you do phone auth if you make to many to fast or at least thats whats happened on my main acnt

earnest phoenix
#

probably

slim heart
#

^

#

Either take it slow or get a phone

shy rose
#

oh right then the joy of inviting bot to 60 servers

slim heart
#

hf

shy rose
#

k see ya next month

slim heart
#

2 servers a day dam🅱

#

smh my head

shy rose
#

is there any better way of doing this someone can think of

slim heart
#

making six bot accounts?

shy rose
#

context i need lots of icons but discord is a derp and wont let you embed icons

#

so next best is emojis

slim heart
#

make six bot accounts that make 10 servers then invite the main bot to each server? idk lol

shy rose
#

oh right not a bad idea jsut fire up a bot to make servers and offload

#

but can a bot invite a bot to server GWcfcThonk if a bot owns the server

bright spear
#

No

shy rose
#

heck

slim heart
#

p r o b a b l y s o m e w a y

earnest phoenix
#

it can create invites

slim heart
#

yeah but bots cant join those

#

o o f

earnest phoenix
#

yeah u cna join tho

#

lol

#

get manage server, invite u bot

#

then leave

slim heart
#

make another account and selfbot

earnest phoenix
shy rose
#

does a human need to accept server transfer or could a bot jsut make servers shunt them off to user acnt then leave

earnest phoenix
#

u cant transfer to a bot

#

even if under 10 servers iirc

shy rose
#

i feel this action will set of flags as it is not even mentioning if it was user bot lol

slim heart
#

(shhhskkssk)

shy rose
#

bot make server to shunt off invites to user acount

#

that way user account doesnt get locked by discord for making to many servers 😛

slim heart
#

bot accounts can be limited too btw

#

but a n y w a y s

shy rose
#

but bot acnts dont get locked and demand you do phone auth

slim heart
#

Yeah you're right, they just get locked

shy rose
#

rate limited?

#

or jsut locked...

slim heart
#

that's one way of putting it i guess

#

I've had one of my bots just outright stop working after spamming it

#

o o f

late hill
#

Just don't use 2fa

slim heart
#

it still doesn't login

late hill
#

🤷

slim heart
#

its not a matter of 2fa

shy rose
#

by locked i mean on a user acnt if you make to many servers discord says yo you looked weird prove your human and until you do phone auth your account is locked

(if you dont own a phone then your fucked)

slim heart
#

its human verification

late hill
#

I can keep creating servers

#

Without any problems

slim heart
#

Yeah go for it

#

do it

#

lol

late hill
#

I did

#

I needed like 10

#

To get 2500 servers

shy rose
#

i mean thats the only reason ive got 2fa on my acnt now cause exactly that happened...

late hill
#

to test my sharding

#

I made all 10

#

In less than a minute

slim heart
#

yeah well we're talking about 60 servers

#

so

shy rose
#

with an account made less than 10minutes ago lol

late hill
#

I don't expect it to randomly pop up something that stops u?

slim heart
#

not suspicious at all

#

No it just doesn't let you lol

#

Or well

late hill
shy rose
#

it has already like i said ive had it happen on this account

slim heart
#

Yeah actually nvrm it does pop up

#

it asks for a phone number to verify your a human and not just abusing servers

late hill
#

Why xd

shy rose
#

and basiclly if you dont have a phone then you need to make an alt....

slim heart
#

because discord usually doesn't like random spam botted accounts ? ? ?

late hill
#

They could just lower the max guilds owned then

slim heart
#

like what why wouldnt they not want to stop them?

late hill
#

No one should have 100 guilds owned

slim heart
#

No that'd be a whole controversy

#

Like I own 12 servers

late hill
#

<.<

shy rose
#

guilds isnt the issue its the rate of which your spamming thats a bit un usual

slim heart
#

And they're all legitimate and all server seperate purposes

#

that too

#

it's just the spamming

late hill
#

But 12

#

Isn't near 100

slim heart
#

yeah and it's more than your proposed 10

late hill
#

I actually made like 16 I think

#

xds

slim heart
#

listen it's just pointless to straight limit user accounts

shy rose
#

if i make an account and 10minutes later i make 100 servers 1 server/second

doesnt that seem a little off to you...

slim heart
#

y e a h

late hill
#

meh

sick cloud
#

discord obviously watch for that stuff though

shy rose
#

it does hence above

slim heart
#

yeah that's what we're trying to figure out how to do it

#

using bot accounts

#

(i'd hope)

late hill
#

what r u even doing

shy rose
#

they they lock your acount till you do phone auth and rip if no phone

late hill
#

That u need 60 emoji servers

sick cloud
#

i think they even have raised user ratelimits that no normal user can hit, therefore they have another way of detecting api abuse

late hill
sick cloud
#

since user ratelimits changed a bit ago afaik

shy rose
#

its not api limits its just a thing pops up saying your a bit unusual

slim heart
#

^^

sick cloud
#

not talking about those

earnest phoenix
#

stopping a legit user from creating servers to store emojis drakeyea
stopping userbot armies with verified phones drakeno

#

discord™

sick cloud
#

👏

shy rose
#

rip nitro

earnest phoenix
#

lmao

#

maybe discord will stop bots once they make profit kek

shy rose
#

just ask dabbit like yo i need 60 servers for emojis whats the best way to not get banned

sick cloud
#

oof

earnest phoenix
#

theyre like twitter except not mainstream at all

hushed berry
#

@shy rose why do you need 60 servers

keen drift
#

spacing out requests will reduce the likelyness

shy rose
#

cause need 3k emojis

ruby dust
#

if I'm checking a member/user object for something specific, am I checking my own cache or constantly requesting discord with that information?

keen drift
#

3k emojis

#

kek

shy rose
#

@ruby dust depends on the lib

#

some do some dont

ruby dust
keen drift
#

most likely a cache

shy rose
#

^

keen drift
#

otherwise you'd hit rate limit pretty fast

ruby dust
#

so I'm free to have an infinite loop with almost no intervals to constantly check members in a specific server?

keen drift
#

yeah

shy rose
#

sure but py is sync so youl freeze pretty fast

ruby dust
#

hmm, good point

sick cloud
#

anyone know how to use the FML api angeryBOYE

keen drift
#

fml

ruby dust
#

maybe I will add an interval then

keen drift
#

fuck my life API

sick cloud
#

yes

keen drift
#

yes

#

hit delete

hushed berry
#

@shy rose why do you need 3k emotes

shy rose
#

cause discord wont let you do inline icons so emoji are next best

sick cloud
#

seriously tho

shy rose
#

whats unusual about needing 3000 emojis?

#

🙃

#

its basilly jsut a ton of image assets working on and you know there are kinda a lot...

#

best way imo would be if discord let you do inline favicon sized images

hushed berry
#

Perhaps you should reevaluate your options lol

keen drift
#

@sick cloud wots fml

sick cloud
keen drift
#

o

#

so I was right

#

lmao

shy rose
#

anyone know the rate limit for making emojis discord docs says its special and on per guild basis anyone know what that is thou?

#

or at least an est of it

keen drift
#

n a w

#

better check header

earnest phoenix
#

.invites

#

What

#

Nickname stranger ;-;

#

What does that mean in my name? M Portuguese.

#

How do I get the server count on the site?

#

Like the DBL site

quartz kindle
#

dbl api

earnest phoenix
#

And does anybody have the CSS classes for the site so I can customize it

#

Or I can just do inspect element but I'm lazy

quartz kindle
#

just inspect element

#

thats what everyone does

sick cloud
#

i'm gonna ask again, does anyone know the api url for fmylife.com

bright spear
#

no

oblique gulch
#

how i get the number of users and guilds in one shard?

earnest phoenix
#

what library

shy rose
#

How long are deleted emojis valid for as noticing once you delete them they still render in chat so like is there a fixed date or anything?

#

or is it jsut they are here but they can be deleted at anytime now

bright spear
#

Probably forever

rare marten
#

Hi, I'm pretty new to making Discord bots, and have only made them for my friends' server so I haven't really had to worry about security. Could someone explain to me how to ensure stuff like tokens aren't abused? Thanks

astral quail
#

Just don't leak them..

rare marten
#

Ok, so it's basically a non-issue unless you're stupid?

amber stone
#

Just don't tell anyone your token and its fine

sick cloud
#

if your on github, use gitignore

#

and never upload configs

rare marten
#

What is a config and when are they generated?

#

sorry for the basic-ass questions lol

sick cloud
#

separate files

#

like a config.json or config.yml

#

you put your token and stuff in it

#

then you can require it whenever you need the stuff

rare marten
#

ah ok. thanks

rapid citrus
#

lol, I know I'm dumb.
How should I not do this? I mean I know about await and async but I feel like sometimes they actually doesn't work.

restive silo
#

async/await or chain Promises properly

#

like

somethingPromise
    .then(res => newPromise(res))
    .then(() => newOne())
    .catch(console.error)
``` looks way cleaner
#

async/await would also work

earnest phoenix
#

you don't need to open new functions for each then.
UserData.Init().then(QueueData.Init).then(SubscriptionData.Init).then(MalBindData.Init)

rapid citrus
#

yeah maybe I should be using callbacks.

#

oh, why I didn't use it in the first place, tho.

earnest phoenix
#

or you could use async await

#

put it in an async function

#

await them all in order

#

and put them all in one try catch

#

ez clap

#

async await hell

#

ahhh

tawdry anchor
fluid basin
#

tbh callbacks are messy as well

#

supposedly async/promises should make code much cleaner

#

and await only works in an async function

#

the main process is not in async

#

which might be why await doesnt work sometimes

restive silo
#

async / await is the heaven and await always works in async functions Thonk

coral trellis
#

@earnest phoenix Please don't randomly react to messages thanks.

topaz fjord
#

await/async is easier 👀

fluid basin
#

tru

#

mostly cleaner imo

earnest phoenix
#

@fluid basin async await can get messy too, and fast

fluid basin
#

still much readable than promise/callback hell

earnest phoenix
#

Take for example

await promise1();
await promise2();
await promise3();
await promise4();
await promise5();
#

That's an example of async await hell

jagged plume
#

if you need to do that many awaits you should probably have a function to do that

fluid basin
#

atleast its readable and much easier to manage if you have other statements in them

jagged plume
#

yeah its much more readable than .then over and over again

earnest phoenix
#

Really think so?

#
.then(callback)
.then(callback)
.then(callback)
.then(callback)
.catch(errorcallback)
jagged plume
#

k

#

but what about the fact that i can do

let var = await promise();

or

if (await promise() == "a value") {

}
#

?

#

it's just more convenient

earnest phoenix
#

let var bloblul

jagged plume
#

lmao i just realised that

earnest phoenix
#

Also, you don't have error handling there

jagged plume
#

try {} catch {}

#

really not that hard

earnest phoenix
#

So essentially one glorified block

#

That you live by when using async await

#

Yeah...I really despise it

jagged plume
#

lol ok

earnest phoenix
#

I use call backs if I only have one promise in my code

#

At that point, it seems extra to use a try catch block

crisp breach
#

Why doesnt my bot show how many servers it is in on the website?

earnest phoenix
#

Since you get easy handling with .then and .catch

jagged plume
#

you need to post your server count to the dbl api, you can see how to do that on the documentation

junior bobcat
#

I've some pb with heroku ...
They change their website since a while. So I can't find a button to add worker dyno, with node index.js... I host my bot (nodejs) with github and I deploy only via the website.
How could I add worker dyno ?

crisp breach
#

!help

#

i am never

#

ever doing that again

#

ive got like 50 dms

rapid citrus
#

@junior bobcat make a Procfile

lament rock
#

@junior bobcat you click the web npm start and edit it with the start script you want it to be and also enable it then on deploy, it’ll use that script

#

Or you could make a procfile ^^

rapid citrus
lament rock
#

Well then you just create a start script in your package. Ez

rapid citrus
#

but bots won't live longer in web dynos so worker must be present.

lament rock
#

I don’t think it really matters since heroku shuts down the app if it doesn’t have web traffic

rapid citrus
#

yeah. that is why you need a worker dyno. because web dyno will sleep when there is no web traffic.

junior bobcat
#

I already did a procfile, and a script

#

but it doesnt working

rapid citrus
#

it should work.

junior bobcat
#

yes but no XD

rapid citrus
#

try viewing the logs.

#

or try doing worker: node bot.js

junior bobcat
#

I tried with node bot.js too

rapid citrus
#

turn off your web dyno. you can do it in the website or in the cli.

junior bobcat
#

already done

rapid citrus
#

wait there is no worker dyno shown in your resources.

junior bobcat
#

yes, its what I want to add

#

-_-

rapid citrus
#

where did you put your procfile?

junior bobcat
#

at the root, why ?

rapid citrus
#

and also procfile doesn't have file extension.

junior bobcat
rapid citrus
#

are you using heroku cli or github? @junior bobcat

junior bobcat
#

github

rapid citrus
#

oh are you using auto deploy or are you sure you deployed your changes?

junior bobcat
#

I already do deploy by me

#

cause auto deploy doesnt work too XD

rapid citrus
#

my auto deploy actually works. oh you use git hub. send me link?

#

its not that I want your source code but just checking If you setup some thing correctly.

junior bobcat
#

yes np

rapid citrus
#

@junior bobcat

#

don't forget to push your changes.

junior bobcat
#

I pushed...

rapid citrus
#

why it is different from github.

junior bobcat
#

idk

rapid citrus
junior bobcat
#

idk why

rapid citrus
#

try using heroku cli

#

in your root folder
heroku login
heroku git:remote app-name
git push heroku master

#

by using heroku cli your source code can be close source too.

junior bobcat
#

ok thanks

rapid citrus
#

the app-name should be the name or your heroku app not the folder or github name

#

and don't forget to commit also.

#

before pushing.

earnest phoenix
#

What if I am doing the bot on my Phone?

quartz kindle
#

then give up and get a pc

earnest phoenix
#

I have pc

#

The bot is made but I need to do the pc work once I get my personal computer back.

#

Why does my bot keep shutting down on glitch

#

i have it pinged

vapid spoke
#

guys, it's my second time here, i want to add the "up-vote command" if you know what i mean, but.. i don't know how to add webhooks to a bot.
i don't know what i should tell you so.. i use discord.js if this is helpfull
sorry i'm italian, don't kill my english

rapid citrus
#

guys please stop using glitch. its literally glitchy.

earnest phoenix
#

@vapid spoke just use the /check?userId

#

use a webhook. save votes to a db. check your db.

#

@vapid spoke A webhook is basically you host a web server (same thing that is used to run a website). the webserver is listening for requests. Discordbots.org will send a request to your server telling you when somebody votes and you can record it.

#

you can check in #topgg-api and read the channel topic for a link to the docs.

#

for discord.js, there is a library that suppots webhooks. so you should look at that.

vapid spoke
#

yeah i know it

#

but

#

i mean

#

i should add a normal webhook in a channel

#

and put it in the code

#

and create a db (sqlite) with
bot
user
type
isWeekend
query?

#

"/check?userId" ? @earnest phoenix

bright spear
#

@vapid spoke it's not a discord webhook

vapid spoke
#

..?

bright spear
#

You don't make a webhook in discord

#

You need to receive the requests with your webserver

earnest phoenix
#

Look at what I do

#

One sec

vapid spoke
#

and what if i don't have it?

#

i should create a site

#

is this what you mean?

bright spear
#

The official lib can set it up for you

#

dblapi.js

#

DBL will just send a POST request with the data

vapid spoke
#

i'm sorry if i am stupid

#

but i don't understand it at 100%

earnest phoenix
#

Ok look

#

I use Python but it should be the same Logic

#

You're better off learning how http works

bright spear
#

Just use the dblapi.js lib

vapid spoke
#

mh

bright spear
#

That's probably the easiest way

vapid spoke
#

mh okay

bright spear
vapid spoke
#

so i should add that lib on my bot code

earnest phoenix
#

https://discordbots.org/api/bots/493045795445276682/check?userId={user.id}

You will see either Voted : 0 or Voted : 1

If Voted is 1, record it into the Database, and after 12 hours clear it

#

Else if Voted is 0 tell them they haven't voted

#

Same Logic I guess

vapid spoke
earnest phoenix
#

Yeah

#

But

#

Use their ID s

vapid spoke
#

obv

#

😂

earnest phoenix
#

alright

#

I couldn't understand it

#

Anywhere

vapid spoke
#

:C

earnest phoenix
#

So I just facilitated my own shit

vapid spoke
#

i think

earnest phoenix
#

Think?

vapid spoke
#

i'm going to try with that lib first

earnest phoenix
#

Yeah you should

#

I don't code in JS so idk what that holds

vapid spoke
#

ok

#

ty

earnest phoenix
#

Np

shell blade
#

How do I set my bot's online status on the website? I'm using dbl = new DBL(env.DBLTOKEN, bot), but it says it's offline.

bright spear
#

@shell blade it's not through the API, the bot just has to be in this server

shell blade
#

Then why isn't it working?

#

Oh, because it was kicked lol

vapid spoke
#

@bright spear i'm so noob

#

i can't make the lib work

#

i mean

#

when some1 vote the bot

#

nothing happened

#

sorry i'm italian xd

bright spear
#

@vapid spoke what's your code, also did you set the webhook info in your bot's edit page?

vapid spoke
#

i think

#

yes

#

const dbl = new DBL(yourDBLTokenHere, { webhookPort: 5000, webhookAuth: 'password' });
dbl.webhook.on('ready', hook => {
console.log(Webhook running at http://${hook.hostname}:${hook.port}${hook.path});
});

#

http://${hook.hostname}:${hook.port}${hook.path}

#

this is the url

#

right?

#

@bright spear

bright spear
#

no its not that word for word 🤦

#

those are variables

#

it should console.log the full url

vapid spoke
#

yeah

#

man

#

@bright spear

#

i know it

#

i'm not so stupid

#

i put the output in the edit page

bright spear
#

paste it here

#

exactly

#

does it have 0.0.0.0

vapid spoke
#

yeah

#

i

#

i do not host my bot at home

#

i mean

#

not my VPN

#

afk 1 sec

bright spear
#

change 0.0.0.0 to the ip or domain of the server

vapid spoke
#

like

#

i use glitch

#

so

#

or glitch:5000

#

?

#

@bright spear

vapid spoke
#

ooooooooooh

#

man

#

sure

#

i'm so stupid

#

why didn't I try this?

#

anyway

#

let's try

#

@bright spear when I click "test"

#

how can I see the result?

bright spear
#

it should send a request to that url

#

and it should run whatever is in your "on vote" part

#

but actually i dont think glitch will work on port 5000

#

try changing the port to 3000 in your code and the edit page

#

do you also use express in your project?

vapid spoke
#

sure

#

process.env.PORT

#

for the port

#

but

bitter sundial
vapid spoke
#

a spooky error is with us

#

but i saw that error yet

#

but it doesn't want to go away

#
app.get("/", (request, response) => {
    console.log(Date.now() + " Ping Received");
    response.sendStatus(200);
  });
  app.listen(3000);
  setInterval(() => {
    http.get(`http://${process.env.PROJECT_DOMAIN}.glitch.me/`);
  }, 280000);
#

why if i put "3000" in webhookPort this script gives an error?

topaz fjord
#

What's the error

amber stone
#

When I have an event listener, like when someone joins a server. I wanted it to have a server greeting but my bot greeted them and had 20 messages

topaz fjord
#

show code

amber stone
#
bot.on('guildMemberAdd', member => {
  const channel = member.guild.channels.find(ch => ch.name === 'welcome');
  if (!channel) return;
  channel.send(`Welcome to the server, ${member}`);
});
topaz fjord
#

are you sure you don't have multiple processes running

amber stone
#

I don't. Just hosting

#

It may be whatever I'm hosting it on

#

Only the event listeners do that

#

no other commands do that

topaz fjord
#

that's not what I mean, like did you start the bot multiple times

#

without cancelling the old process

amber stone
#

My computer that I use to run it is turned off and I use a hosting for it

inner jewel
#

what's the code around that

amber stone
#

for the other commands it works fine. Doesn't do it

#

only for event listeners

topaz fjord
#

do what natan said

amber stone
#

code around what?

topaz fjord
#

the code around the event

amber stone
#

I have the guildMemberAdd under that I have guildMemberRemove

inner jewel
#

send the code

#

dont describe it

#

hastebin/gh gist it

amber stone
#

Like the same thing with guildMemberRemove

#

Instead of guildMemberAdd

inner jewel
#

send the code

amber stone
inner jewel
#

the whole file

amber stone
#

I don't have it I'm on my other computer and I also gtg

vapid spoke
#

@topaz fjord oh ehm

#

the error is

#

'events.js:183

      throw er; // Unhandled 'error' event

      ^


Error: listen EADDRINUSE :::3000

    at Server.setupListenHandle [as _listen2] (net.js:1360:14)

    at listenInCluster (net.js:1401:12)

    at Server.listen (net.js:1485:7)

    at Function.listen (/rbd/pnpm-volume/36c952a9-269e-4a19-9078-b7c9ed1adc6c/node_modules/.registry.npmjs.org/express/4.16.4/node_modules/express/lib/application.js:618:24)

at Client.client.on (/app/server.js:36:7)

    at emitNone (events.js:111:20)

    at Client.emit (events.js:208:7)

    at WebSocketConnection.triggerReady (/rbd/pnpm-volume/36c952a9-269e-4a19-9078-b7c9ed1adc6c/node_modules/.registry.npmjs.org/discord.js/11.4.2/node_modules/discord.js/src/client/websocket/WebSocketConnection.js:125:17)

    at WebSocketConnection.checkIfReady (/rbd/pnpm-volume/36c952a9-269e-4a19-9078-b7c9ed1adc6c/node_modules/.registry.npmjs.org/discord.js/11.4.2/node_modules/discord.js/src/client/websocket/WebSocketConnection.js:141:61)

    at GuildCreateHandler.handle (/rbd/pnpm-volume/36c952a9-269e-4a19-9078-b7c9ed1adc6c/node_modules/.registry.npmjs.org/discord.js/11.4.2/node_modules/discord.js/src/client/websocket/packets/handlers/GuildCreate.js:13:31)
#

ohno

#

xd

topaz fjord
#

some service is using port 3000

vapid spoke
#

wait a sec

#

@topaz fjord yeah

#

wait

#
dbl.webhook.on('ready', hook => {
  console.log(`Webhook running at http://${hook.hostname}:${hook.port}${hook.path}`);
});
dbl.webhook.on('vote', vote => {
  console.log(`User with ID ${vote.user} just voted!`);
});```
#

this

#

and

#
app.get("/", (request, response) => {
    console.log(Date.now() + " Ping Received");
    response.sendStatus(200);
  });
  app.listen(3000);
  setInterval(() => {
    http.get(`http://${process.env.PROJECT_DOMAIN}.glitch.me/`);
  }, 280000);```
#

this

topaz fjord
#

you can't listen on port 3000 since the dbl webhook is using it

vapid spoke
#

so..

#

how?

#

i mean

#

the second script

#

it is

#

idk how to say it

#

i'm italian

#

sorry

topaz fjord
#

ok

vapid spoke
#

it's important

#

while the first is for the upvote

topaz fjord
#

the second script can use port 3000

#

since the first script is using it

vapid spoke
#

you know if uptime robot works without the second script?

#

i should try

night imp
#

It doesn’t

#

If you want to work with uptime

#

Go into the libraries source code and listen for /

vapid spoke
#

..?

#

i use glitch

#

so uptime is required

#

without it the bot will go off

#

but if I use the second script

#

i can't use the first

forest hawk
#

Hi

#

Can u help me out with a problem ?

#

Is there anyone ?

hollow fulcrum
#

Whats your problem

mild quarry
#

For some reason, every command that I run that uses an async def commandname isn't working. on_message is working though, and every other type of on_ blahblah is working fine. I noticed that earlier today and yesterday, all of the commands (including the ones where I set the command name) were sending out five times. Idk if this is a server glitch or something on my part lol

earnest phoenix
#

I schearching a code for a music bot

#

pls

#

@earnest phoenix you can always try the website

#

for bots

frigid thistle
#

I'm making a DBL api wrapper

topaz fjord
#

ok

#

but it probs won't overtake the official one

marble elm
knotty steeple
#

is markdown supported

marble elm
#

¯_(ツ)_/¯

mint cradle
#

Where u do this

#

On what site

#

On DBL

#

?

#

react, I have busy

marble elm
#

i have much go

mint cradle
#

DBL yes or no?

marble elm
#

i have not sure

mint cradle
#

...

#

Okay, if u are not sure on which website u are

#

And don't have that knowledge

#

Why u try to make a bot

marble elm
#

i have a bot in 800 server thank you very much

mint cradle
#

And still don't know how to see what website ur on?

#

Congrats.

marble elm
#

i can

mint cradle
#

Just say then...

marble elm
#

but it should be common sense to know what website im on

earnest phoenix
#

it can't

marble elm
#

if you cant process what discord we are in i have no hope

mint cradle
#

Where u do this
On what site
On DBL
?

#

That is a citate

earnest phoenix
#

because you didn't even give us information on what website your on @marble elm

mint cradle
#

I already asked if it was DBL.

#

Indeed... I am just trying to help...

#

If u just answer

#

i CAN help

earnest phoenix
#

you just said it didn't work

marble elm
#

its clearly on DBL why would i come here to ask about another website?

mint cradle
#

Because creating a bot isn't about DBL?

earnest phoenix
#

idk

#

when he said it was dbl

marble elm
#

exactly

#

hush

earnest phoenix
#

you didn't respond

marble elm
#

because its clearly on DBL

#

i wont come here and ask about porn hub

mint cradle
#

Yes yes, now shus

#

monospace

marble elm
#

How can i make < and > show in a paragraph?

mint cradle
#
`monospace`
#

Markdown is a lightweight markup language with plain text formatting syntax. It is designed so that it can be converted to HTML and many other formats using a tool by the same name. Markdown is often used to format readme files, for writing messages in online discussion forum...

#

Where u typed?

#

I mean, what's the complete text u use.

marble elm
#

there

mint cradle
#

U already tried that monospace
because ur ` seems very weird, idk but it's like almost horizontal

vapid spoke
#

wtf is happening

mint cradle
#

Nothing.

#

Well, I am helping someone who didn't want to answer the questions I needed to help him.

vapid spoke
#

what site? idk

mint cradle
#

But now he does.

#

So I can help him.

vapid spoke
#

xD

sick cloud
#

@marble elm markdown won't work since your already using HTML

mint cradle
#
`monospace`
#

Not true

vapid spoke
#

mh

sick cloud
#

very true

mint cradle
#

Oh yes, when u use bodu

#

But I have used style

#

And markdown

#

And it works

sick cloud
#

the website processes one or the other

mint cradle
#

That's why I wanted the text.

sick cloud
#

you use markdown or you use html

mint cradle
#

Yes, you are right.

#

Depends on where u have the html.

#

And what html

sick cloud
#

no

mint cradle
#

Yes.

sick cloud
#

it can only do one or the other

#

if you put a style tag then markdown it'll only use the style and not the markdown

mint cradle
#

In fact it does both, but my html doesn't affect my writing

#

But that's what I mean with it can be both

#

So it rlly depends on what html

#

Because I use style just for the background

topaz fjord
#

whats the best way to avoid creating new listeners on a recursive function call

strange spear
#

@fossil oxide and @bitter sundial my bot is going offline

#

did u check it?

knotty steeple
strange spear
#

oh come on

knotty steeple
#

why are you pinging web admins

strange spear
#

because my bot is on applying

knotty steeple
#
  1. probably a mute (you dont ping web admins for this shit)
  2. wrong channel
  3. be patient
#
  1. too bad if you bot is offline it will be declined
#

get a host

strange spear
#

i know

knotty steeple
#

then do it?

strange spear
#

why are all telling me get a host

#

what is tht?

knotty steeple
#

v p s

#

a quick google will tell you what a vps is

strange spear
#

oooh

#

intel upgrade

#

but tht s for websites @knotty steeple

knotty steeple
strange spear
#

yes ios

#

@knotty steeple

knotty steeple
#

you dont have to ping

strange spear
#

ok

knotty steeple
#

its not only for websites

#

its a virtual pc basically

#

buy 1

#

use it

earnest phoenix
#

look kid

strange spear
#

how does it work

earnest phoenix
#

you better stop pinging all the mods kid

strange spear
#

does it work even when the pc is offline?

earnest phoenix
#

yes kid

#

thats the point of a vps kid

strange spear
#

stop it oldman

#

ok

earnest phoenix
#

shush kid

strange spear
#

oldman

knotty steeple
earnest phoenix
#

ew

#

goanimate

knotty steeple
#

i just googled ok shut

earnest phoenix
#

fine sam

strange spear
#

maybe i ll buy it

#

ok

bright spear
#

It's just a computer somewhere owned by a company that's always on

knotty steeple
#

virtual machine/vm

#

on a machine

bright spear
#

Btw @strange spear how did you make your bot

vernal rivet
#

VM is probably a better option to do

sharp void
#

Don't you just love it when you leave your token in your code on github, i'm so dumb

earnest phoenix
#

a lot of people do that

#

at first

#

then they learn

vernal rivet
#

You could as try pm2 and nodemon, they will keep your bot for a bit longer than standard node.js if you make it in js

earnest phoenix
#

ooooof

#

nodemon

#

pm2 is best

vernal rivet
#

For beginners use nodemon, then try using pm2

quartz kindle
#

techincally they dont "keep your bot longer", they just auto-restart it when it fails lul

sharp void
#

I just put the key in another file and didn't add the file to the repo

vernal rivet
#

Technically, but it's better than nothing

earnest phoenix
#

why would you use nodemon over pm2

quartz kindle
#

i started by running node in a loop directly from the terminal lmao

earnest phoenix
#

nodemon is like running it normally

sharp void
#

I just used a AWS server

earnest phoenix
#

i'm using gcloud rn

quartz kindle
#

same

sharp void
#

if your a student definitely look at the student package by github, Theres some great free hosting there

quartz kindle
#

im too old to be a student

#

xD

bright spear
#

I'm a student but I don't think I have proof

sharp void
#

Do you have a school email?

fickle ibex
#

Let’s imagine I sharded my bot into 2 shards, will I still be able to send messages on a specific channel? will it work if the shard isn’t operating on the guild of the specific channel?

quartz kindle
#

i dont think so

#

but i might be wrong, havent sharded myself yet

earnest phoenix
#

tim

#

how many servers do you have

quartz kindle
#

like 400

earnest phoenix
#

cool

quartz kindle
#

i think you have to use broadcasteval to send functions between shards

knotty steeple
#

broadcasteval is for all shards

#

eval is 1 shard

quartz kindle
#

yeah but for example, send message from shard2 to guild in shard1

#

i think i saw some stuff before about using broadcasteval to find a specific guild across all shards

topaz fjord
#

^

#

That will all change soon though

#

once internal sharding gets released

#

internal sharding is p cool

quartz kindle
#

eris already has it doesnt it?

topaz fjord
#

I dont think so

#

Internal sharding treats all shards as one

#

is anyone elses shards spawning slowly

bright spear
#

I use d.js internal sharding

#

It's awesome

#

Feels like it's not sharded

earnest phoenix
#

is it just v12 with cool shit

topaz fjord
#

yes

earnest phoenix
#

o

#

lemme shard my 26 guild bot

#

10 shards rite

#

is skysilk oversold and laggy

knotty steeple
#

no?

#

i have used it its good

novel oasis
#

G

sick cloud
#
guildWebhook.send({ embeds: [embed] });```
why is this erroring at `.send`
```16|youtube  | (node:27327) UnhandledPromiseRejectionWarning: TypeError: Right-hand side of 'instanceof' is not an object```
earnest phoenix
#

I keep getting the error, Command raised an exception: TypeError: '<' not supported between instances of 'int' and 'str'. I cannot figure out wtf is wrong. My discord.py code is:

    # Reading so I can add without adding 2 things to the JSON
    with open("json/giveaway.json", "r") as file:
        things = json.load(file);
    # Generate a giveaway ID
    givid = random.randint(100000, 999999);
    # Create new key-value pairs
    # Giveaway
    # Check if the guild is there already
    if ctx.guild.id in things["guild"]:
        pass;
    else:
        things["guild"][ctx.guild.id] = {};
    things["guild"][ctx.guild.id][givid] = {};
    things["guild"][ctx.guild.id][givid]["msgid"] = ctx.message.id;
    things["message"][ctx.message.id] = {};
    things["message"][ctx.message.id]["giveawayid"] = givid;
    things["message"][ctx.message.id]["users"] = [];
    things["message"][ctx.message.id]["guild"] = ctx.guild.id;
    things["message"][ctx.message.id]["creator"] = ctx.message.author.id;
    # Writing to the file
    with open("json/giveaway.json", "r+") as test:
        # Pretty print please please please
        json.dump(things, test, sort_keys = True, indent = 4);
#

Please don't judge for semicolons

topaz fjord
#

@sick cloud why is it [embed]

earnest phoenix
#

webhooks take array of embeds

queen sentinel
#

@sick cloud I have an issue with your nickname

sick cloud
#

@queen sentinel why do you

#

@topaz fjord webhooks only take an array of embeds apparently

queen sentinel
#

because

sick cloud
queen sentinel
#

Xig is not best mod

#

best mod is obciously Nik or something

sick cloud
#

hows this

topaz fjord
#

@sick cloud I send mine as regular

sick cloud
#

how?

#

i sent it as embed: obj and embeds: [obj], both failed

#

they send the same error

topaz fjord
#

@sick cloud I do it like this

#
// bot.js
this.guildWebhook = new WebhookClient(this.config.webguild, this.config.webtoken);

// guildCreate.js
this.client.guildWebhook.send({ embed });
sick cloud
#

okay

#

i make it like this

const { WebhookClient } = require('discord.js');
let webhook_url = 'url';
const guildWebhook = new WebhookClient(webhook_url.split('/').slice(5)[0], webhook_url.split('/').slice(5)[1]);|
topaz fjord
#

Tony ignore everything I just said

sick cloud
#

ok

late hill
#

All I did to shard

#

Was add maxShards: 2

#

So

#

<.<

#

It's working

#

.>

topaz fjord
#

if you have guild logs you might run into an error

late hill
#

I do

#

Still working

#

🤷

topaz fjord
#

bc the guild might be on another shard

late hill
#

oh

#

I don't

topaz fjord
#

thats what I ran into

late hill
#

I use webhook

topaz fjord
#

ye I recently switched to webhook aswell

late hill
#

👍

topaz fjord
#

@sick cloud in master, embeds must be sent like this for webhooks this.client.guildWebhook.send('message here', { embeds: [embed] });

#

if you don't want message here to appear just put an empty string

sick cloud
#

ohhh ok

#

so i can do this?

    guildWebhook.send("", { embeds: [{
        title: `Shard #${client.shard.id}/${client.shard.count} has launched`,
        fields: [
            { name: 'Servers', value: `${client.guilds.size}`, inline: true },
            { name: 'Users', value: `${client.guilds.map(g => g.memberCount).reduce((f, l) => f + l)}`, inline: true },
            { name: 'Channels', value: `${client.channels.size}`, inline: true }
        ]
    }] });
topaz fjord
#

yes

#

I need to restart mine to fix it but idk if people are listening to music

#

fuck

sick cloud
#

alright

#

also yea music suckss

topaz fjord
#

I want internal sharding to be merged and stable

#

(╯°□°)╯︵ ┻━┻

sick cloud
#

@topaz fjord same issue ..

topaz fjord
#

tf

earnest phoenix
#

*help

modern sable
#

actually i'm a hour late

#

eh whatever

rain kindle
#

Quick question, where can I get my own token?

tepid jasper
#

as in your user's token?

Open developer tools (ctrl+shift+i)
Go to network tab
click on some channel or server
click through the requests till you find one with an 'authorization' header in the request headers (I found one named 'science'), the value of that should be your token

#

not sure if that token at the bottom is the same woops lol, don't take a screenshot and send it to a server with hundreds of users

rain kindle
#

Okay! thankyou @tepid jasper

#

Actually, I have a lot of question rn. I'm super noob, is that ok if I ask a lot of questions here?

tepid jasper
#

is also a super noob, but doesn't see why that would be a problem

amber stone
#

When a member joins a guild or leaves or when an event happens my bot says the message about 30 times

#

idk why that happens

#

for my index.js

keen drift
#

oh god this is hard to read