#development

1 messages · Page 688 of 1

solar cosmos
#

it isn't a huge bot really, but thanks I'll check glitch out!

onyx summit
#

With "bigger" I mean 60 Guilds or more

#

@brave elm what are you running to get that error?

brave elm
#

I'm build it

#

CTRL Shift B

lusty dew
#

@earnest phoenix it returned a promise I’m pretty sure I resolved it but now it returns that.

onyx summit
#

Increment returns the new model afaik

lusty dew
#

Ik

#

So that means I have to get the case counter after it increments right?

onyx summit
#

Ye, I think so

lusty dew
#

Yea I’m doing that

onyx summit
#

code.pls

lusty dew
earnest phoenix
#

@earnest phoenix it returned a promise I’m pretty sure I resolved it but now it returns that.
read the docs link i sent you

lusty dew
#

Okay

#

Got it to work

solar cosmos
#

Glitch is stuck on "Loading project" after cloning from git repo, do I just refresh or leave it loading?

earnest phoenix
#

close the tab and find a proper host

solar cosmos
#

lol

#

chosen from which options?

solar cosmos
#

those are not free 😛 I'll run the server on my own pc then...

lusty dew
#

Phew 1 Economy command rewrite done 3 more to go

topaz fjord
#

They aren't meant to be free

#

because free hosting is shit

abstract crow
#

^^^^

#

Self hosting is not a bad option. Unless you are hosting more than a bot like a dB or website. Linux is the best way to go

topaz fjord
#

self hosting is technically still bad since internet outages are more common in households

abstract crow
#

Right i meant with that aside. Bots are ok because most people are only in a few servers

#

But when you run more stuff that need to be online then it becomes an issue

earnest phoenix
solar cosmos
#

@abstract crow Self hosting on my personal PC is only for the bot right now, my websites and mail servers are self hosted but on a payed Plesk Server with linux

#

Am I allowed to paste raw data in here? or should I just go for pastebin?

#

I am really trying to figure out why the command is not working at all. I have another command working similar to this, and that one does everything I ask of it. but this command does absolutely nothing when I use it in the testing enviroment
https://pastebin.com/DcddYSYN

earnest phoenix
#

if you're using a bot maker go complain to the developer of the maker

solar cosmos
#

lol, well I'm sorry. I was hoping to get some more help here. But fine.

earnest phoenix
#

we generally don't offer help to people using bot makers as the code in bot makers is static and we can't do anything about it

solar cosmos
#

Fair enough, I am not well versed enough in node.js to write the code myself, hence me using the bot maker

stray garnet
onyx summit
#

You want help with? The error?
That's you trying to interact with a deleted message (most likely)

stray garnet
#

was zum

onyx summit
#

ja was

onyx summit
#

I'm thinking about writing a "best practice" document for hosting discord (.js) bots
Because so many people don't seem to understand why glitch is not a good host, why hosting on your PC is most likely not cheaper than renting a VPS, and why starting shit in screens /nodemon isn't good.

earnest phoenix
#

I would be glad if i can get some help
My command const [, command, commandArgs] = input.match(/(\w+)\s*([\s\S]*)/);

The error im getting

inner jewel
#

empty input

#
undefined
> first
'aaa'
> second
''
> [,first,second] = "".match(/(\w+)\s*([\s\S]*)/)
Thrown:
TypeError: "".match is not a function or its return value is not iterable```
#

also, just split the string normally

#

no need for that regex mess

crisp nexus
#

@earnest phoenix use a catch

inner jewel
#
> function handleInput(i) {
... const args = i.split(/\s+/g);
... const command = args.shift(1);
... return {command, args}
... }
undefined
> handleInput("abc")
{ command: 'abc', args: [] }
> handleInput("abc def ghi")
{ command: 'abc', args: [ 'def', 'ghi' ] }```
#

no

#

don't use a catch

#

fix the code

earnest phoenix
#

I will try, thanks for the suggestions

brave elm
#

Got 2 bots running on this, using 1.5 gb of ddr2 laptop ram lmao, cpu is at 0. Time to upgrade the ram to the max for really cheap.

onyx summit
#

if it works shrug

brave elm
#

exactly 🙂

#

It cost £15 that pc

#

and I don't pay monthly

onyx summit
#

I would have a fat server at home, but my internet is to slow, and my electricity is to expensive

brave elm
#

yeah

#

that is really cheap for power

#

as it's the same kind of lead / power output as my monitors

#

and monitors use literally no power

#

so it's just a cheaper alternative than a vps

onyx summit
#

just not that reliable

brave elm
#

ehh

onyx summit
#

but yeah

brave elm
#

what do you mean?

onyx summit
#

your pc is more likely to be down than a vps

brave elm
#

I mean, if my internet goes off then it's fucked but.

#

yeah

#

or power

onyx summit
#

its fine tbh

brave elm
#

however it doesn't much , maybe once a year if that

#

yeah

#

I'm making circuit as a manager bot, and mafia bot is just for my gta rp server.

#

I'm going to make it show how many people are on the server sometime, when I figure out how.

onyx summit
#

I want my bot to get like really massive

#

just

#

because I want to cluster servers and build a cdn

#

but dreams are dreams

brave elm
#

yeah

#

everyone wants their bot to be massive, if that's what it's for (public servers)

#

Mafia bot is only for my server, but Circuit, is going to be public use

#

After it's done with -help and a few commands

inner jewel
#

a 65w server on 24/7 is most likely more expensive than a real server

#

unless you have really cheap electricity

#

even then it's less reliable

brave elm
#

we have solar pannels

#

so it's basically half the cost, maybe less than that

inner jewel
#

i pay a bit less than 0.15 usd per kWh and it'd still be more expensive than my vps

#

while also being way less reliable

#

since there isn't a redundant power supply not redundant internet

brave elm
#

my power or internet goes out like once a year

#

it's a really low chance

wheat jolt
#

@brave elm get a raspberry pi lol

west spoke
#

that's even worse

wheat jolt
#

Raspberry PIs are good for discord bot hosting

west spoke
#

no

wheat jolt
#

Or other node.js apps

#

no
Why?

west spoke
#

rpi cannot easily run a 250+ server bot

#

without using the rpi4

earnest phoenix
#

rpi is ARM

wheat jolt
#

Of course I meant rpi4

west spoke
#

Still, the amount of the rpi, the power usage, costs more than a vps

inner jewel
#

just get a vps

