#development

1 messages · Page 1536 of 1

opal plank
#

i wonder if i should try uploading a 4k gif here

quartz kindle
#

you exclude the folder name, not the path

opal plank
#

prob a really bad idea

cinder patio
#

ooh it only accepts folder names

opal plank
#

run it twice

#

one without the dashbaord

#

and then one inside of it

#

but excluding blockly

cinder patio
opal plank
#

idk if its additive, but it should be

quartz kindle
#

is it a multipurpose bot?

cinder patio
#

nope

opal plank
#

looks liek a dashboard

quartz kindle
#

deshbord

opal plank
#

deshberd

quartz kindle
#

dishbeard

cinder patio
#

It was for mafia games

opal plank
#

dishbard

quartz kindle
#

disbord

cinder patio
#

discord

quartz kindle
#

tada

#

we went full circle

opal plank
quartz kindle
#

what if

#

we start charging people

#

based on that

tired panther
#

lol

quartz kindle
#

how much does a hello world cost? let me check

opal plank
#

what about we compare our pp size with commits(excluding shit people who commit every2 mintues)

pale vessel
#

Oh my

#

Snake cases

quartz kindle
pale vessel
#

I'm blind

quartz kindle
cinder patio
#

20 bucks for a hello world? broken

pale vessel
#

wait nm

quartz kindle
#

this costs 19 bucks

opal plank
opal plank
#

u owe me $19

tired panther
#
start scc
PS C:\Users\shahn\Downloads\scc-2.13.0-i386-pc-windows> scc
scc : The term 'scc' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the
spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:1
+ scc
+ ~~~
    + CategoryInfo          : ObjectNotFound: (scc:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException


Suggestion [3,General]: The command scc was not found, but does exist in the current location. Windows PowerShell does not load commands from the current location by default. If you trust this command, instead type: ".\scc". See "get-help about_Command_Precedence" for more details.
``` giving me a error
quartz kindle
pale vessel
#

lmao

earnest phoenix
#

How much does a program crasher even cost

pale vessel
#

start?

#

Just use scc

earnest phoenix
#
for (;;) {}```
quartz kindle
#

this thing

#

its literally

tired panther
#

erwins idea xD

quartz kindle
#

20 bucks per line of code

#

wtf lmao

earnest phoenix
#

Ah yes

tired panther
#

lol

opal plank
#

i clearly shown it in the gif

pale vessel
#

Silly erwin made a mistake

opal plank
#

i did not

#

it works

#

imagine watching the gif

opal plank
pale vessel
#

You just have to code inefficiently to get more money

#

TIL

opal plank
#

Comments™️

quartz kindle
#

ascii art inside the code

#

copy paste third party modules and pretend you wrote them

opal plank
#

that'd give me a reason to come to this chat, i'd blately do what newbies do```ts
client.on('message' , async (message) => {
if(message.content === 'a') {}
});
client.on('message' , async (message) => {
if(message.content === 'b') {}
});
client.on('message' , async (message) => {
if(message.content === 'c') {}
});
client.on('message' , async (message) => {
if(message.content === 'd') {}
});

quartz kindle
#

xDDDDDDDDD

earnest phoenix
#

🗿 Write a fizz buzz program but manually with console.log(), every line 20 bucks

#

#winning

opal plank
#

actually, i forgot to add the super necessary async there in the function to increase the length[

tired panther
opal plank
#

there we go, now its d.js friendly

#

async functions

#

for no reason whatsoever

tired panther
opal plank
#

actually

#

big brain

#

transpile that from ts

#

and target es3

tired panther
#

lol

opal plank
#

ts legit gonna implement async by itself

earnest phoenix
#

Bro TS is ballin

quartz kindle
earnest phoenix
#

Wtf

opal plank
#
client
  .on(
  'message' ,
   (message) => 
    {
      if(message.content === 'a')
        {
          message
           .reply("b")
        }
    }
);
``` i fixed it
earnest phoenix
#

I swear some people's code actually looks like that in d.js support channels

opal plank
#

linted it does look like that, but only when you chain them

earnest phoenix
#

it's either a giant sausage or it's travelling around the world

opal plank
#

but that extra line is 19$ mmulu

quartz kindle
opal plank
#

i just edited it

quartz kindle
#

see mine

opal plank
#

thats like, 60 bucks more than yours

#

fuck

#

FUCK

#

OH

#

FUCK

quartz kindle
#

:^)

opal plank
#

aight fine

#

you asked for it

earnest phoenix
#

🗿 Eyes about to go undefined

#

Behold

quartz kindle
grizzled raven
#

better than having to scroll horizontally bigbrain

quartz kindle
#

the arrow function has to be on the same line but other than that its valid code

grizzled raven
#

wait let me make that worse

tired panther
#

lol

#

maybe add some useless comments

quartz kindle
#

oh i know what to do :^)

tired panther
#
People wanted comments. Here you go :)
opal plank
tired panther
#

lol

quartz kindle
#

LOL

earnest phoenix
#

Eyes go null

#

🗿

quartz kindle
#

does that run tho?

opal plank
#

im not sure xD

#

actually

#

lets see

quartz kindle
#

it has to run

opal plank
#

let me try eval()

quartz kindle
#

i mean

#

at this point just jsfuck it

cinder patio
#
[
"message"
]
.toString
();

extra lines just for "message" pogey

earnest phoenix
#

Easy bucks

mellow kelp
#

jsfuck ez

grizzled raven
#
client
.on
(
"m"
+
"e"
+
"s"
+
"s"
+
"a"
+
"g"
+
"e",
  (
    m
  )
   => 
    {
      if
      (
        m
        .content
        ===
        "a"
      )
        {
          message
          .reply
          (
            "b"
          )
        }
    }
);
pale vessel
#