west spoke
#

^

inner jewel
#

if you're buying hardware to run a bot it's already more expensive

unique nimbus
#

yes

#

Also it saves the internet bill

onyx summit
#

what why

#

I don't have a server at home because my internet is to slow, but how tf would that change anything about your internet bill?

earnest phoenix
#

some people don't have flat internet

#

instead they pay by amount used

onyx summit
#

uff

#

never heard that in germany

inner jewel
#

and some people have bandwidth limits

gray geyser
#

eval command

#

help

#

advanced

onyx summit
#

In germany you usually have unlimited || but also very slow internet lol ||

gray geyser
#

pls

#

lol

onyx summit
#

dude stfu and ask a real question

devout chasm
#

unlimited shit basically

#

fck telekom

onyx summit
#

basically

earnest phoenix
#

lol almost every ISP in europe is a scam

onyx summit
#

We could have 100k+, but the wires in our house only support 50k (but we only have 50k download, upload is 4k lmao)

devout chasm
#

man i have 16k down (normally 10) and 2 up (normally .5)

unique nimbus
#

I pay a shit ton for my ISP as they are the only provider who allows unlimited calls to Russia

#

well parents no me

onyx summit
#

one of my friends has a 200ms ping so I can't really complain

devout chasm
#

oh well

#

but still

#

get a frikken vps

#

and upgrade to a dedi if needed

onyx summit
#

I haz a dedi so idc

devout chasm
#

oh

#

where?

onyx summit
#

Contabo, so germany kek

devout chasm
#

mmmhhh

#

contabo guuud

onyx summit
#

yas

devout chasm
#

i got a small vps there

onyx summit
#

and if you order on the german page you don't pay any setup fee

devout chasm
#

ye

#

what bot is it that you are coding?

#

@gilded plank bots @onyx summit noembed

gilded plankBOT
#

CHY4E#0505's bots:
@atomic nebula @slender sigil

devout chasm
#

hmm

onyx summit
#

oh the first is absolutely trash, I only run it because some people seem to use it

#

should remove it from dbl lol

devout chasm
#

does not display for me lul

onyx summit
#

ye he got kicked from here

devout chasm
#

oh

#

and better airhorn is like airhorn solutions?

earnest phoenix
#

i should get back into public bot deving but i just cant be bothered with low iq users not knowing how to use the bot

broken shale
#

majority are underage

earnest phoenix
#

true

onyx summit
#

yes, just better mm

so you can record your audio and make soundboards (and soon™ you can upload mp3 files)

devout chasm
#

oy

#

that sounds good

onyx summit
#

but current code is trash trashEyes

devout chasm
#

js?

onyx summit
#

yeah

devout chasm
#

hmmm

onyx summit
#

currently rewriting it to typescript, and just making it better

devout chasm
#

java

#

especially for bots related to streaming stuff

#

because lavaplayer

onyx summit
#

I'm gonna stay with js/ts until I have to scale, then I would build a server that handles streaming for the clients

devout chasm
#

hmmm

#

well that might work

onyx summit
#

it will

#

and has to

devout chasm
#

how do you deploy?

onyx summit
#

currently just git pull kek und restarting

#

but I obviously have to change that with typescript

#

will probably switch to azure devops or semaphoreci

devout chasm
#

well i meant like deployment environment

#

well that might be just the wrong word for it

#

but like

#

do you use any kinda container system?

#

prolly not if git pull

#

lmfao

onyx summit
#

nahh, I thought about using docker, but currently I don't have the need for it

devout chasm
#

well

#

do you use pm2 then?

onyx summit
#

yee xD

devout chasm
#

aight

#

at least something

inner jewel
#

best deploy is scp bot.jar host:/path/to/bot/folder && ssh host /path/to/bot/folder/update.sh

devout chasm
#

lmfao

onyx summit
devout chasm
#

best deploy is code, push and wait

earnest phoenix
#

docker and chill

devout chasm
#

nah docker lame

earnest phoenix
#

no u

devout chasm
#

docker väry lame

onyx summit
#

what then?

devout chasm
#

k8s boss

#

i love it so much

onyx summit
#

kubernetes?
I roughly understand docker kek

devout chasm
#

it isn't really related to docker

#

it's like completely different

onyx summit
#

so its not related to docker, but you would rather use kubernetes instead of docker?

devout chasm
#

nonono

#

it's completely built up differently

#

it's not used the way docker is used

#

docker is just the first thing you think of when talking about containers

inner jewel
#

my experience with k8s has been a lot of hate so far

#

starting with minikube being garbage and not even booting

devout chasm
#

man i'm sincerely in love with it

#

cmon minikube

#

get that garbage outta here

inner jewel
#

i'm not paying for servers to try learning k8s

#

also some people i know have some horror stories with k8s

devout chasm
#

i created a CI/CD for a simple discord.js bot within a day

inner jewel
#

like it's dns fucking up massively

devout chasm
#

the cluster setup did take like 15 mins

#

man k8s' dns system is great

#

and k8s is actually getting the standard industry deployment system

#

ye wtv

#

i like it

#

but it's not easy

devout chasm
#

oy boi

inner jewel
#

copy pasted from the message complaining about this issue causing downtime

devout chasm
#

hmmm

onyx summit
unique nimbus
#

You make sentences?

#

this is mine

onyx summit
unique nimbus
#

gay and sad and yes is my words

quartz kindle
onyx summit
#

I think I should write a util that allows me to prompt input

#

cuzz it's getting annoying

keen abyss
#

It says unsubscribe on site for vote when you aren't logged in.

onyx summit
#

read the channel topic

earnest phoenix
#

now i feel a little about my commit messages

#

Hi

#

I need help

late hill
#

Well it's probably what the error says, an indentation error

#

Which isn't very surprising if you're coding on mobile

#

Anyway, no one can help you without seeing the code

onyx summit
#

is it worth it to add translations to a bot? thonkhappy

earnest phoenix
#

I mean, I don't think the majority of bots do it, but maybe if you were to add a translation, maybe do spanish

#

that conclusion makes no sense

#

you would check which regions use your bot

onyx summit
earnest phoenix
#

if the majority is english, it's up to you whether you want to translate it or not, it's not necessary as users will adapt, but if majority of your users is e.g turkish, you would make a turkish translation

#

but translations generally don't matter nowadays, if your bot is in english you're good to go as it's a globalised language and it's being taught everywhere around the world

onyx summit
#