[
"m" +
"e" -
"s" +
"a" +
"g" +
"e"

#

A

earnest phoenix
#

What the fuck

pale vessel
#

mesage

tired panther
#

lol

grizzled raven
#

mesage

quartz kindle
#

nice one

#

xDDD

grizzled raven
#

we need more +

quartz kindle
#

ok so how bad can this get without making it jsfuck, although i feel like we will eventually reinvent jsfuck if we continue like this

slender thistle
#

JS2Fuck

pale vessel
slender thistle
#

JSFuckU would be more appropriate imo

opal plank
#

@quartz kindle it does ```ts
eval(
`
const Discord = require('discord.js');
const client = new Discord.Client('lul');
c
l
i
e
n
t

.
o
n
(

'
m
e
s
s
a
g
e
'

,

(
m
e
s
s
a
g
e
)

=>

{

i
f
(
m
e
s
s
a
g
e
.
c
o
n
t
e
n
t

===

'
a
'
)

{

m
e
s
s
a
g
e

.
r
e
p
l
y
(
"
b
"
)

}

}

)
`
.split('\n')
.join('')
);

THIS runs
cinder patio
#

Instead of m.content:

m
[
"c" 
+ 
"o"
+ 
"n" 
+
"t" 
+ 
"e" 
+
"n" 
+
"t"
]
pale vessel
#

What the fuck

slender thistle
#

istg

opal plank
#

check how much money thats worth tim

earnest phoenix
#
client
.
on
(
[
'm',
'e',
's',
's',
'a',
'g',
'e'
]
.
join
(
''
)
),
async (
message
) => {
if
(
message
.
content === 'a')
{
return message
.
reply
(
'b'
);
}
}
);```
mellow kelp
#
client
.on
(
(
"m"
+
"e"
+
"s"
+
"s"
+
"a"
+
"g"
+
"e"
)
,
  (
    mmessage
  )
   => 
    {
      if
      (
        message
        .content
         .toString()
        ===
        "a"
      )
        {
          Message
            .prototype
            .reply
            .call
              (
                message,
                "b"
              )
        }
    }
);
earnest phoenix
#

🗿

grizzled raven
#
client
[
"o"
+
"n"
+
""
]
(
"m"
+
"e"
+
"s"
+
"s"
+
"a"
+
"g"
+
"e",
  (
    m
  )
   => 
    {
      if
      (
        m
        [
          "c"
          +
          "o"
          +
          "n"
          +
          "t"
          +
          "e"
          +
          "n"
          +
          "t"
        ]
        ===
        "a"
      )
        {
          m
          [
            "r"
            +
            "e"
            +
            "p"
            +
            "l"
            +
            "y"
          ]
          (
            "b"
          )
        }
    }
);
opal plank
#

mine is bigger than all urs combined lmao

cinder patio
#

use [] to access properties

grizzled raven
#

there we go

opal plank
#

and i took a couple steps too far

grizzled raven
#

but new lines won't work will they

opal plank
#

hence why i joined them

grizzled raven
#

oh nvm

earnest phoenix
#

We're speedrunning yandere simulator's code in a more pog fashion

opal plank
#

but that only increases the amount of lines

#

which is good

#

let me check how much i'd get paid for that piece of garbage

earnest phoenix
#

Imagine

#

$1000

opal plank
pale vessel
#

Complexity 0

opal plank
#

for whats basically ts client.on('message' , async (message) => { if(message.content === 'a') {} }); this

grizzled raven
#

this code but you get payed for words and not lines

opal plank
#

nono

#

you get paid by lines

#

clearly

#

i just

#

wel...

#

did a thing

grizzled raven
#

code but you're payed by spaces

opal plank
#

oh, also, 1.2 months of development

mellow kelp
#
client[           'on'                ](     'message'         ,        async    message        => {

if     (       message[      'content'      ]     ===        'a'       )   {

      message[        'reply'        ](          'b'        );

}



}      )     ;
quartz kindle
opal plank
#

not nearly as close as my fuckery

#

tim legit drawing in VSC

quartz kindle
#

xD

opal plank
opal plank
#

no it isnt

mellow kelp
#

at this rate vscode is gonna become the next paint

quartz kindle
#

no evaluation

opal plank
#

you asked me if it works

#

it does

quartz kindle
#

x

#

D

opal plank
#

i proved it does

tired panther
#

Dx

opal plank
#

i actually ran that on vm

zenith terrace
opal plank
#

no compile errors

#

therefore it works

tired panther
#

imagine evaling your discord bot in your test bot

slender thistle
#

What the fuck are you all on

zenith terrace
#

development channel is a nightmare now

opal plank
quartz kindle
#

i used to eval js files before i knew how to use require

slender thistle
#

I can't stop laughing

quartz kindle
#

i still have the old code i think

#

let me see

tired panther
#

lol

mellow kelp
#
const fs = require('fs');

const utils = fs.readFileSync('./utils.js').toString();

eval(utils);
opal plank
mellow kelp
#

indeed

slender thistle
#

);

opal plank
#

tim was testing how much each line of code is worth

#

and then shit spiraled from there

slender thistle
#

LMFAO

opal plank
#

how much can you make, in terms of money, with just this?

#

i wonder if tim will be mad if i convert each char to binary and then split them by new lines

#

@quartz kindle is THAT cheating?

cinder patio
#

I think using .split and .join to change the code is cheating

opal plank
#

its technically the same code, no?

quartz kindle
opal plank
#

i would like to slap you with a chair rn tim

#

var

#

lowercase constructor name

slender thistle
#

LMFAO Tim can I gently murder you

quartz kindle
#

this is legit my code from 2018

opal plank
#

this shit has everything i love about js

pale vessel
#

LMAO

mellow kelp
#

looking at old, shit code is always nostalgic isn't it

opal plank
#

funnily enough though, tim didnt use embed builder back then

#

proud of u tim

#

i guess that mess even outs by the fact that he didnt use builders

quartz kindle
#

i dont think i ever used it

opal plank
#

thank god

quartz kindle
opal plank
#

oh

#

my

#

fucking

pale vessel
#

Nice

opal plank
#

god

pale vessel
#

That \r\n flushcrushed

slender thistle
#

HAHAHA

mellow kelp
#

AAA

quartz kindle
#

xDDD

mellow kelp
#

static changelogs KEKW

opal plank
#

jesus christ

quartz kindle
#

i still have static changelogs, but now they are in a json file

opal plank
pale vessel
opal plank
#

NO

pale vessel
#

I have it in txt

opal plank
#

staph

quartz kindle
#

works too

opal plank
#

use githubo

pale vessel
#

txt best

opal plank
#

it has changelogs for that reason

quartz kindle
#

my bot is not even on github

#

i only started using github in 2019

opal plank
#

push commit then simply query commit history

cinder patio
#

and also bot users don't really understand what's going on in github lol

#

if it's a lib sure

mellow kelp
#

i used to upload bot files manually to github, dark times

quartz kindle
#

i have an even older version of my bot

pale vessel
#

Oh no

quartz kindle
pale vessel
#

////////////////////////////////////

opal plank
#

unhandled rejection listener

#

reeeee

pale vessel
#

I still do this but js // // // // Text // // //

mellow kelp
#

wait what

opal plank
#

plebs

pale vessel
#

Not even /**/

quartz kindle
mellow kelp
#

did the bot actually run on a browser

opal plank
mellow kelp
#

base64 font src KEKW

quartz kindle
opal plank
#

imagine not wrapping your comments with fancy boxes

#

plebs

quartz kindle
#

very fancey

#

do it for me

opal plank
#

will do on your lib

grizzled raven
#

i wrap my stuff in files wearyaf

opal plank
#

just screech at me when you finish it

grizzled raven
#

tim remember that eval code from discord.is-light

quartz kindle
quartz kindle
#

it still exists

#

not built in anymore tho

tribal siren
#

very interesting

slender thistle
#

What the everlasting spirit's genuine happiness' fuck

grizzled raven
#

shivaco

#

i think you need sleep again

tribal siren
#

me too tbh

slender thistle
#

Go sleep

quartz kindle
#

uhh, send help

grizzled raven
#
try { let _TEST_ = eval(`(()=>{return ${f}})()`); return _TEST_ && typeof _TEST_ === "object" && typeof _TEST_.then === "function" ? {Promise:await _TEST_} : _TEST_ } catch(e) {
                try { return await eval(`(async()=>{return ${f}})()`); } catch(e) {
                    try { let _TEST_ = eval(`(()=>{${f}})()`); return _TEST_ && typeof _TEST_ === "object" && typeof _TEST_.then === "function" ? {Promise:await _TEST_} : _TEST_ } catch(e) {
                        try { return await eval(`(async() => {${f}})()`); } catch(e) {
                            return e;
            }}}}
#

i'm not even try guess what that does lmao

quartz kindle
grizzled raven
#

codes not even that bad it's just that how it gets formatted on mobile is the funny part LOL

quartz kindle
#

xDD

#

im not on mobile but i can imagine

grizzled raven
#

the 4 }}}} at the bottom LOL

slender thistle
#

Kek

earnest phoenix
quartz kindle
#

lmfao

#

this version didnt support evaling code with comments

#

precisely because of this compact version

#

the comment would comment part of the eval code

tall quiver
#

Anyone's can help me i am not able to import local codes from another directory like i want to import python class from a file so write first from then folder name python . File name python1 then import calss name python so its from python.python1 import python but its not working someone suggested to ise pylance in vs then also its not working and of my freind its working why so pls help and ping me when you get solution

slender thistle
#

Commas, periods. Thank you

pale vessel
#

Thank you.*

slender thistle
#

Flazepe, would you be so kind as to keeping quiet as a representative of the JujuShit gang?

pale vessel
#

N OMEGALUL

slender thistle
#

NOMEGALUL.*

#

Fuckm

solemn latch
#

anyone got any ideas why my reverse proxy doesnt work pandasad still get the default nginx site even with it disabled.

server {
        listen 80;

    server_name woo.pics;

        location / {
            proxy_pass http://localhost:3001;
  }
}
lusty quest
solemn latch
#

set root?

lyric mountain
#

like, iirc the default root path is /var/www/html

solemn latch
#

ohhhhhhhh

lyric mountain
#

so your site must be inside html folder

opal plank
#

Woo still trying our challenge to add newlines

lusty quest
#
server {
    listen 80;
    server_name your.domain;
    location / {
        proxy_pass http://yourip:port;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
     }
}