yeah thats right

#

maybe later

#

very later

earnest phoenix
#

The code got deleted

#

Bc I leaved app for more than 5 mins

#

I'll do it again

#

:c

onyx summit
#

sucks to code on phone

earnest phoenix
#

Still works

onyx summit
#

cool

earnest phoenix
#

prob a stupid question but how can i make it like the bot invite link has a pre-filled server in it?

onyx summit
#

I don't think thats possible

earnest phoenix
#

it is i saw it before

#

a "pre-filled server"?

#

like it has a server_id tag after url and it kinda pre-fills the server

inner jewel
#

you can set a guild id in one of the query params

west spoke
earnest phoenix
#

Bruh no

#

@inner jewel and how can i do that?

#

i know the tag but idk how to execute it

onyx summit
#

you do guild_id=<id> no?

earnest phoenix
#

Oi

#

wait

#

i tried server_id

inner jewel
#

https://discordapp.com/oauth2/authorize?client_id=YOUR_CLIENT_ID&scope=bot&permissions=YOUR_PERMISSIONS&guild_id=GUILD_ID

earnest phoenix
#

thancs

#

Thanks

#

works

#

👌

onyx summit
#

How can I define parameter types and return type for a callback?

inner jewel
#

language?

onyx summit
#

typescipt, forgot it, sry

#

I found interface myCallbackType { (myArgument: string): void } , but not sure if thats the best way

#

just did it this way shrug

earnest phoenix
#

This doesn't works

#

Help

#

I do -ping

#

And doesn't works

loud salmon
#

i dont think thats his code lmao @earnest phoenix

earnest phoenix
#

🤔

#

a bot maker?

loud salmon
#

nah

#

python on android

onyx summit
#

Sadly there are some bot maker apps for Android

loud salmon
#

he must have either a fucky android version or a fucky python version

#

or a fucky pydroid error

earnest phoenix
#

the error complains about a missing parameter that goes against d.py's command design

#

it's self explanatory and well documented

#

that's why i posted the image

onyx summit
#

I'm thinking about implementing a "trending" page, would that be worth it?

potent ivy
#

what would that be

onyx summit
#

Content that gained many upvotes in a short amount of time

potent ivy
#

yeah but you want to make a trending channel in discord or... trending dashboard or what?

#

trending channel could be interesting

#

sounds really simple to make too

onyx summit
#

no, a hot/trending command that shows content that gained upvotes in a short amount of time

#

just thinking if its worth it to calculate stuff like that

earnest phoenix
#

tf

onyx summit
#

@potent ivy how would that be really simple? I imagine it quite hard to write an algorithm to decide if the content is trending or not

potent ivy
#

we're talking about reddit feed or discord messages

#

?

earnest phoenix
#

YouTube

onyx summit
#

I don't have external content, I mean content within the bot

earnest phoenix
potent ivy
#

so... discord messages?

onyx summit
#

the content are audio files, wtf u mean?

earnest phoenix
#

Tell me the fuck I do there

potent ivy
#

i was thinking you want to make a upvote emoji that you can clap on discord messages, once used the bot will track how many upvotes it gets within an hour and if its above certain point it puts it into hall of fame (which would be either a separate channel or a new command)

#

¯_(ツ)_/¯

onyx summit
#

nice token retard

earnest phoenix
#

k

#

no u

onyx summit
#

@earnest phoenix reset your token

earnest phoenix
#

k

potent ivy
#

"im gay"
"i suck dick"

10/10 testing

earnest phoenix
#

yes

#

I resetted token

#

That won't work bruh

onyx summit
#

@potent ivy yeah that would be easy but pretty basic. might do it that way

potent ivy
#

well i got no idea how d.py works, python always looked horrible to me in the first place

onyx summit
#

same, no clue bout python

#

consider asking in their support server

potent ivy
#

discord api server should be good

earnest phoenix
#

read your error

#

it's self explanatory

#

and read up on d.py docs

#

Who can help me?

#
client.on("message", message => {
  if(message.content == prefix + "Привет") 
    var number = "21";
    var embed = new Discord.RichEmbed() 
    .setTittle("Title")
    .setDescription("Description")
    return message.channel.send(embed);
    }
);
#

Help pls

onyx summit
#

with what problem?
I guess its your syntax, because its wrong

if (boolean) {
    // code here
}
earnest phoenix
#

you aren't opening up your curly brace but you're closing it

onyx summit
#

no

earnest phoenix
#

nevermind you aren't opening it nor closing it

onyx summit
#

learn basic js

#

thank

earnest phoenix
#

Thanks

#

Really

#

I lost {

inner jewel
#
client.on("message", message => {
  if (message.content == prefix + "Привет")
    var number = "21";
  var embed =
      new Discord.RichEmbed().setTittle("Title").setDescription("Description")
  return message.channel.send(embed);
});```
#

you have if(...) var x

#

which is invalid

earnest phoenix
#

Sorry

#

I am starter on js

inner jewel
#

actually

onyx summit
#

oh really mm

inner jewel
#

it's valid

#

but won't do what you want

#

it'll just enter an infinite loop

earnest phoenix
#

I won't embed

inner jewel
#

setTittle

#

typo

earnest phoenix
onyx summit
#

fix ur typo and it should work

inner jewel
#

just s/setTittle/setTitle/

earnest phoenix
#

?

#

He is setted

onyx summit
#

you wrote setTittle

#

but its setTitle

earnest phoenix
#

Oof

#

One t

#

?

onyx summit
#

I literally just told you what it is

earnest phoenix
#

Oh

#

Really thanks

hushed berry
#

hey dev boys

onyx summit
#

Hey ho

#

@hushed berry how 2 make music bot????

hushed berry
#

😡

topaz fjord
#

@hushed berry ur qt

onyx summit
#

Learn what kappa means

topaz fjord
#

also you do know chy4e was memeing

onyx summit
#

And then come back and try to tell me I should learn shit

hushed berry
#

yardim

onyx summit
#

No problem homie

inner jewel
#

@hushed berry how to make modbot

#

pls halp

#

i need it

onyx summit
#

How 2 make multi-purpose moderation, fun and utility bot?

topaz fjord
#

@hushed berry how 2 make burthday bot

onyx summit
#

why no work?

client.on('music', playMusic())
devout chasm
#

because playMusic() is an async method which returns a promise

onyx summit
#

Oh makes sense

#

Someone on d.js just blocked the eventloop until it was resolved

quartz kindle
#

lmao

devout chasm
lusty dew
#

Oof

onyx summit
#

Okay this is it! I will write a page about hosting discord (.js) bots.
Would make all those annoying hosting conversations useless

earnest phoenix
#

i hope you're aware most users will avoid it

#

(since they already avoid messages in faq and in pins)

sage bobcat
#

One message removed from a suspended account.

lusty dew
#

Lmao

#

@onyx summit how do I host a bot

dusky geode
#

you host a bot @lusty dew

#

duh

lusty dew
#

Kek

hollow saddle
#

How to host bot Thonk

lusty dew
#

Lol

quick cradle
#

How do i add more roles to bot?
So that members of server can buy more?

earnest phoenix
#

what

loud salmon
#

dbl wrongserver @quick cradle

covert turtleBOT
#

This server is NOT the support server for ANY bot. You need to click on the "Support Server" button on the bot's page, not the "Join Discord" button at the top of DBL.

sage bobcat
#

One message removed from a suspended account.

solar cosmos
#

$table->date(dd-mm-YY)('date');
anyone understand why the format isn't working?

#

mysql insertion

sage bobcat
#

One message removed from a suspended account.

lusty dew
#

The highlighted is the description right?

dusky geode
#

yea

lusty dew
#

And I’m assuming the rest is addField and a .setTimestamp and .setFooter

dusky geode
#

yes

lusty dew
#

Mk

amber fractal
#

The date thing is not the timestamp

#

Or is it hold up

smoky spire
#

It's not But that embed does have a timestamp

#

The "Yesterday at TIME" is the timestamp

amber fractal
#

Yeah, you cant have a timestamp and a footer I believe

smoky spire
#

You can

amber fractal
#

They go in the same place dont they?

smoky spire
#

Logger#6088 is the footer

amber fractal
#

Meh. I guess so lol

lusty dew
#

You can do .setTimestamp()
.setFooter() at the same time

#

Also why isn’t it loading the avatars?

#

Is it because it’s slow or am I doing something wrong

#

I have a .setAuthor(oldMsg.author.username, oldMsg.author.avatarURL())

#

I do the same thing in the footer except for the bot

dusky marsh
#

use displayAvatarURL

lusty dew
#

That didn’t change anything

dusky marsh
#

log that value to see if its returning anything

amber fractal
#

@lusty dew you on master or stable

lusty dew
#

Master

amber fractal
#

<User>.displayAvatarURL() it's a function

#

It's not longer a property, you need the parentheses

lusty dew
#

Wait what

#

That made no sense

amber fractal
#

But avatarURL() should work too MegaThonk

lusty dew
#

Oh

amber fractal
#

It's a method in master

lusty dew
#

Yea I use parentheses

#

Lol

amber fractal
#

In stable it's a property

lusty dew
#

I read from the docs

#

I used parentheses

amber fractal
#

Yeah, do what he said log it

lusty dew
#

I did

amber fractal
#

See if it returns anything

lusty dew
#

Okay

amber fractal
#

I would say displayAvatarURL() is better because if they dont have an avatar it returns their defualt where as avatarURL() will return null if they dont have an avatar

#

But I must sleep gn

lusty dew
#

It returns the avatar links

#

So idk what’s going on

warm marsh
#

displayAvatarURL() returns a url of the user icon which can be used to set thumbnail or other image properties of an embed.

lusty dew
#

Ik what it does

#

That’s not the issue

#

It’s returning the avatar url but not loading the avatar properly in .setAuthor() and .setFooter

earnest phoenix
#

it's loading the avatar properly

#

otherwise you wouldn't see an image at all

#

it's just loading the default avatar for some reason

#

it might be broken on master

#

use the logical or with the other properties

#

let avatar = user.avatarUrl() || user.defaultAvatarUrl should do the trick

amber fractal
#

It's the exact same

#

So the error would still persist

earnest phoenix
#

hm

broken shale
#

who uses d.js master or stable

#

Probably gonna use master now so it won't be a nightmare for me to rewrite code later

zealous veldt
#

I use master

earnest phoenix
#

don't really see a reason not to
stable has multiple mem leaks, master is almost if not faster than eris aswell

broken shale
#

Yeah looking at all the master changes gonna be GWcorbinMonkaGIGA

lusty dew
#

Wasn’t that much for me tbh

#

Though I started rewriting to master at a very small point only had 5 cmds kek

#

But even then it wouldn’t have taken long to rewrite to master now with my 40+ cmds

warm marsh
#

In java what should I use for persistent data store?

#

I looked at Java's mysql and it seemed pretty mad.

lusty dew
#

How can I get the invite a user used to join the server?

#

Like the invite code

#

I’m already using a guildMemberAdd event in d.js master

onyx summit
#

afaik it's kinda cancer

opaque eagle
#

Is anyone here good with LaTeX?

#

I want to make a macro with a default and a mandatory argument
and i want a fallback value for the default arg
but idk how to do the fallback part

sinful lotus
#

@warm marsh I use jdbc personally as it supports multiple sql dbs

warm marsh
#

I'll have a look thanks.

sinful lotus
#

although forgive me if my java is bad

woeful lotus
#

I see people are getting denied left and right

#

I'm sorta scared for my bot

warm marsh
#

Thanks. Looks sorta easy I guess.

#

Also your Java looks good, I just started coding with Java 2 days ago and mines is very basic.

twilit rapids
#

Saya is a coding addict lol

onyx summit
#

*anime

topaz sphinx
#

@twilit rapids smh Smug

vagrant root
warm marsh
#

dblapi

#

Does anyone know the d.jda GuildCreate event?

#

I tried GuildCreate but doesn't seem to return a guild class.

topaz fjord
#

@warm marsh you mean the guild join event?

#

guildJoin is emitted when a client joins a guild

#

it's in the jda docs

warm marsh
#

Yeah I know, When I used it nothing happened.

#

GuildJoinEvent doesn't work along with the GuildCreate event.

#

I tried just logging and nothing was logged.

topaz fjord
#

GuildCreateEvent doesn't exist in JDA v4

#

also show code

warm marsh
#

I'll test it.

topaz fjord
#

Try adding @Override on it

warm marsh
#

Ok

#

Works now.

topaz fjord
#

Listener adapter has empty implementations of each event

#

Using the override notation tells it to use yours

#

For that specific event

warm marsh
#

Oh thanks I had no clue.

#

I seen it around in others code but was like probably don't need it.

indigo geyser
#

Is there a way to add a bot on a group?

unique nimbus
#

no

#

dont think so

indigo geyser
amber fractal
#

Not anymore

inner spruce
#

await dbl.postStats(client.guilds.size, client.ws.shards.id, client.ws.shards.size);

Anyone knows in the master to get the ID? Its not client.ws.shards.id

Discord.js

amber fractal
#

On master? Are you using internal sharding?

#

.shards is a collection of websocket shards

#

Afaik there is no way to get the current shard id, except in guild. Guilds can give you the current shard id

onyx summit
#

@inner spruce there is no a current shard id like in traditional sharing.
Instead, just pass undefined as second parameter

inner spruce
#

All right, thanks guys!

onyx summit
#

Quiz:
which code snippet includes errors?

const num = 1_000 + 10;
console.log(num);

or

const num = 1000 + 10
console.log(num)
dense sandal
#

1

onyx summit
#

you mean the first one?

dense sandal
#

Yes

#

Really?

onyx summit
dense sandal
#

Wait

#

How?

onyx summit
#

underscores are valid to make reading large numbers easier

earnest phoenix
#

i mean, second is also valid

dense sandal
#

Something I never knew

onyx summit
#

no, it has no semicolons, code without semicolons is broken code

earnest phoenix
#

but it wont error out

onyx summit
#

never said it would mm

valid frigate
#

js doesn't require semicolons

#

lmfao it's essential in other languages though

onyx summit
#

wrong

earnest phoenix
#

but then you cant say that snippet includes errors

#

if its perfectly valid

dense sandal
#

Half my bot is without semicolons but no errors

#

(Yes I’m that lazy)

valid frigate
#

idk why semicolons are even up for debate in the scope of js

dense sandal
#

I mean they’re pretty key inside a for loop

onyx summit
#

js requires semicolons

#

asi just inserts them for you

earnest phoenix
valid frigate
#

only place i know where they're required is for loops

#

in a language like c++ etc you need it bc strings can be broken into multiple lines

amber fractal
#

Semicolons = bad

valid frigate
#

and some other reason but in js = mmulu

onyx summit
#

I will repeat for you: js requires semicolons, but there is an error correction mechanism which inserts them for you if they are missing

amber fractal
#

I only use semicolons when forced

valid frigate
#

are you using a ts linter

amber fractal
#

No

#

I simply wont use semicolons

#

They serve no purpose

valid frigate
#

i was talking to le epic chy4e

amber fractal
#

Just take an extra byte

onyx summit
#

stoopid

#

you are writing broken code

valid frigate
#

i have them autoinserted because of the fact that webstorm gives a bright flashy warning and offers to autocomplete

amber fractal
#

let x = 1
let x = 1;
Difference? One takes a miniscule more amount of storage

valid frigate
#

honestly it's preference

amber fractal
#

Not something to call someone a retard over

valid frigate
#

no problem with reaching over to one end of the keyboard

onyx summit
#

No, js without semicolons is broken code

amber fractal
#

Like ch4 did mmulu

onyx summit
#

Not my words, but wise ones:
A strict reading of the spec implies that ASI is an “error correction” routine. What kind of error, you may ask? Specifically, a parser error…
In my view, the only way a parser error occurs is if it’s given an incorrect/errored program to parse. So, while ASI is strictly correcting parser errors, the only way it can get such errors is if there were first program authoring errors — omitting semicolons where the grammar rules require them…
When I hear someone claim that they want to omit “optional semicolons,” my brain translates that claim to “I want to write the most parser-broken program I can that will still work.”…
My take: use semicolons wherever you know they are “required,” and limit your assumptions about ASI to a minimum.

dense sandal
#

Ok yes then fine. I write my bot in broken code. Clearly this has such a big impact because no compiler ever inserts them for you. Seriously, JavaScript is based around it being optional but to compile it it needs a constant, so it puts them in. It still knows where they go.

valid frigate
#

are we seriously debating over s e m I c o l o n s

amber fractal
#

@onyx summit source please

onyx summit
#

btw there are plenty of cases that break without semicolons

amber fractal
#

Would like to read it from source

quartz kindle
#

I always use semicolons, except lines that end with }

amber fractal
#

Because it has 0 errors

onyx summit
#

no its ur error prone code, not mine

amber fractal
#

Error prone?

#

I've used this index file for 9 months

valid frigate
#

it's preference for fucks sake

#

can you two stop

amber fractal
#

Nah he called me a retard for not using fucking s e m i c o l o n s, of course I'm going to show it makes 0 difference

modern sable
#

can you guys calm down

onyx summit
#
  1. I revoked that insult
  2. It does make difference, it leads to error prone code
modern sable
#

Discussions are fine just don't start throwing around insults

quartz kindle
#

The asi spec advises you to make informed decisions, you are free to omit semicolons as long as you understand why and how the code will be parsed

earnest phoenix
#

lol

onyx summit
#

And some of the best JavaScript developer advice you to not make guesses if the code will parse correct or not, just use semicolons. And if you are to lazy for that, use a linter that inserts them for you, and then you can check if they are inserted correct or not

earnest phoenix
#

my code has semicolons but i forget to add it some times :/

onyx summit
#

And don't come again with "uhh they use more storage", like wtf? Who cares about some characters size

earnest phoenix
#

in that case don't use tabs and spaces to preserve storage

autumn birch
#

hello

quartz kindle
#

Write your entire code in one line

#

Or just use a minifier

earnest phoenix
#

don't use variable names more than 2 characters

quartz kindle
#

You can make all your variables a single character lul

earnest phoenix
#

lawl

quartz kindle
#

But btw, reusing variables will probably give you more benefit than shortening them

earnest phoenix
#

and using recursion will help in shortening the code

#

we don't care about performance we care about storage (even though stacks might use more storage)

quartz kindle
#

Then write huge monolithic files

#

Dont modularize your code

#

Lmao

earnest phoenix
#

plz do follow that advise if you want your computer to give you middle finger

mossy vine
#

Yarn version:
1.16.0

Node version:
11.15.0

Platform:
linux x64

Trace:
Error: EIO: i/o error, scandir '/run/media/cyber28/Maxtor/Coding/temes/slimester/node_modules/mongoose/lib/helpers/query'

npm manifest:
{
"dependencies": {
"discord.js": "discordjs/discord.js",
"dotenv": "^8.0.0",
"mongoose": "^5.6.9"
},
"scripts": {
"start": "node index.js"
}
}

#

so one day i try working on my project, and it says that mongoose is not installed, so i tried reinstalling it. ever since then i get this error, and mongoose installation would get stuck at creating the lib/helpers/query directory, and installing everything afterwards. now it doesnt even create a node_modules directory anymore

#

pls help its so annoying

#

huh, using npm produces a similar error

#
npm ERR! syscall scandir
npm ERR! path /run/media/cyber28/Maxtor/Coding/temes/slimester/node_modules/.mongoose.DELETE/lib/helpers/query
npm ERR! errno -5
npm ERR! EIO: i/o error, scandir '/run/media/cyber28/Maxtor/Coding/temes/slimester/node_modules/.mongoose.DELETE/lib/helpers/query'```
sage bobcat
#

One message removed from a suspended account.

opaque eagle
#

what language

mossy vine
#

rolling a dice is simple, its just a random number

opaque eagle
#

^

#

That's how you "roll a die" in JavaScriptjs function rollDie(sides = 6) { return Math.floor(Math.random() * sides) + 1; }

earnest phoenix
#

pseudo die*

sage bobcat
#

One message removed from a suspended account.

#

One message removed from a suspended account.

#

One message removed from a suspended account.

#

One message removed from a suspended account.

opaque eagle
#

Then go and google "roll a die"

earnest phoenix
#

or roll a physical fie

opaque eagle
#

Ok, I'll role a physical fie

sage bobcat
#

One message removed from a suspended account.

earnest phoenix
#

fie

opaque eagle
#

Unexpected keyword "role"

earnest phoenix
#

yeah my typos are clever

mossy vine
#

make a robot that rolls a die, take a picture of it, and use AI and machine learning to determine the result, and send it in the discord channel

earnest phoenix
#

lol

sage bobcat
#

One message removed from a suspended account.

#

One message removed from a suspended account.

opaque eagle
quartz kindle
#
if(goingToCrash()) {
    dont();
}
onyx summit
#
if(goingToCrash()) {
    crash();
}
earnest phoenix
#
    run();
}```
dense sandal
#
else {
  throw(acrossRoom);
}
mossy vine
#

this channel is a goldmine sometimes

dense sandal
#

Mm

earnest phoenix
#
    restinpeace();
}```
dense sandal
#
   restinpeace();
}```

Hmm```else if(!canRun) {
restinpeace(thisOne);
}`````

quartz kindle
#

Having canRun as a standalone variable means you have to constantly update it ahead of time, which is hella inefficient

earnest phoenix
#

no pulling apart code, it's supposed to be a joke GWempMoan

unique nimbus
quartz kindle
#

Pulling apart joke code intensifies the joke

earnest phoenix
#

:thinky:

dense sandal
#

I mean honestly art if he funny bit is pulling apart the code

grim aspen
#
    die();
}```
earnest phoenix
#