``` i have this one for my /etc/nginx/sites-aviable/default
#

and it works for me

earnest phoenix
#

@quartz kindle Would this be better than that eval thing

let output;
try {
  output = eval(f);
  if (output instanceof Promise) output = await output;
} catch {
  try {
    output = await eval(`(async () => { return ${f} })()`);
    } catch {
      try {
        output = await eval(`(async () => ${f})()`);
      } catch (err) {
        output = err;
      }
    }
  }
}``` ![KEKW](https://cdn.discordapp.com/emojis/727825308404940800.webp?size=128 "KEKW")
lyric mountain
#

so http://woo.pics/ will point to /var/www/html folder

lusty quest
#

you dont have to point it to var/www/html

lyric mountain
#

like, iirc the default root path is /var/www/html
^

lusty quest
#

i dont point it to root and it works

lyric mountain
#

default

#

if you don't set one it'll point there

lusty quest
#

well yea

#

but nginx works a bit different than apache2. nginx uses the sites-aviable folder to determine where to route stuff

lyric mountain
#

sites-enabled actually

#

available are site configs that you can enable but aren't

#

normally you make a symlink on the other folder to enable it

lusty quest
#

i know

lyric mountain
#

btw, is your code above about websockets?

lusty quest
#

i use it to proxy to my Express server

solemn latch
#

i have no idea why it doesnt work, no idea why the default nginx site even still comes up, i have it removed from sites-enabled.

lyric mountain
#

did u do systemctl restart nginx?

quartz kindle
solemn latch
#

yeah

lyric mountain
#

weird

earnest phoenix
#

Yep

quartz kindle
#

it supports some stuff, but not all of my eval

lyric mountain
#

what happens if u do nginx -t?

#

does it says "All ok"?

solemn latch
#

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

lyric mountain
#

weird

solemn latch
#

i have nginx reverse proxying fine on my other vps

lyric mountain
#

try going root then doing find -name "default" to see if there's another default page somewhere

#

idk actually, I'm out of ideas

quartz kindle
#

did you make any changes to nginx.conf?

solemn latch
#

i havent

quartz kindle
#

check the contents of nginx.conf

#

it should have include sites-enabled/*

solemn latch
#

it does

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
quartz kindle
#

ye looks fine

#

and you deleted the file from sites-enabled?

solemn latch
quartz kindle
#

show the contents of that file

solemn latch
#
root /var/www/woo.pics;
server {
        listen 80;

        access_log /var/log/nginx/reverse-access.log;
        error_log /var/log/nginx/reverse-error.log;

    server_name woo.pics www.woo.pics;

        location / {
                    proxy_pass http://127.0.0.1:3001;
  }
}
quartz kindle
#

root should be inside server

solemn latch
#

oop

quartz kindle
#

and you restarted nginx?

solemn latch
#

yep, still default nginx site

#

even with root in server

lusty quest
#

make a file called default in your sites-enabled folder and redirect it somewhere with your code

quartz kindle
#

try renaming woo.pics

#

to woo.pics.conf

solemn latch
#

cloudflare doesnt mess up reverse proxies right?
i know my other site reverse proxies fine with cloudflare on.

quartz kindle
#

it shouldnt

lusty quest
#

nope

quartz kindle
#

if it still doesnt work

solemn latch
#

doesnt

quartz kindle
#

try putting your config directly inside nginx.conf

#

inside the main http block

lusty quest
#

did you use any SSL mode on Cloudflare? had some issues until i made some changes

#

still have Flexible SSL enabled but it will now also redirect correctly

solemn latch
#

site_name _; means any connection right?

#

site_name _;

#

damn markdown

lusty quest
#

it should be the sub domain you want to redirect, for wildcards i think * is correct

solemn latch
#

fails the test when using *

lusty quest
#

maybe try this code in your sites-enabled file server { listen 80; server_name your.domain; location / { proxy_pass http://yourip:port; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } }

#

worked for me

#

had also issues that i get the nginx default page all the time until ive made some ssl stuff since i have SSL enabled everywhere

solemn latch
#

im on flexible on cloudflare

lusty quest
#

yea i have it also set to flexible

zealous dew
#

how to using top-gg/sdk webhook with multiple shard bot

solemn latch
#

use it in your sharding manager

zealous dew
#

use where i put sharding manager ?

solemn latch
#

yeah

zealous dew
#

But how can I send message to user when they vote

#

Since in sharding manager there is not client for me to get user and DMs them

lyric mountain
#

sharding manager is a client actually

#

I mean, not in the literal case

tender fern
#

Hey

lyric mountain
#

Arnold

pale vessel
#

Nostalgic

zealous dew
#
require('./config/alias');
const { ShardingManager } = require('kurasuta');
const { join } = require('path');
const { token } = require('cat-env');
const PhoenixClient = require('cat-akairo/PhoenixClient');
const { isMaster } = require('cluster');

try {
    const shard = new ShardingManager(join(__dirname, 'bot.js'), {
        token: token,
        client: PhoenixClient,
        respawn: true,
        retry: true,
        clientOptions: {
            retryLimit: 3,
        },
    });
    shard.on('shardReady', (shard) => {
        console.log(`Created shard ${shard}`);
    });
    shard.spawn();
} catch (e) {
    console.log(e);
}
#

Like this how can I get specific user info @lyric mountain

lyric mountain
#

nvm

zealous dew
#

wut

lyric mountain
#

I never used kurasuta, can't help sorry

zealous dew
#

Just tell me what you have do in discord.js

weary widget
#

How does the channeltype work? I'm trying to make a channelinfo command and for some reason when i mention a channel in the command it says it cant change it into ChannelType

lyric mountain
zealous dew
#

But like I said how can we get user at ShardingManager file?

#

That link not give the solution

#

pika I am asking what you are doing with you or exact way doing it not a random document

solemn latch
#

@lusty quest @quartz kindle so uh, i found the issue... i uh, used the wrong ip in cloudflare.

#

dns settings pandasad

#

how in the world

lusty quest
#

well this is the classic i guess

lyric mountain
#

you just get the client from the one you've set in the shardingmanager

solemn latch
#

i spent all night

lyric mountain
#

PhoenixClient in this case

solemn latch
#

literally all night up till 2am

zealous dew
#

can you give some code out

#

console.log(shard.client.user.tag);

#

like this ?

pale vessel
#

shard.client.users.fetch(id)?

zealous dew
#

let me try

#

Cannot read property 'fetch' of undefined @pale vessel

fair axle
#

Which one is better? using json (as variable) or collections?

zealous dew
#

[Function: PhoenixClient] is shard.client

#

@fair axle I think discord.js collections built-in is better

#

that give you more method

fair axle
#

thanks

restive furnace
#

kurasuta is copy paste of eris-sharder btw

#

just instead of making eris client, they just did change it to creating djs client

glacial pagoda
#

How Do You Add a Gif To an Embed?

zealous dew
restive furnace
zealous dew
#

pika Can we do it ?

#

Cause I can only using client in shards not at shardManager

#

If I create webhook in bot.js that will create multiple webhook endpoint and block port

restive furnace
#

just create a master client in the master process and use client.api/built-in djs fns OR make request into create webhook msg endpoint

glacial pagoda
#

It Says Image

restive furnace
#

it does

glacial pagoda
#

Look Ill Try, Gimme a Sec

pale vessel
restive furnace
#

well i've been told so

#

by eris contributors

pale vessel
#

Apparently not

#

I've checked, and it's completely rewritten

#

in TS

#

It's only inspired

restive furnace
#

ah ok

pale vessel
#

I doubt Yukine would copy paste

restive furnace
#

but why does these even exists:
internal sharding > shardingmanager imo

pale vessel
#

For clustering

#

Internal sharder is just not an option when your bot gets massive

restive furnace
#

yeah, but i rather cluster my bot

#

manually

pale vessel
#

To each their own I guess

restive furnace
#

also, isn't it a bit inefficient to just spawn 1 shard per child/worker?

glacial pagoda
#

Its still loading

#

see it dont work

sacred aurora
#

the format is gifv?

glacial pagoda
#

How Do You Add a Gif To an Embed?

#

No

sacred aurora
#

message embed doesn't support it

#

Hm

glacial pagoda
#

Where do i put gifv

sacred aurora
#

gif works fine for me

glacial pagoda
#

Thats my code

sacred aurora
#

regular messages will do

pale vessel
#

Get the actual GIF

glacial pagoda
#

I did

#

and put it in image

pale vessel
#

Those only work if you send it

glacial pagoda
#

0-0

pale vessel
#

Since discord embeds it for you

glacial pagoda
#

so what do i do

rustic nova
zealous dew
#

So can anyone help me with my situation

glacial pagoda
#

Im really confused

#

i have the acuall gif

rustic nova
#

No

#

Upload the gif

#

To imgur

#

Then use that url

#

As you need the .gif url

zealous dew
#

How can I get user Information at where I put ShardingManager code

glacial pagoda
#

ok ill try

pale vessel
#

This should work

tired panther
zealous dew
tired panther
#

u have shard.js file , there should be the sharding manager

pale vessel
#

I'm sure there's one in the docs

tired panther
#

lol

pale vessel
#

and discordjs.guide

tired panther
#

@zealous dew

zealous dew
#

:( I can't go into the shard file to put that code

#

cause it will create multiple webhook endpoint

#

I am try to get client work at where Manager is

tired panther
#

u can do if(client.shard.ids.includes(0)) then execute

zealous dew
#

but don't know if can I do it

solemn latch
#

you mean you want to use broadcast and broadcasteval?

tired panther
solemn latch
tired panther
solemn latch
#

from the sounds of it, he wants to send a user a dm

zealous dew
#

Not broadcast and broadcasteval

#

Yes

solemn latch
#

using broadcast eval you can send a user a dm.

tired panther
tired panther
feral aspen
#

stupidness.

#

is this a thing? 😂

zealous dew
#

3k5 now

#

2 shard

feral aspen
#
return {
  //Command here
  //Command here
}
#

?

tired panther
feral aspen
#

That got me wondering! 😂

tired panther
#

u can do internal sharding @zealous dew

pale vessel
#

Yes that is a thing lulw

tired panther
#

in client options shards: "auto"

zealous dew
#
const PhoenixClient = require('cat-akairo/PhoenixClient');
const { isMaster } = require('cluster');
const express = require('express');
const Topgg = require('@top-gg/sdk');

try {
    const shard = new ShardingManager(join(__dirname, 'bot.js'), {
        token: token,
        client: PhoenixClient,
        respawn: true,
        retry: true,
        clientOptions: {
            retryLimit: 3,
        },
    });
    shard.on('shardReady', (shard) => {
        console.log(`Created shard ${shard}`);
    });
    const app = express();
    const webhook = new Topgg.Webhook('topggauth123');
    app.post('/dblwebhook', webhook.middleware(), (req, res) => {
        // this is not working
        shard.client.users.fetch(req.body.user.id)
    });
    app.listen(3000);
    shard.spawn();
} catch (e) {
    console.log(e);
}
#

look at this // this is not working

feral aspen
tired panther
tired panther
zealous dew
#

So how can I do that ?

tired panther
feral aspen
#

to send a message in the channel and in direct same time.

zealous dew
#

Did you try to tell me I check the id of shard if it is first shard init webhook at there ?

tired panther
solemn latch
#

and you need to return them both, or just send them? 🤔

feral aspen
#

Return them both

#

Doing an if statement, so I want to return them both.

tired panther
#

@zealous dew

const user = await (new Discord.Guild(client,{id: "the guild"})).members.fetch(message.author.id).catch(() => null);
pale vessel
#

What are you doing with the messages

tired panther
feral aspen
#

// I do blacklist command, it blacklists the user Send a message in the channel for success and dms the users that he gt blacklisted.

#

But I want to return them

balmy anchor
#

Yo
I'm currently makin' a music bot and I'm trying to make a *time left* timer for the song that's playing rn
Any help would be great thx 👍

tired panther
cedar birch
#

como gano creditos

feral aspen
#

I want to return

tired panther
#

reverse it lol

feral aspen
#

Ok

#

nvm

zealous dew
#

and where is the guild come from

tired panther
zealous dew
#

I am trying to send user DMs everytime user vote

zealous dew
#

So weird

tired panther
zealous dew
balmy anchor
#

wdym

tired panther
#

client.shard.broadcastEval( await client.users.fetch(${user.id}).send("balabak"))

zealous dew
tired panther
zealous dew
#

Ok

tired panther
zealous dew
#

Ah thanks you

pale vessel
#

But isn't that going to send the message in every shard?

#

and you can't use fetch like that

zealous dew
#

Oh wait

tired panther
pale vessel
#

Does the same

#

Still sends the message

sudden geyser
tired panther
pale vessel
#

It's not inside an async function, so nope I guess

#

hmm I c

tired panther
zealous dew
#

client.shard.broadcastEval( await client.users.fetch(${user.id}).send("balabak")) @@? this is in where we have client

#

But at where I am init webhook

#

there is no client

balmy anchor
#

Yo
I'm currently makin' a music bot and I'm trying to make a time left timer for the song that's playing rn
Any help would be great thx 👍
(using discord.js)

pale vessel
#

You have to use (await client.users.fetch(id)).send()

misty sigil
#

what is a torn write

tired panther
pale vessel
#

But still, do you want to send the same message on every shard?

tired panther
#

but the problem is when the users is in many shard it will send it in many servs

misty sigil
#

oh i see

zealous dew
#

pepesuydoan what you guild talking about

zealous dew
#

it start with client

#

where is client ?

tired panther
#

Just fetch the user in broadcast
then return the promise and reduce it and then send it @pale vessel

tired panther
#

lol my fault

#

did not slept for 38 hours lol xD

zealous dew
#
require('./config/alias');
const { ShardingManager } = require('kurasuta');
const { join } = require('path');
const { token } = require('cat-env');
const PhoenixClient = require('cat-akairo/PhoenixClient');
const { isMaster } = require('cluster');
const express = require('express');
const Topgg = require('@top-gg/sdk');

try {
    const shard = new ShardingManager(join(__dirname, 'bot.js'), {
        token: token,
        client: PhoenixClient,
        respawn: true,
        retry: true,
        clientOptions: {
            retryLimit: 3,
        },
    });
    shard.on('shardReady', (shard) => {
        console.log(`Created shard ${shard}`);
    });
    const app = express();
    const webhook = new Topgg.Webhook('topggauth123');
    app.post('/dblwebhook', webhook.middleware(), (req, res) => {
        // this is not working
        shard.client.users.fetch(req.body.user.id);
    });
    app.listen(3000);
    shard.spawn();
} catch (e) {
    console.log(e);
}
zealous dew
#

client.shard.broadcastEval where is client come ?

#

So where can I init webhhook

tired panther
#

wait sending u a code

zealous dew
#

And how can I send DMs to user when they vote my bot

#

Ok

tired panther
#
const promises = [client.shard.fetchClientValues(`users.fetch("${the user id as variable}")`),
        ];

        await Promise.all(promises)
            .then(results => {
         let user = results[0][0] ||results[0][1]  || results[0][2] 
user.send("balsa")})
``` @zealous dew  u have to change it a little bit
#

wait forgot du reduce

zealous dew
#

No

#

Let me describle again

#

I am trying to init webhook and send DMs to user when they vote my bot

tired panther
#

u want to send a message when the user votes

zealous dew
#

yes

#

where is my webhook code bro

tired panther
#

@zealous dew there is much easier solution use discord.js-light

zealous dew
#

where I need to put that code

tired panther
#

see so easy, with djs-light

#

@zealous dew

zealous dew
#

Where I am init webhook

#

in index.js or bot.js ?

tired panther
zealous dew
tired panther
#

@zealous dew meant irony

#

auto spell checker uff

zealous dew
lusty quest
#

he uses a non standard Sharding Manager, i dont know if he will even work with d.js-light

lusty quest
#

nope

tired panther
#

kurasta lol

lusty quest
#

it builds on it

tired panther
#

uff

zealous dew
#

Wait

tired panther
#

then ask them for support lol

#

and debloat your code from other libaries, they are not better xD

#

okay some are good but the most are just copies
with a feature extra

lusty quest
#

if i understand it correctly each shard runs its own client, and with isMaster you can have stuff run of the master node, so the only issue you have is getting the client right?

#

kurasata makes managing sharding easyer

tired panther
lusty quest
#

lets rephrase it, the shard file is run on each shard itself

#

this is not the case with the normal shardmanager iirc

tired panther
#

no he made it wrong

tired panther
lusty quest
#

i know

lusty quest
#

but karasuta runs the sharding file on each client

#

if i get it right you can reference it with this.client

#

inside a cluster

zealous dew
#

but if we create webhook in cluster

tired panther
zealous dew
#

It will create multiple webhook

lusty quest
tired panther
tired panther
tired panther
lusty quest
#

it makes sense at some point. you can define finer if you want to run stuff from the master

zealous dew
#

no

#

vscode

lusty quest
#

looks like VSC with Material icons

zealous dew
#

Yes monokai theme

tired panther
tired panther
zealous dew
#

So do I need to change it into discord.js

#

? it would easier for you ?

lusty quest
#

ask on the karasuta discord for some help, there are probably people who can help you out.

tired panther
zealous dew
#

karasuta have no support server lol

tired panther
#

@zealous dew how much of your code base on kara....... ?

lusty quest
#

wait you can get the client in your file

#

the ready event returns the cluster

#

and if i see it correctly inside the cluster you can reference client with this.client

lyric mountain
#

how do bitwise flags work?

#

like, how to store/extract

lusty quest
#

you mean permissions as example?

#

nvm

lyric mountain
#

yeah, basically

lusty quest
#

gg discord is 4 seconds delayed for me

lyric mountain
#

me too

tired panther
#

me too lol

lyric mountain
#

I'll need to use a integer-based flags, so I was wondering how to do it

zealous dew
lusty quest
#

i check them this way on my dashboard```js
(guild) => (guild.permissions & 0x20) === 0x20

#

0x20 is manage guild permission

tired panther
lyric mountain
#

that info actually helped me understand how it works lul

#

all I need to do is flip certain bits

tired panther
#

lol

lyric mountain
#

nice, my flags will fit in a byte

lusty quest
#

ahh i hate the npm page. got today an HDR capable Monitor and now im partially blind

zealous dew
#

@tired panther @lusty quest here we are using discord.js now

#
require('./config/alias');
const { ShardingManager } = require('discord.js');
const { token } = require('cat-env');
const express = require('express');
const Topgg = require('@top-gg/sdk');
const manager = new ShardingManager('./bot.js', {
    token: token,
});

manager.on('shardCreate', (shard) => {
    console.log(`Creating shard ${shard.id}`);
    shard.on('message', (msg) => {
        return shard.manager.createShard(msg);
    });
});

const app = express();
const webhook = new Topgg.Webhook('topggauth123');
app.post('/dblwebhook', webhook.middleware(), (req, res) => {
    // Handle send DMs to user
});
app.listen(3000);

manager.spawn();
#

:D is it more ok now ?

lyric mountain
#

like, high dynamic range?

lusty quest
#

HDR? High Dynamic Range?

lyric mountain
#

how does it work?

lusty quest
#

the monitor reaches a Peak Brightness of 600 nits

lyric mountain
#

like, isn't it about exposure?

lyric mountain
lusty quest
#

the bigger model reaches 1000 Nits

lyric mountain
#

why did u buy a flashlight tho?

zealous dew
lusty quest
#

but if you sit in a Dark Room and open a White page you get blind for a sec

tired panther
zealous dew
#

why I need it

tired panther
zealous dew
#

I am trying to send DMs to user when vote come

#

LOL

lusty quest
#

d.js-light gives you way more control about the Ram usage, also adds some nice function for Sharding

#

(ram usage with what discord.js caches)

lusty quest
#

got from 500mb Ram down to 94

zealous dew
#

@lusty quest I know it

lusty quest
#

with the same amount of Guilds

tired panther
#

6gb ram on 4 shards now just 700 mb ram

bleak spire
zealous dew
#

But can you guild help me at discord.js now ?

lusty quest
#

meanwhile my tensorflow powered bot runs at 700mb while having one guild

zealous dew
#

Cause moving into discord.js-light will take time

#

My bot is not small and less function

lusty quest
#

i did it 2 days after i rewrote my bot bcs the old code got wired

tired panther
lusty quest
#

there is not that much to change tbh

tired panther
cinder patio
#

You can do what you want without discord.js-light

lusty quest
#

its nice if you use it, since the forging feature is nice if you need somewhere a quick client

#

but normal d.js works just as fine

zealous dew
#

So can u guy help me ?

cinder patio
#
const partialUser = new Discord.User(client, {id: "userId"});
partialUser.send("...");
zealous dew
#

pepesuydoan If you using discord.js-light less ram it is but more bandwidth is needed cause you need to fetch discord API too much to get data

lusty quest
#

i have no plan about sharding, my largest bot never got past 300 guilds

#

yesnt Discord.js caches a lot of unneccesary data

zealous dew
#

pepesuydoan that is unnecessary for some bot not all

lusty quest
#

idk what exactly if you want to know more ask Tim he made the lib

#

if you work with presences sure its not necesarry

zealous dew
#

but now I am need to do send DMs to user when vote come

#

So can you guy help me

lusty quest
#

you could use what GoogleFeud just send in

zealous dew
#

I don't have client

#
require('./config/alias');
const { ShardingManager } = require('discord.js');
const { token } = require('cat-env');
const express = require('express');
const Topgg = require('@top-gg/sdk');
const manager = new ShardingManager('./bot.js', {
    token: token,
});

manager.on('shardCreate', (shard) => {
    console.log(`Creating shard ${shard.id}`);
    shard.on('message', (msg) => {
        return shard.manager.createShard(msg);
    });
});

const app = express();
const webhook = new Topgg.Webhook('topggauth123');
app.post('/dblwebhook', webhook.middleware(), (req, res) => {
    // Handle send DMs to user
});
app.listen(3000);

manager.spawn();
#

Here is what all I have

#
const partialUser = new Discord.User(client, {id: "userId"});
partialUser.send("...");
#

As this result I don't have any client here

cerulean ingot
#

js sucks

lusty quest
#

like i said i never worked with shards. but ShardingManager can use brodcast eval, but this will run it on each shard

#

or use fetchClientValues to fetch the user

zealous dew
zealous dew
lusty quest
#

i gave you 2 suggestions, idk if they will work but they look promising atleast the last one

zealous dew
#

@lusty quest bot of them need client bro

#

:D

lusty quest
#

lol

#

where is the client?

zealous dew
#

@@! is this different

lusty quest
#

yes

#

bcs i looked up what the manager gives you on methods

zealous dew
#

Ok

#

Let me try

cinder patio
#

You can use broadcastEval only on the first shard to send a message to a user, too

zealous dew
#

but that will not balance on each shard since first shard handle too much

cinder patio
#

I don't think a single request is going to slow down your first shard

#

you can also balance it yourself

zealous dew
#

it will be multiple request cause when vote is reset multiple people gonna vote the bot

cinder patio
#
let lastShard = 0;
if (lastShard > shardAmount) lastShard = 0;
broadcastEval(code, lastShard++);

This way you are rotating shards @zealous dew

#

but I don't think it's necessary

tepid tree
#

how can you get the webhook auth

tired panther
zealous dew
#
manager.fetchClientValues(
        `users.cache.get('188242504670380033')`
    );
#

where can I put this ?

tired panther
#

thats wrong lol

zealous dew
#
require('./config/alias');
const { ShardingManager } = require('discord.js');
const { token } = require('cat-env');
const express = require('express');
const Topgg = require('@top-gg/sdk');
const delay = require('delay');
const manager = new ShardingManager('./bot.js', {
    token: token,
});

manager.on('shardCreate', (shard) => {
    console.log(`Creating shard ${shard.id}`);
    shard.on('message', (msg) => {
        return shard.manager.createShard(msg);
    });
});

manager.spawn();
#

in this file where can I put that

tired panther
#

then run node shard.js

zealous dew
#

it just a name

#

what you got in your shard.js @tired panther

#

can you should me what in your code ?

lusty quest
#

also all DMs are getting send by shard 0 anyways

cinder patio
#

I think only shard 0 receives DMs

#

shards don't really send DMs, they are sent via REST

lusty quest
#

or this way, but i knew there where something with shard 0 and DMs

cinder patio
#

yea only shard 0 receives DMs

zealous dew
#

wibu16 So why don't we init webhook if shard.ids = 0 ?

cinder patio
#

you can also do broadcastEval(code, 0)

zealous dew
#

that we solve my question :D

cinder patio
#

so you don't compare shardids

zealous dew
#

why

cinder patio
#

what why

#

cause it's simpler

tired panther
zealous dew
tired panther
#

idea not id

zealous dew
#

I am doing it now try to make it work at manager

lusty quest
#

make a random number generator that sends the eval to a random shard so there is a lower chance that the same one gets all the load. (or make a proper load balancer)

cinder patio
tired panther
zealous dew
#

Wait but I can't send broadcast now

lusty quest
#

you dont need the member?

zealous dew
#
require('./config/alias');
const { ShardingManager } = require('discord.js');
const { token } = require('cat-env');
const express = require('express');
const Topgg = require('@top-gg/sdk');
const delay = require('delay');
const manager = new ShardingManager('./bot.js', {
    token: token,
});

manager.on('shardCreate', (shard) => {
    console.log(`Creating shard ${shard.id}`);
    shard.on('message', (msg) => {
        return shard.manager.createShard(msg);
    });
    manager.broadcastEval(`users.cache.get('188242504670380033')`, 0);
});

manager.spawn();
#
(node:15804) UnhandledPromiseRejectionWarning: Error [SHARDING_NO_CHILD_EXISTS]: Shard 0 has no active process or worker.
    at Shard.eval (J:\JSKingdom\phoenix-akairo\node_modules\discord.js\src\sharding\Shard.js:266:62)
lusty quest
#

use fetch, incase the user is not cached

cinder patio
#

or create a fake user

lusty quest
#

also use the ready event

#

not the spawn event

zealous dew
#

there is no readyEvent

#

just only shardCreate

sterile lantern
#

how can you make a message visible to the user only w slash commands (like clyde)

zealous dew
#

ready is for client

cinder patio
lusty quest
#

ahh wait this where for kurasata

sterile lantern
#

1 << 6?

#

so i just put that?

cinder patio
#

flags: 1 << 6

sterile lantern
#

is there a list of all flags

cinder patio
#

they are not documented as of now afaik

sterile lantern
#

ah oof

#

also

#

can we make it so

#

it deletes the

#

"User used the /ping command"

cinder patio
#

yes

sterile lantern
#

how so?>

cinder patio
#

type: 3 in the response object

sterile lantern
#

ok tysm :D

zealous dew
sterile lantern
#

wait

#

which is the response object

#
                data: {```
#

this?

cinder patio
#

when you respond to an interaction

#

yup

sterile lantern
#

alr

cinder patio
#

(outside the data object, though)

balmy anchor
#

Does anyone knows why that doesn't works when i'm trying to:

<Embed>.setThumbnail(image);

?

lusty quest
zealous dew
#

Any idea how to solve it ?

sterile lantern
#

do i add flags: under the type

lusty quest
#

never used Sharding ¯_(ツ)_/¯

sterile lantern
#
 data: {
                    type: 3,
                    flags: 1 << 6,
                    data: {```
cinder patio
#

nope, inside the data object

balmy anchor
#

url

cinder patio
#

the second data object

zealous dew
balmy anchor
sterile lantern
#

how do you tag a user

#

interaction.member

#

?

#

i tried this before and i only was successful with the username

cinder patio
zealous dew
#

Make sure it is url not stupid object

sterile lantern
#

also one last thing

zealous dew
#

like image you send

sterile lantern
#

how would i make it so it logs that a user used a cmd ina channel

#

a channel*

#

So in a channel it sends as a default message:

User used the this command

#

do i put it outside of the response object

zealous dew
cinder patio
#

get a TextChannel object,
channel.send(`${interaction.member.user.username} used X command`)
do this in the INTERACTION_CREATE event

sterile lantern
#

TextChannel?

cinder patio
#

Your application must also be authorized as a bot, too

sterile lantern
#

can't i just do const logchannel = idhere

#

yea it is

cinder patio
#

you will have to fetch the channel

#

const channel = await client.channels.fetch("id");

sterile lantern
#

alr thanks

#

wait

#

i put in the interaction_create command?

#

but there's multiple commands

#

so it will just trigger whenever it happens?

cinder patio
#

ye

sterile lantern
#

would

cinder patio
sterile lantern
#

work

#

oh

#

alr

#

thanks

zealous dew
#

nyaSob Anyone can help me

sterile lantern
#

but the client is in the server

#

except its a different slash command scope

#

thats probs the issue one sec

#

well the username

#

samm

#

it only prints this

#

i want the tag

#

${interaction.member.user.tag}

#

doesnt work

sterile lantern
earnest phoenix
#

````MongoError: Authentication failed.``` what does this error usually mean?

#

😦

#

I noob

solemn latch
#

that your authentication information was incorrect

earnest phoenix
#

Ah yes! Thank you

opal plank
#

i do wonder sometimes

high berry
#

dog wtf is that pfp

opal plank
#

like, if you just repeat the error people understand it

#

its a pfp

solemn latch
#

its extremely common

high berry
#

fr?

opal plank
#

wdym fr?

#

got a problem with my pfp?

high berry
#

lol im joking

#

its all chill

opal plank
#

good

solemn latch
#

had a guy in #support need me to copy paste each step of getting their server listed because linking to https://top.gg/servers/new was too much to follow each step himself.

opal plank
#

kinda weird ngl

mellow kelp
#

ah yes, when step-by-step instructions aren't enough

high berry
#

just handhold them through absolutely everything smh

solemn latch
#

needing someone to go through each step with you KEKW

#

well i tried saying, did you do each step listed here? <https://top.gg/servers/new> a few times, but didnt work, so i started listing them out and he finally got it pogey

#

sometimes its faster to hand hold

high berry
#

some people 🤦

thick gull
#

sadge

#

nobody here

earnest phoenix
#

br-

bitter badger
#

Has anyone used Jest to mock discord.js?

grizzled raven
#

wdym mock

bitter badger
#

It's used in testing when you have complicated objects and you want to fake their behavior

solemn latch
#

like unit testing?

bitter badger
#

Ye

fair axle
#

is there a way to get all members from a deleted role?

#

with roleDelete handler

earnest phoenix
#

No, once the role is deleted you can't

#

I suspect the role object must contain it somehow but even if it does, it won't have all the members who has the role

#

As it relies on cache

fair axle
#

okey thanks

quartz kindle
#

the roleDelete event apparently does not remove itself from cached members

#

so if the members are cached, they will still appear as having the role

earnest phoenix
#

Yo tim, remember the Symbol.iterator function you wrote for the number prototype?

#

Why did you call this.valueOf() tho, it would always return the number itself wouldn't it?

quartz kindle
#

it gets coerced to number when you use it with math, but to get the value of it without coercing, you need to call valueOf

earnest phoenix
#

Oh, i see

quartz kindle
#

coercing anything to number automatically calls valueOf of that thing

opal plank
#

whats coercing again?

quartz kindle
#

implicit type casting

opal plank
#

oh

grizzled raven
#

plus, isn't it faster to skip all the coercing?

sterile lantern
#

this is very beta and i was just testing but how come it keeps on sending the prompts

#
let sessionarray = []
      msg.channel.send('What time are you hosting your training?')

    const time = await msg.channel.awaitMessages(res => res.author.id === msg.author.id, {
        max: 1,
        time: 40000,
    })
    sessionarray.push(time)
    if (!time) return msg.channel.send('Did not get a valid response within 40 seconds, cancelling.')
    

    while(time.size > 0) {

        msg.channel.send('Who is hosting the training session? Please provide a roblox username.')


        const host = await msg.channel.awaitMessages(res => res.author.id === msg.author.id, {
            max: 1,
            time: 40000,
        })

        if (!host) return msg.channel.send('Did not get a valid response within 40 seconds, cancelling.')
 


        msg.channel.send("Who is co-hosting this session? Say skip to skip this option.")
        const cohost = await msg.channel.awaitMessages(res => res.author.id === msg.author.id, {
            max: 1,
            time: 40000,
        })

        if (cohost.content === "skip") thecohost = "None."
msg.channel.send("Are you sure you wish to send this training session notification? Reply with yes or no.")
        const confirmation = await msg.channel.awaitMessages(res => res.author.id === msg.author.id, {
            max: 1,
            time: 40000,
        })
        if(confirmation.content == "no") return message.channel.send("Ok")
        if (confirmation.content !== "no") { 


   
    let embed = new Discord.MessageEmbed()
    .setAuthor('test', msg.guild.iconURL)
    .setDescription("Host: " + sessionarray.map(host) + " Time: " + time + "Co-host" + cohost)
    .setColor("RANDOM")
    msg.channel.send(embed)
         sessionarray.length = 0;
        }

    }



} 
}```
#

also is there an easier way to prompt

#

cuz this is rlly annoying

#

ah nvm i found a discord js prompter package

#

time to test

earnest phoenix
#

                    <article id="SUPPORT">
                                <h2 class="major">SUPPORT</h2>
                                <span class="image main"><img src="images/spectre_4.gif" alt="" /></span>
                                <p><center>SERVEUR SUPORT <br> <a href="MY SERVEUR DISCORD LIN; CLICK HERE &#8592; </a></center></p>
                            </article>

                    <article id="red">
                                <h2 class="major">ADD RED</h2>
                                <span class="image main"><img src="images/spectre_3.gif" alt="" /></span>
                                <p><center><a href="MY BOT LINK INVITE; RED &#8592; </a></center></p>
                            </article>```
sturdy flower
#

Hello