oh

#

I guess i'll die then

dense sandal
#

@grim aspen solid bit of code there, but I think you mean else if(!dead) {

quartz kindle
#

!!alive

onyx summit
#
if (brain.has`depression`) 
{
giveUp();
process.exit(1)
}
earnest phoenix
#

Are you trying to correct grammar in code

#

hey stop telling my brain what to do

dense sandal
#

No I’m correcting variable naming clarity

unique nimbus
#

define brain

earnest phoenix
#

gone

unique nimbus
#

brain was not defined

quartz kindle
#

@onyx summit pretty sure that code is not valid lul

onyx summit
#

why

unique nimbus
#

you didnt define brain

#

smh

earnest phoenix
#

smh

dense sandal
#

makes a full AI based around peters joke about brand not being defined

earnest phoenix
#

my brand has depression

quartz kindle
#

Can you even do property'string'?

dense sandal
#

I don’t think so...

earnest phoenix
#

Just tell it to not give any errors and it will work ofc

dense sandal
#

Think it’s ` either side of the whole phrase

onyx summit
#

uhhhhhh, tbh I dont even know, but you could do sum weird shit with template literals

earnest phoenix
#

Thats js the origin of weird shit

dense sandal
#

I wanna deny that

earnest phoenix
#

Do it 💪

dense sandal
#

I can’t XD

onyx summit
#
// TAG FUNCTION
greet`I'm ${name}. I'm ${age} years old.`
// EQUIVALENT FUNCTION
greet(["I'm ", ". I'm ", " years old."], name, age)
#

dont know tbh

#

but looks ugly imo

#

@quartz kindle

earnest phoenix
#

Yeah it's kind of funky

onyx summit
#

AHHHHHH

#

I cant get my post validation to work

trim saddle
#

funky kong?

quartz kindle
#

Really lol

#

Learned a new thing

onyx summit
#

I want to cry rn

earnest phoenix
#

:(

#

Crying is sad, don't cry

#

Crying is good

#

It releases your problems in tear form

onyx summit
#

I want to use my debugger to find out why my validation isnt working

#

cant get my debugger to work

earnest phoenix
#

Cry a little more i guess

onyx summit
#

cant cry at work

earnest phoenix
#

Get a can of bug spray

onyx summit
#

and spray it in my face

quartz kindle
#

@onyx summit thanks to learning about tag functions, ive also learned all functions have a local arguments variable lul

#

Thanks lel

earnest phoenix
#

Doing moon walk you are

onyx summit
#

no problem

#

WHY IS THIS NOT A VALID DATE STRING "2019-09-04"

#

I hate coding

#

why did I started doing it

unique nimbus
#

why is it the wrong way round

onyx summit
#

btw I found it, OBVIOUSLY THE VALIDATOR WAS NAMED IsISO8601

unique nimbus
#

04-09-2019 best

onyx summit
#

no, I have to use the iso standart

valid frigate
#

that's not even iso standard

#

iso 8601 looks different doesn't it?

hushed berry
#

The string is valid 8601

sage bobcat
#

One message removed from a suspended account.

onyx summit
#

@valid frigate considering that's what (new Date).toISOString() returns I'm pretty sure it is

edgy orchid
#

I have question, how do I make a command which reads a text document and sends something random from that text file?

mossy vine
#

what language

edgy orchid
#

node.js

mossy vine
#

use the fs builtin to read the file, split it at every \n, and select a random string from that array

edgy orchid
#

can u give me a exampel ?

onyx summit
#

fs.createReadStream(path) if you want to stream it,
fs.readFile(path, callback) if you want to read it in one go

mossy vine
#

for that use you dont want to use a stream

edgy orchid
#

can try

mossy vine
#

or at least, its unnecessary

edgy orchid
#

okei

onyx summit
#

always depends on the filesize fingerguns

edgy orchid
#

wat should it be on callback?

#

the .txt file ?

west spoke
#

oh god

hidden cargo
#

what?

west spoke
#

.txt

onyx summit
#

The callback gets called when it finished reading the file

quartz kindle
#

whats a good and lightweight messaging protocol in node?

#

nng has the feature i need but the node bindings fail to build and is largely undocumented and abandoned
nanomsg has issues precisely with the feature i need, and its node bindings are also largely abandoned
zeromq doesnt have the feature built in, but could be done manually, but its node bindings are a mess and full of problems as well
rabbitmq looks more stable but has a lot of shit i dont need and looks complicated af
node-ipc and pm2 busses look weird and just feels wrong to use idk why

#

most other things i found that look exactly what i need are libs from years ago that havent been updated since lul

#

basically i need the surveyor/respondent pattern, one process broadcasts a message to all others, and awaits a reply from all of them, preferably over the same socket, and preferably without relying on an external service or process like redis

#

without a master process

#

im mostly interested in zeromq, but it has a lot of issues complaining about memory leaks in its github, which makes me scared lul

gray geyser
#

how do i get all member data to appear when for example i give a bl! eval message.author

#
Radhy{
"id": "469625237873491990"
"discriminator": "001"
"username": "Radhy"
"tag": "Radhy#6716"
}
smoky spire
#

you'll have to eval message.member then

earnest phoenix
#

JSON.stringify your result

gray geyser
#

how do i do it

earnest phoenix
#

what happens when you eval message.author?

quartz kindle
#

is there a rate limit for fetchRecommendedShards?

earnest phoenix
#

probably

gray geyser
earnest phoenix
#

it's a rest endpoint

#

all rest endpoints have a ratelimit

#

that's a weird eval

#

it's a built in eval

#

what does your eval code look like?

#

like i said, JSON.stringify it

#

stop overengineering

#

a built in eval??

#

and dont json stringify, util.inspect's alot more appropriate

onyx summit
#

@quartz kindle I can recommend Veza for IPC stuff

#

Its request => response

#

Like http

#

Pretty cool

#

ytdl I guess

quartz kindle
#

i'll check it out

#

also, fetchRecommendedShards uses the /gateway/bot endpoint, which should fall into the "all requests" rate limit of 50/1s, am i correct?

onyx summit
#

I don't know what you are trying to do, but I don't think it's gonna be a big problem if you fetch that endpoint a few times?

#

Are you scaling shit?

quartz kindle
#

im trying to make something scaleproof lul

#

the problem is that i dont have a master process

#

all processes are completely independent

onyx summit
#

Dunno, ask quick.db

quartz kindle
#

that error doesnt say anything, try reinstalling quick.db

earnest phoenix
#

also, fetchRecommendedShards uses the /gateway/bot endpoint, which should fall into the "all requests" rate limit of 50/1s, am i correct?
yes, but with the recent changes to ratelimiting and internal api bans it's not safe to hardcode anymore

quartz kindle
#

yeah i am aware its unsafe, but i dont have any other choice

onyx summit
#

How much guilds?

quartz kindle
#

well, my use case is definitely not a problem at all, im just thinking what can i do to make it scaleproof lul

onyx summit
#

Get you

#

Scaling (especially clustering servers) looks hella interesting

quartz kindle
#

im thinking about a hypothetical scenario with 50 independent processes booting at once

onyx summit
#

Why no master?

quartz kindle
#

to make it possible to decentralize, and clone across machines with near-zero configuration, as well as usable with pm2 cluster (main reason)

#

the only input the process needs is the total amount of processes

#

from there it will calculate the optimal amount of shards for each process, and begin booting them sequentially

#

@earnest phoenix that error doesnt tell us anything, we need more information

#

@earnest phoenix again, that doesnt tell us anything

#

we need more information, such as full error, what and how you installed, where you are hosting your bot

#

thats not the full error

#

post the full error

mossy vine
#

iirc you get that error when required build tools are missing

#

pastebin

quartz kindle
#

it has to be long, otherwise it doesnt explain whats going on

edgy orchid
#

How do I define callback in "fs..readFile(path, callback)"

#

??

quartz kindle
#

do you know what a callback is? @edgy orchid

#

@earnest phoenix try enable-pnpm in the glitch console

edgy orchid
#

somewhat

quartz kindle
#

@edgy orchid a callback is a function that you give it, to be executed after the first function is done

#
myFunction("something",functionThatWillRunAfterMyFunctionFinishes())```
#

it can be used in many different ways, the most common one being like this

#
myFunction("something", function(response) {
    // do something with response
})```
amber fractal
#

Arent promises better now though?

quartz kindle
#

define "better"

amber fractal
#

I know callbacks are relevant

#

Idk, I guess it depends

#

I see most going to promises

#

I havent used a callback in a while

quartz kindle
#

promises were created to solve many problems with callbacks, and in general they are an improvement to readability and code flow, but sacrifice performance for it

#

like basically everything in programming

#

the easier it gets, the slower it becomes

unique nimbus
#

okay idfk who uses python enough to help me but I want to list all the file sizes which ends with .mp3, .webm, .m4a

#

and then get the overall size

amber fractal
#

I can tell you how in js mmulu

slender thistle
#

@unique nimbus os.listdir probably

inner jewel
#

promises are just sugar for callbacks

unique nimbus
#

I am trying that it works and lists shit in the folder with the mp3 webm m4a

#

however it doesnt work and I am to retarded to figure out how

slender thistle
#

"doesn't work"
could you be any more vague

unique nimbus
#

slice indices must be integers or None or have an index method

for file in os.listdir("./"):
                if file.endswith(".webm",".mp3",".m4a"):
                    yes = os.path.getsize(file)
                    a = size(yes)
                    embed=discord.Embed(title="Deleting Files",description=f"File Size:{a}", color=discord.Color(randint(0x0, 0xFFFFFF)))
                    await ctx.send(embed=embed)
#

thats the error above

#

thats the code

#

however I need to redo the whole shit again

#

However I am to retarded to recognise the problem

#

so cz_ok

slender thistle
#

Make .endswith args into one tuple/list

unique nimbus
#

the command works but says nothing needs to be deleted eventhough there are files which ends with .webm, .mp3, .m4a

#

give me a sec

#

nope

#

doesnt work

slender thistle
#

Any errors

unique nimbus
#

none

#

it would send

slender thistle
#

Wrong directory probably

inner jewel
#

try debugging it

unique nimbus
#

nope

#

same directory

inner jewel
#

prints/...

unique nimbus
#

yes it works

#

it goes to else

#

wait

slender thistle
#

print the os.listdir thing

unique nimbus
#

its in the right directory

#

@slender thistle

slender thistle
#

Let's start poking fingers at random things.
What is size

unique nimbus
#

its an addon which basically changes interger from getsize into shit like 100M 1GB

#

etc

#

removing it doesnt make it work either so its not from that

#

@slender thistle

quartz kindle
#

welp fuck me

#

the /gateway/bot rate limit is 2/5s lul

onyx summit
#

Have a remote database so the clients can know if they have to wait

#

Just an idea

quartz kindle
#

thats what im trying to avoid xd

onyx summit
#

I mean, most bots need a database anyway, so I don't see the problem if you create a new table

quartz kindle
#

i mean, my queue system works pretty well, but like

#

my problem rn is that my lockfile doesnt get deleted if i restart the process with a bad timing

#

and then the processes wait forever and never login, because they cant secure a lockfile

#

i need to hook into pm2's shutdown signal

inner jewel
#

if you want stuff to scale you shouldn't be using file locks anyway

#

because as soon as you have more than one server that's 100% useless

quartz kindle
#

yes, thats a problem for another day

onyx summit
#

Wouldn't a queue like database make sense?

quartz kindle
#

it would, but it requires setting up a separate thing

onyx summit
#

Ur bot doesn't have a db?

amber fractal
#

Iirc tim used json actually

#

Not sure if he updated out of that

#

But it worked

quartz kindle
#

my old code still uses a json db yes

onyx summit
#

Json is fine but gets very tricky when you wanna scale imo

amber fractal
#

Rewriting?

quartz kindle
#

i wanna finish my setup before i start reworking it

#

im making a weird ass lib

#

im gonna call it djs-shanenigans

amber fractal
#

Sounds like fun

onyx summit
#

If I ever need to scale my bot it's gonna be the best project I ever made.

  • job queue
  • weird CDN with one server
  • a server that streams files to voicechannels
#

But blobdoubt that's ever happening lmao

quartz kindle
#

i probably wont even need it either, but i wanna do it for the sake of doing it

#

because thats what programmers do

#

"why? because i can"

inner jewel
#

the way i've always scaled bots is just throwing better hardware at it mmLol

topaz fjord
#

Seems like a good solution tbh

earnest phoenix
#

NASA it is

onyx summit
#

At some point you can't run everything on a single server

#

or it's cheaper to break your bot down to multiple small ones

sage bobcat
#

One message removed from a suspended account.

#

One message removed from a suspended account.

dusk gale
#

My bot has a command that has the ability to assign a random role to every person in a server that does not have a role.
does that fall under API abuse?

amber fractal
#

You should do it over time and not all at once

dusk gale
#

how much time would you suggest to be fair

amber fractal
#

@sage bobcat yes, you never call the function

#

Whever I dont know the rate limit for something or think it might be abuse I just do it 1 per second

loud salmon
#

n o tarp

amber fractal
#

Idk if it's api abuse tho mmulu

loud salmon
#

thats bad

amber fractal
#

Shhh it's ok

loud salmon
#

@dusk gale once per minute

amber fractal
#

Per minute?

#

What

dusk gale
#

alright ill do that i guess

amber fractal
#

But like

#

Bruh

dusk gale
#

can i cut that at all?

#

thats over an hour for 60+

sage bobcat
#

One message removed from a suspended account.

loud salmon
#

¯_(ツ)_/¯

#

not sure tbh

sage bobcat
#

One message removed from a suspended account.

amber fractal
#

@sage bobcat then show updated code

inner jewel
#

@onyx summit running everything on a single server has worked pretty well so far mmLol

sage bobcat
#

One message removed from a suspended account.

amber fractal
#

You never called the function

#

Also

sage bobcat
#

One message removed from a suspended account.

topaz fjord
#

you didn't

amber fractal
#

You're missing a }

inner jewel
#

you're converting the function to a string

sage bobcat
#

One message removed from a suspended account.

topaz fjord
#

rollDie()

#

not rollDie

sage bobcat
#

One message removed from a suspended account.

inner jewel
#

it's not missing a }

sage bobcat
#

One message removed from a suspended account.

inner jewel
#
const Discord = require('discord.js');
module.exports.run = async (client, message, args) => {
  function rollDie(sides = 6) { Math.floor(Math.random() * sides) + 1; }
  message.channel.send(`you rolled a ${rollDie}!`)
}

module.exports.help = {
  name : "roll"
} ```
topaz fjord
#

god fuck syntax highlighting

#

wth

sage bobcat
#

One message removed from a suspended account.

#

One message removed from a suspended account.

amber fractal
#

Oh thats why

inner jewel
#

```LANG
CODE```

sage bobcat
#

One message removed from a suspended account.

amber fractal
#

Mobile

topaz fjord
#

```js ```

sage bobcat
#

One message removed from a suspended account.

amber fractal
#

It looks weird lmao

sage bobcat
#

One message removed from a suspended account.

#

One message removed from a suspended account.

topaz fjord
inner jewel
#

```js
console.log("hello world", 123);```

console.log("hello world", 123);```

vs

\`\`\`
console.log("hello world", 123);\`\`\`

console.log("hello world", 123);```

amber fractal
#

I wish mobile had syntax highlighting already :(

topaz fjord
#

wait is this color blind mode

#

how 2 turn off

sage bobcat
#

One message removed from a suspended account.

#

One message removed from a suspended account.

inner jewel
#

@topaz fjord scares why

sage bobcat
#

One message removed from a suspended account.

amber fractal
#

Return

inner jewel
#

it's just clang-format'd code

amber fractal
#

Make a new line after js

topaz fjord
#

i don't like the way it looks

sage bobcat
#

One message removed from a suspended account.

#

One message removed from a suspended account.

#

One message removed from a suspended account.

#

One message removed from a suspended account.

topaz fjord
#

that send isn't valid

sage bobcat
#

One message removed from a suspended account.