#development

1 messages · Page 1216 of 1

low shard
#

the bot can share

earnest phoenix
#

??

opal plank
#

what

low shard
#

then your bot doesn't share the server with the emoji

#

wtf

opal plank
#

yes

#

emojis are stored in servers/guilds

#

if your bot isnt there, it doesnt have access to it

low shard
#

ohhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh

opal plank
#

put the bot on the same server the emoji you want is in

low shard
#

ok

drifting wedge
#

how do i make bot screat role on join with certain perms?

#

create*

ancient jay
#

Code language?

dapper vapor
#

@dapper vapor

drifting wedge
#

Code language?
@ancient jay py

mossy tusk
#

Ho

#

Hi

drifting wedge
#

it works pog

wooden ember
drifting wedge
#

how can i get the upvotes and # of replies on a reddit post?

nimble kiln
#

no idea

drifting wedge
#

using praw

wooden ember
#

lol

true pilot
earnest phoenix
#

ask it nicely to work

wooden ember
#

mmm that never works threten it with a shovel

drifting wedge
#

can my bot be rate limited for deleting messages?

earnest phoenix
#

it can be ratelimited for anything

drifting wedge
#

it can be ratelimited for anything
@earnest phoenix whats the limit?

earnest phoenix
#

it isn't baked in

drifting wedge
#

like for messages deleted?

#

ok

#

well how much is normal?

#

like how much can i do safely

earnest phoenix
#

like i said

#

it isn't baked in, there's no certain limit

drifting wedge
#

yea ok

earnest phoenix
#

follow the ratelimits returned in the headers

drifting wedge
#

?

earnest phoenix
#

if you're using a library, chances are it already handles it for you

drifting wedge
#

but its ratelimiting me

#

wait

#

is it the lib?

#

not discord?

earnest phoenix
#

huh?

drifting wedge
#

also whats the message author pfp?

#

like if i were to get the message authors icon url?

#

wut us ut?

#

i tried {ctx.author.icon_url}

faint prism
#

Don't abuse the API, and you won't get rate limited

small prairie
#

Um fs.createFileStream
should make a file write?

#

i mean if there is no file

gilded axle
#

i tried {ctx.author.icon_url}
@drifting wedge its avatar_url

pale vessel
#

isn't icon_url for guilds

gilded axle
#

he said

also whats the message author pfp?
like if i were to get the message authors icon url?

#

But yeh its for guilds, there are also kwargs on discord.Embed methods

drifting wedge
#

sorry i mean avatar

small prairie
#

oof

#

fs.creatfilestream is always throwing no file/directory found if its not in the same directory at that command

#

any way to fix this?

#

Its creating file if its the same version too

#

not if it isnt

drifting wedge
#

i have a property called random color

#

embed = discord.Embed(
colour = discord.Colour.rcolor()
)

#

does this work

#

i did rcolor = random_color

#

no attribute

#

py btw

errant perch
#

how do i convert a nested array to a normal array

quartz kindle
#

@small prairie there is no filestream

#

there is readstream and writestream

#

@errant perch you can use array.flat() in node v12+

small prairie
#

rip i meant write

#

var fileName=${__dirname}/recordings/${Date.now()}.pcm
let writeStream = require('fs').createWriteStream(fileName)

#

this is what im using
This should work right? @quartz kindle

quartz kindle
#

yes it should work, as long as the directory is correct

#

__dirname refers to the directory of the current file

small prairie
#

Yea so the only problems can be in recordings/${Date.now()}.pcm part

quartz kindle
#

how is your folder structure?

#

or just console.log(${__dirname}/recordings/${Date.now()}.pcm)

#

to make sure the full path is correct

small prairie
#

[Error: ENOENT: no such file or directory, open 'root/marlowe/recordings/1599262322574.pcm']

#

Wait what

#

Oh

#

bope

#

nvm

#

still doesnt work

quartz kindle
#

make sure the "recordings" folder exists

small prairie
#

it does

quartz kindle
#

if you're hosting in a vps, make sure it exists in the vps as well

small prairie
#

i guess that makes it exist?

#

i mean

quartz kindle
#

what does console.log show?

small prairie
#

console.log for?

quartz kindle
#

${__dirname}/recordings/${Date.now()}.pcm

small prairie
#

a sec

errant perch
#

how do i convert a array thats like [{ }] to just {}

quartz kindle
#

array[0]

errant perch
#

it returns as undefined

small prairie
#

Im im dumb

#

Anyways thanks for trying to help me @quartz kindle

#

i just forgot a /

#

;-;

errant perch
#

WAIT

#

GOT IT

#

TTHANKS

#

thanks

quartz kindle
#

lmao np both

small prairie
#

2 for 1 lmao

errant perch
#

dinger

#

i swear it feels like i could solve world hunger but cant solve some of the smallest problems

hoary thunder
#

what am i doing wrong

split hazel
#

hover over the red text and tell us what it says

hoary thunder
#

it says depandancy not found

ionic dawn
earnest phoenix
#

why don't you debug it

#

log the object

#

see what it actually returns

quartz kindle
hoary thunder
#

@earnest phoenix do u want me to try it or where u talking to someone else

earnest phoenix
#

was talking to vo1d

#

as for your issue

#

you probably didn't add the maven repo JDA is in

modest smelt
#

hey guys

#

i have a question

#

if i want the user to tell me a welcome channel how do i get the id of the channel?

#

in discordpy

earnest phoenix
#

you already asked this and i sent you a doc link covering it

modest smelt
#

i looked at it

#

idk how to

earnest phoenix
#

there's literally an example on the page

modest smelt
#

can u send link agaain

#

lemme see again

modest smelt
#

thanks

earnest phoenix
#

actually read what it says on the page, not just the colorful code blocks

lone harness
#

I wonder what is the badge limit in a team

#

Does anyone know

earnest phoenix
#

??

split hazel
#

you can't get the badge anymore anyways

quartz kindle
#

you can just use message.channel_mentions

lone harness
#

I sent before @split hazel Before 19 August

earnest phoenix
#

dpy has a command handler that's built for parsing positional arguments, it's good practice to use that instead

#

doesn't matter if you submitted the bot before the date

#

dev badges cannot be obtained anymore

split hazel
#

we're not affiliated with discord

lone harness
#

okey thanks

small prairie
#

Hola

#

Okay so the discord.js's VoiceReciever class or whatever

#

How to play the opus or PCM on these?

#

Anyone experienced with recieving audio on d.js?

earnest phoenix
#

you need to first send some audio to receive

pale vessel
#

VoiceReciever? isn't that for receiving?

small prairie
#

Yea i have like 5 megabits of stuff

#

i was able to recieve and store

#

but I dont understand what format it stored in

earnest phoenix
#

quite possibly opus

#

check it with ffprobe

small prairie
#

Is opus like Raw or different?

earnest phoenix
#

encoding used by discord

small prairie
#

Okay

earnest phoenix
#

but like i said you can probably check out the format with ffprobe

small prairie
#

Um never used that

earnest phoenix
#

there's a first for everything

small prairie
#

Um nodejs one or apt-get linux one

#

dont know if they even are different

earnest phoenix
midnight blaze
#

I am trying to make a command that creates a canvas attachement and if you react to get one page ahead/backwards, it should edit the embed and create an other embed with a canvas as an attachement. The thing is, when I go forward, the old canvas attachement is still there. My idea, when I go forward(with the reaction) it should delete all the last attachments, Does this look good?


    forwards.on('collect', (r, u) => {
      
let messages_ = message.channel.messages.fetch({ limit: 10 }).then( message =>{
    let findImage = message.attachments.find(attachment => attachment.filename.endsWith('png') || attachment.filename.endsWith('jpg') || attachment.filename.endsWith('gif'));
    if(message.attachments.size > 0){
    if (findImage !== null) {
      message.delete();
    }
  }
})
.....
}
earnest phoenix
small prairie
#

sad all say invalid data format

earnest phoenix
#

you cannot edit message attachments @midnight blaze

midnight blaze
#

I know

small prairie
#

Do i have to fracefully let it end?

#

Gracefully

midnight blaze
#

I have made an embed within a canvas

#

it edits the embed, then the canvas is still there

small prairie
#

How do i handle/end it if i have done the "Manually" option?

midnight blaze
#

the old canvas

#

the thing is, I have to delete the old canvas

earnest phoenix
#

ctrl+c should work @small prairie

small prairie
#

Ah so just killing the bot lmao

midnight blaze
#

I think you clearly got that I knew that you can not edit canvas..

earnest phoenix
#

oh wait

#

what are you talking about

#

ffprobe or what

small prairie
#

noi ffprobe said all my files contains invalid data
i suppose they are corrupted?

midnight blaze
quartz kindle
#

@midnight blaze check if message.attachments has a length bigger than 0, if it does, delete it and send a new one, otherwise edit it

midnight blaze
#

when I go to page two

#

@quartz kindle ok, sounds good

#

thanks

small prairie
#

Is there a "endStream" function or something?

quartz kindle
#

destroy the stream

small prairie
#

function for that?

#

i just destroyed the bot everytime i had to end ;-;

#

since im testing rn

#

what its still saying invalid data

quartz kindle
#

stream = connection.receiver.createStream()
stream.pipe(writeStream)
once you want it to end: stream.destroy()

small prairie
#

How can i use the Opus data?

midnight blaze
#
if(message.attachments.size > 0){
   
    message.delete();
    }else{
        msg.edit(embed2)}

Embed2 => is the embed with the canvas.
If I go forward, the old canvas(attachement) is still there and it wont be deleted.

#

Should I fetch the messages?

quartz kindle
#

@small prairie try downloading it to your pc and opening the file with vlc or something that supports opus

small prairie
#

VLC played nothing and audacity just registered noise

quartz kindle
#

try setting the receiver to pcm mode

small prairie
#

That didnt even open with VLC

#

Oh btw Audacity kept telling me i have to import these files as RAW files

small prairie
#

yea how can i use that opus?

earnest phoenix
#

huh?

quartz kindle
#

vlc should support playing opus streams

small prairie
#

One sec

#

lemme send the opus file from my VPS

earnest phoenix
#

you can also just set the mode to pcm when receiving audio

#

opus will automatically be decoded to pcm

small prairie
#

I dont really know much about audio stuff
So if i every want that back as a file which can be played through normal MP players what should be better?

earnest phoenix
#

opus is going to be lighter for storage

small prairie
#

Yea i observed that

#

alot of difference

#

this is what i just got from VPS

#

Wait is this code even correct?

if(!msg.member.roles.cache.has("737346838063087629"))
{
msg.reply("You must have Trending Artist to use this category ( Level 10 )")
}
else
{
if(!msg.member.voice)
{
msg.reply("You must be in a voice channel to start recording")
return
}
        var voiceChannel = await msg.member.voice.channel.join()
        var reciever = voiceChannel.receiver
var fileName=`/root/marlowe/recordings/${msg.author.id}-${msg.guild.id}-${Date.now()}.opus`
fs.writeFile(fileName,"",err=>console.log(err))
                let us = reciever.createStream(msg.author, {mode: 'opus', end: 'manual'})
                let ws = require('fs').createWriteStream(fileName)

us.on("data", (chunk) => {
console.log(chunk)
      ws.write(chunk)
})

setTimeout(()=>{
ws.destroy()
us.destroy()
},10*1000)
}
earnest phoenix
#

not sure, but can't you just pipe the stream

small prairie
#

Rip i thought that if i do that i'll record audio even when i aint speaking but i just realized it wont ;-;

#

changing to pipe

#

Done

#

So its pretty basic normal i guess it should work right?

earnest phoenix
#

i hope so

#

if nothing else, try pcm

small prairie
#

Alright

#

there isnt any problem with extension tho right?

earnest phoenix
#

extension shouldn't matter in the slightest

#

it's just an instruction to the os on how it should behave with the file

small prairie
#

Rip it isnt working

#

setTimeout(()=>{
ws.destroy()
us.destroy()
},10*1000)

#

the file was less then 1 second long

#

how

earnest phoenix
#

is it always 30kb

#

i remember that a discord limitation for bots is that they have to send audio to receive first

#

not sure if that's still in place

midnight blaze
#

If I go to page two, the embed now will be edited, the canvas doesnt change tho, it stays the same, and I dont see how. I literally change the canvas before the edit.

small prairie
#

i remember that a discord limitation for bots is that they have to send audio to receive first
@earnest phoenix That makes sense
i have to use my music feature every time i have to use that

midnight blaze
#

@quartz kindle sry for ping, but do you have any idea, what the cause could be?

earnest phoenix
#

are you trying to change the image on every page

midnight blaze
#

yep

earnest phoenix
#

i told you that you can't edit attachments

midnight blaze
#

but I just did

#

page one to page two

earnest phoenix
#

no you didn't

midnight blaze
#

I deleted it

earnest phoenix
#

editing attachments is not possible

midnight blaze
#

I create an attachement

#

delete it, when it gets to page two

#

create a new attachement

earnest phoenix
#

you're sending a new message for each attachment

#

you're not editing them

midnight blaze
#

hmm 🤔 damn

earnest phoenix
#

you're overengineering this

#

just send the images in a private discord, keep a reference to the urls in your code and put them in the image url of the embed

#

you can update them every few hours

#

(to keep the stats you have at the bottom up to date)

small prairie
#

Oof

#

whats wrong with this ;-;

earnest phoenix
#

can you send the file over?

midnight blaze
#

thanks for that nice idea O:

small prairie
#

Somehow its almost 20 times to size of opus file

#

same length

earnest phoenix
#

ffprobe returns invalid data too

small prairie
#

Yea

earnest phoenix
#

did you do the sending audio first thingy

small prairie
#

Yes

earnest phoenix
#

that's extremely weird

small prairie
#

if i dont there are 0 bytes

#

Its recieving but not encoding?

#

Should i reinstall packages

earnest phoenix
#

i'll see what hxd returns

small prairie
#

Whats that?

earnest phoenix
#

a hex editor

small prairie
#

Noice

#

GOT IT

#

@earnest phoenix IT worked with audacity

earnest phoenix
#

oh

#

nice

small prairie
#

is there any node module to encode it to Mp4 which discord natively supports?

earnest phoenix
#

it might be because you're writing directly from discord so the file header is missing:

#

audacity just defaults it

small prairie
#

Ah

#

Nah

#

even audicaty cant read

#

i do import as raw

#

then it knows its RAW so

#

it does everything on its own

#

But why isnt Opus working?

#

this is much heavier for future

earnest phoenix
#

probably has to be decoded with specific settings

small prairie
#

is there any node module to encode it to Mp3 which discord natively supports?

earnest phoenix
#

from djs src: ```js
new prism.opus.Decoder({ channels: 2, rate: 48000, frameSize: 960 });

#

what do you mean with the last part

#

which discord natively supports

small prairie
#

I mean you can directly play from discord

earnest phoenix
#

oh wait

#

yeah

#

i mean

#

i don't know

#

sec

small prairie
#

mp3's and vids you can directlyt play without installing

#

Just download is enoughf or them :/

#

from djs src: ```js
new prism.opus.Decoder({ channels: 2, rate: 48000, frameSize: 960 });

@earnest phoenix Oh damn thats some important things

charred geyser
#

can anyone point me in the direction for setting up a web interface for my discord bot

#

like a settings dashboard

small prairie
#

If its that simple i can keep it as PCM and just double decode it to MP3 later

earnest phoenix
#

ffmpeg just errors out

small prairie
#

Lmao

earnest phoenix
#

can anyone point me in the direction for setting up a web interface for my discord bot
@charred geyser it's much more complicated than you think

small prairie
#

its very very complicated ;-;

charred geyser
#

rip

small prairie
#

took me hours to make 1 page which i never used

#

days*

#

weeks

charred geyser
#

bruh

earnest phoenix
small prairie
#

whats the rate and channels for MP3
maybe if i decode for that it directly makes mp3 compatibility?

earnest phoenix
#

there's no specific one

small prairie
#

Yea theres like this huge range or something

drifting wedge
#

how do i make my bot leave a vc after 2 mins if music isnt being played or if its alone?

#

usig py

small prairie
#

wait thats bitrate

#

anyways thanks for the help man @earnest phoenix

earnest phoenix
#

seems that voice receiving in djs is a bit fucked

opaque seal
#

In any library it is

#

discord doesn't provide much documentation about that himself

#

from what I've heard

earnest phoenix
#

how to count user's nickname lenght

nick: Must be 32 or fewer in length.

opaque seal
#

what's a good way to make a status webpage for a bot, where it displays the uptime of the bot, like discord does here https://discordstatus.com/

steep shale
#

how to count user's nickname lenght
@earnest phoenix what library

earnest phoenix
#

discord.js

steep shale
#

nvm

earnest phoenix
#

lol

opaque seal
#

nickname.length? weirdsip

earnest phoenix
#

yeah

steep shale
#

on python its len(member.display_name) but idk js

earnest phoenix
#

hmmm

#

what's a good way to make a status webpage for a bot, where it displays the uptime of the bot, like discord does here https://discordstatus.com/
@opaque seal it's not what discord made, they use statuspage

#

im doing a afk command

opaque seal
#

@opaque seal it's not what discord made, they use statuspage
what's that

earnest phoenix
#

when they into afk its gonna change nickname to [AFK] name

#

you can also see it appear on cloudflare's status site

steep shale
#

Oh thats a cool idea

earnest phoenix
opaque seal
#

Uhm, can I use that for my bot too?

steep shale
#

Might add that to my bot, aint too hard

earnest phoenix
#

sure

opaque seal
#

cool

#

thanks

small prairie
#

sure
@earnest phoenix read that issue
Exact same thing as me

lavish tinsel
#

So

#

I have question

#

On next thing I work on

steep shale
#

k

opaque seal
steep shale
#

what is it

lavish tinsel
#

Welcome command thing or triggered auto mod

#

I’ll test it on my private bot that’s somehow better then my public

steep shale
#

what do you want?

lavish tinsel
#

Than

steep shale
#

a welcome message?

lavish tinsel
#

I don’t know

#

That one?

#

Is that what you choose

steep shale
#

bruh

#

What are you asking

lavish tinsel
#

I’m asking which one

#

Should I do

steep shale
#

Idk what you want to do with them

#

Sure a welcome message

lavish tinsel
#

Ok

#

Well I’ll get to work once I finish my play list

#

Thank

#

You

#

:0 can I add my private bot to this server Thonk

midnight blaze
#

is there a possibility to ignore the first fetched message?

lavish tinsel
#

Unless they mean the website

midnight blaze
#

message.channel.messages.fetch({ limit: 2 }).then(msg => { msg.forEach(m => { (m.attachments)?m.delete():console.log(1) }); });

I am trying to ignore the first message. It should jump to the next one

steep shale
#

:0 can I add my private bot to this server Thonk
@lavish tinsel you have to wait

#

Like a month +

lavish tinsel
#

@lavish tinsel you have to wait
@steep shale oh

earnest phoenix
#

Because I just saw this
@lavish tinsel That's my bot! :D

lavish tinsel
#

I have been here for a month I think

#

Wow nice

#

You added it to the website?

#

Or this server

#

Because I’m confused

steep shale
#

I mean you have to wait a month +, once you added the bot

#

To the website

lavish tinsel
#

I mean you have to wait a month +, once you added the bot
@steep shale OH you mean like when the bot is registered on the website I have to wait a month to invite it here?

steep shale
#

yeah

#

To get approved

lavish tinsel
#

But I didn’t list it on top.gg

#

..

#

E

#

I’m sad now

steep shale
#

Then list it?

lavish tinsel
#

Lol no it’s my priv bot

#

E

steep shale
#

Bots here are only the approved ones from this server

lavish tinsel
#

Oh

#

So nvm then

carmine summit
#

How do I check if a user leaves the VC

sour pelican
#

Back is this general chat?

lavish tinsel
#

No

#

The general chat is off topic channel

#

From what I see

sour pelican
#

Where is the general chat please

lavish tinsel
#

I just said

#

Off topic

carmine summit
#

uhh

#

How do I check if a user leaves the VC

earnest phoenix
#

in which library

carmine summit
#

discord js

lavish tinsel
#

I don’t know what yoh mean

sour pelican
#

Sorry, I have to take a little rest

lavish tinsel
#

Ok

lavish tinsel
#

Ok my playlist is done time to get work

earnest phoenix
#

the channel in the new voice state will be null if they left a channel

sour pelican
#

good bye

lavish tinsel
#

Ok

drifting wedge
#

how do i add cooldowns?

#

and how do i import it?

opaque seal
#

@opaque seal it's not what discord made, they use statuspage
@earnest phoenix wait isn't that automatic, doesn't statuspage try to ping a website to see if it is online?

steep shale
#
from discord.ext.commands import cooldown, BucketType

...
@cooldown(amount_of_uses_to_trigger_the_cooldown, seconds_to_wait, BucketType.user/guild/channel)```
#

@drifting wedge

drifting wedge
#

ty

steep shale
#

So example if I wanted a 2 second cooldown, after 1 use for a user only would be ```py
from discord.ext.commands import cooldown, BucketType

...
@cooldown(1, 2.0, BucketType.user)```

midnight blaze
#

@earnest phoenix are you here? 🤔

#

I think I managed to do it 👀

#

do you want to see it?

#

it looks sketchy tho

earnest phoenix
#

@earnest phoenix wait isn't that automatic, doesn't statuspage try to ping a website to see if it is online?
@opaque seal manually updated, that's why the status page is so slow on real time updates

#

also, sure davon

midnight blaze
#

testing 1

opaque seal
#

@opaque seal manually updated, that's why the status page is so slow on real time updates
@earnest phoenix that's kinda useles, I thought the whole purpouse of a status page was to automatically check the status of an application every x minutes

drifting wedge
#

do events decorators have ()?

steep shale
#

nah

drifting wedge
#

wut abt for cogs?

earnest phoenix
#

Hello

drifting wedge
#

@steep shale

steep shale
#

Yeah

drifting wedge
#

do cogs events

#

have ()

earnest phoenix
#

Yeah

drifting wedge
#

but not normal events?

steep shale
#
from discord.ext.commands import Cog

@Cog.listener()```
drifting wedge
#

wut abouyt commands.cog.listener?

steep shale
#

Remove the commands from the import

#
from discord.ext import commands

@commands.Cog.listener()```
drifting wedge
#

so i dont need it?

#

at all?

steep shale
#

Need what?

drifting wedge
#

from discord.ext import commands

steep shale
#

yeah you do need that

drifting wedge
#

o ok

steep shale
#

Or if you want it to be shorter without the @orchid spindlends... just do the first option

#

@commands...*

#

Mans really named himself Comma

drifting wedge
#

lol

sick cloud
#

and thats why you always escape possible mentions

carmine summit
#
code = ABC
if (!code == /[A-Za-z]{4}/i) {
    message.channel.send('hmm... That code seems fishy')
    return
} else {
    message.channel.send('success')
}
//returns success

Why this code returns success even though the code is 1 letter short?

steep shale
#

What language even is that

drifting wedge
#

my commands in cogs arent working

#

it says command not found

sweet kestrel
#

guys

lavish tinsel
#

ok well im done with my welcome message thing @steep shale

sweet kestrel
#

I am using python

lavish tinsel
#

ok

sweet kestrel
#

I want my bot message to be deleted after 3 seconds

steep shale
#

my commands in cogs arent working
@drifting wedge show in a bin

sweet kestrel
#

my command is not working

steep shale
#

@sweet kestrel show the command code

sweet kestrel
#
 await client.delete_message()
        await asyncio.sleep(4)

#

lmao

drifting wedge
#

Ignoring exception in command None:
discord.ext.commands.errors.CommandNotFound: Command "stats" is not found

#

like this is the rror

#
@cooldown(1, 0.5, BucketType.guild)
async def stats(ctx):
    serverCount = len(commands.guilds)
    memberCount = len(commands.users)

    embed = discord.Embed(
        colour = discord.Colour.blue()
    )

    embed.set_author(name='Arch | Stats', icon_url=f"{commands.user.avatar_url}")
    embed.add_field(name="Total Servers:", value=serverCount)
    embed.add_field(name="Total Users:", value=memberCount)
    embed.set_thumbnail(url=f"https://imgur.com/kmtYlLV.jpg")

    embed.set_footer(text=f"{ctx.guild.name}", icon_url=f"{ctx.guild.icon_url}")
    embed.timestamp = datetime.datetime.utcnow()

    await ctx.send(embed=embed)```
sweet kestrel
#
await message.channel.send('bruh')
        await message.delete()
        await client.delete_message()
        await asyncio.sleep(4)```
#

this is the cod

#

this error shows

#

up

#

@steep shale

steep shale
#

bruh

sweet kestrel
#

?

steep shale
#

await message.channel.send('bruh', delete_after=4)

sweet kestrel
#

...

#

I want it to be delete message

#

not send message

steep shale
#

And message.content.delete doesnt work?

sweet kestrel
#

like after the bot sent bruh. bruh gets deleted in

#

3

#

seconds

steep shale
#

So do what I said

sweet kestrel
#

I actually havent tried message.content.delete

steep shale
#

await message.channel.send('bruh', delete_after=4)

random blaze
#

yo i need help

#

im coding a bot

sweet kestrel
#

ok thankyou @steep shale let me try that

random blaze
#

and i need to get the id of a channel that they specify

#

how to do that on discordpy

#

@slender thistle

scenic kelp
#

-atmods

gilded plankBOT
#

Please do not mention (ping) more than one or two moderators for help, unless there is an emergency.

Here are some examples of emergencies:

  • Raids / Multiple members mass spamming.
  • Severe disruption of Discord's ToS (NSFW content, etc)
  • Anything that requires more than 2 moderators to handle.
random blaze
#

oop sorru

#

😦

#

iit was accident

#

that y i deleyted it

#

sorry

scenic kelp
#

deleting it makes it worse

random blaze
#

oop

#

sorry

#

and i need to get the id of a channel that they specify
how to do that on discordpy

#

pls help m e

sweet kestrel
#

well

#

you need to do get id

random blaze
#

how

sweet kestrel
#

and then the copy the channel id

random blaze
#

wut is sytanx?

sweet kestrel
#

like that

random blaze
#

no like how to get the channel.uid

sweet kestrel
#

?

random blaze
sweet kestrel
#

lol, you need to do right click on the channel

steep shale
sweet kestrel
#

the choose

#

copy od

#

id

thick gull
#

@sweet kestrel he means code

random blaze
#

no like from a bot

sweet kestrel
#

oh

#

lmao

random blaze
#

if im not in the server i cant do that

thick gull
#

in discord py

random blaze
#

it needs to be automated

#

ues

#

yes @thick gull

steep shale
#

What are you trying to do?

thick gull
#

yea I don’t use py

#

get a channel ID

sweet kestrel
#

i do lol

random blaze
#

basically i want to make a bbot that welcomes a user

steep shale
#

With what

#

Use on_member_join

sweet kestrel
#

oh

#

yeah

#

use that

random blaze
#

so i need to get the channel id so i can send the message to the specific channel

sweet kestrel
#

I did that

random blaze
#

Use on_member_join
@steep shale ik that

steep shale
#

channel = bot.get_channel(the_id)

#

Or probably channel = await bot.get_channel(the_id)

random blaze
#

wutsw the id?\

#

how do we get the id?

steep shale
#

turn on developer mode

random blaze
#

from the bot

#

i need the bot to do that

steep shale
#

yeah

thick gull
#

#starboard would return <#ID> but I’m not sure how it works with py

steep shale
#

Turn on developer mode

thick gull
#

no

#

he’s trying multi guild

#

not specific

random blaze
#

yes

#

the thing that @steep shale is saying is only for a specific server

thick gull
#

you might wanna try the py server

steep shale
#

bruh

thick gull
#

idk

steep shale
#

Use a database

thick gull
#

no

steep shale
#

yes

thick gull
#

he needs to GET THE ID

steep shale
#

Thats what I did

thick gull
#

not store it

#

he needs to GET it

steep shale
#

use a database

thick gull
#

that’s what he’s asking rn

#

yes you need a db

#

but he’s asking for how to get it

steep shale
#

what database is he using

thick gull
#

with djs I could just say trim() it but idk how py works

random blaze
#

json

thick gull
random blaze
#

json is easiest to use

#

sql = too old

earnest phoenix
#

what

digital ibex
#

what r u trying to do?

earnest phoenix
#

that's some retarded logic

digital ibex
#

json is annoying

random blaze
#

im trying to make a bot that welcomes a user

earnest phoenix
#

json is not a database and it never will be one

random blaze
#

into a specific server that the user specifies

#

thats what im trying to do

steep shale
#

thats dumb as hell

digital ibex
#

what library?

random blaze
#

discordpu

#

py*

steep shale
#

json is easiest to use
@random blaze dumb asf

random blaze
#

idrc

steep shale
#

Im telling you to use a database

#

Are you using aiosqlite?

#

Or somethin

thick gull
#

you can make yourself a json db, but you need to add a lot of things, so it wont get corrupted. MongoDb does that for you already

#

stole this

sweet kestrel
#

help

digital ibex
#

listen to on_member_join to check when a member has joined the server

thick gull
#

but yea

earnest phoenix
#

mongo doesn't store in json

thick gull
#

it’s similar

#

Bson

earnest phoenix
#

yes

sweet kestrel
#

how do i do member.mention in a f string?

#

@thorn owl

random blaze
#

can we answer my ques tion

thick gull
#

I completely stole that

digital ibex
#

i did

random blaze
#

not abotu json vs SQL

steep shale
#

you can make yourself a json db, but you need to add a lot of things, so it wont get corrupted. MongoDb does that for you already
@thick gull mongodb is trash

random blaze
#

@digital ibex u didn't

digital ibex
#

its not

thick gull
sweet kestrel
#

@steep shale help lmao

random blaze
#

i need to get the channel id from the channel that the user specifies

steep shale
#

can we answer my ques tion
@random blaze i just asked what database you’re using

thick gull
#

imo py is trash too

sweet kestrel
#

how do i make a f string and do member.mention?

steep shale
#

f"{member.mention}"

thick gull
#

message.mentions?

#

huh

random blaze
#

uh

sweet kestrel
#

huh?

random blaze
#

jspn'

sweet kestrel
#

wait what?

thick gull
#

idk what language your using

sweet kestrel
#

which one

random blaze
#

i need to get the channel id from the channel that the user specifies
@random blaze SOMEONE HELP ME

sweet kestrel
#

python

steep shale
#

Json isnt good for that

sweet kestrel
#

I am using python

thick gull
#

oh ok

steep shale
#

Use a database

thick gull
#

why are there so many py developers awake

sweet kestrel
#

do json file or database

steep shale
#

If you want people to set a specific channel with a command, use a database

digital ibex
#

thats very broad, externqlly. its different logics mashed up together

sweet kestrel
#

lol

random blaze
#

@digital ibex wdym

sweet kestrel
#

what th

digital ibex
#

like

random blaze
#

the user gives me a channel, i need to get the id of the channel

digital ibex
#

idk how to explain it

steep shale
#

If you want people to set a specific channel with a command, use a database

digital ibex
#

its like, how do i code in a programming language

thick gull
#

ok he didn’t ask about storing it

#

he asked how to get the id of the channel

digital ibex
#

theres many answers and loads of parts to it

thick gull
#

I don’t know if py returns it as <#ID> or whatever

digital ibex
#

if that makes more sense lol

thick gull
digital ibex
#

um, why wouldnt it?

sweet kestrel
#

@steep shale

#

😦

#

lmao

lavish tinsel
#

i have another question

digital ibex
#

ctx.member

thick gull
#

um, why wouldnt it?
@digital ibex because I’m not trying to feed false info but help the poor soul while you rip him apart for using json

sweet kestrel
#

?

#

wait what?

#

I need it to @a member

digital ibex
#

i didnt say anything about using a json database

thick gull
#

yea Idk how python works I’m just tryna help the guy and give him a general area to start

digital ibex
#

all i said was i find using json as a db is annoying, which i wasn’t talking to him

thick gull
#

idk if it was you im too to scrol up

lavish tinsel
#

giveaway command or leveling command thing

steep shale
#

he asked how to get the id of the channel
@thick gull whicu is why he needs a database

sweet kestrel
#

@steep shale 😦

thick gull
#

no

steep shale
#

Cause he wants people from multiple servers to set a channel

#

If its one server then its without

thick gull
#

you don’t get an ID from a database if you don’t know how to get said ID to save

steep shale
#

@sweet kestrel show the function

thick gull
#

he needs to get the ID first

sweet kestrel
thick gull
#

it doesn’t pop into existence

sweet kestrel
#

I tried to combine the f string

#

this showed up

#

😦

#

like this

steep shale
#

Yeah but what you dont understand is that he wants people from multiple servers to get a channel, he would need a database for that so he can get the channel from that specific guild

#

@thick gull

#

@sweet kestrel show your async def

sweet kestrel
#

here

#

🙃 !

#

do i do a name=member or somthing?

thick gull
#

@steep shale he needs to SAVE IT

#

you can’t save a value you don’t have

steep shale
#

Which is why he needs a DATABASE

thick gull
#

YEA

#

BUT HE STILL NEEDS THE ID

#

he doesn’t have the ID

steep shale
#

Oh my god

thick gull
#

he needs the ID

steep shale
#

Bruh

thick gull
#

you can’t use a DB if you don’t have the ID

steep shale
#

yes you can

thick gull
#

then tell him that

steep shale
#

He doesnt want to understand

thick gull
#

I don’t know shit about dpy

steep shale
#

He needs a db

sweet kestrel
#

wait, what do i do?

steep shale
#

so dont talk

#

i know exactly what he wants

sweet kestrel
#

oh, database you either use json, or you use mysql

#

i suggest both

thick gull
#

Then help him

steep shale
#

I made my own customized welcome/goodbye system using a database

sweet kestrel
#

cause i use both

steep shale
#

You need a database

sweet kestrel
#

yep

steep shale
#

He doesnt want to understand

sweet kestrel
#

definitly

thick gull
#

That’s really not that hard the mans asking how to get the ID from this: #announcements > 285458046006591499

steep shale
#

Mysql isnt the best

earnest phoenix
#

@sweet kestrel

sweet kestrel
#

?

earnest phoenix
#

Send your command complete

sweet kestrel
steep shale
#

bo im done with you bruh

sweet kestrel
steep shale
#

@sweet kestrel show the async def again

sweet kestrel
#

+this

steep shale
#

Its message.author.mention

sweet kestrel
#

oh

#

ok

#

thanks

#

😄

steep shale
#

Np

sweet kestrel
steep shale
#

yeah

sweet kestrel
#

like this right?

#

noice

#

thanks 😄

earnest phoenix
#

Sure

sweet kestrel
#

you guys are nice 🙂

turbid umbra
#

how does this work😄

earnest phoenix
#

what is "this"

turbid umbra
#

nothing nvm

modest smelt
#

CAN SOMEONE HELP ME

#

the user gives me a channel, i need to get the id of the channel

steep shale
#

You too?

digital ibex
#

what library?

steep shale
#

Do you want it so multiple people can do that?

torn ravine
#

@modest smelt code and lib

earnest phoenix
#

i don't know how many times i have to tell you

#

this is like the third time

#

use the dpy converters

sweet kestrel
#

hey guys

#

what is a cool color?

#

like a comfortable one

earnest phoenix
#

rgba 0 0 0 0

sweet kestrel
#

...'

earnest phoenix
#

🧠

sweet kestrel
#

?

#

what is rgba

earnest phoenix
#

rgb with an alpha channel

sweet kestrel
#

oh

earnest phoenix
#

it's a transparent color since the alpha channel is set to 0

#

i was kidding

sweet kestrel
#

;lol

charred geyser
#

does anyone have any knowledge at all about creating a web dashboard for a bot?

digital ibex
#

you create a backend and update your database

charred geyser
#

i mean, in slightly more detail

digital ibex
#

uh

#

i mean, what aspect of creating it u looking for?

charred geyser
#

like

#

uh

#

idk

#

i have a mogodb database

#

rn it just stores info about a server it joins

#

and records its prefix and shit

#

but

astral yoke
#

how do i fix (node:2264) UnhandledPromiseRejectionWarning: Error: FFmpeg/avconv not found!

charred geyser
#

idk where to even start making a dashboard

thick gull
#

make a website

#

that connects to the DB

astral yoke
#

then just html coding from there

charred geyser
#

it is?

#

how do i connect a website to mongod

astral yoke
#

the same way you connect it from a bot

#

i would recommend .ejs to use html and js together

charred geyser
#

oh right

#

so i would still use the mongoose js module?

astral yoke
#

if you wanna make a whole thing like that of the mongoose stuff make a new file and then just import it into the ejs one

charred geyser
#

that doesn't seem horribly complicated

astral yoke
#

just html coding is the hard part really

carmine summit
#
code = ABC
if (!code == /[A-Za-z]{4}/i) {
    message.channel.send('hmm... That code seems fishy')
    return
} else {
    message.channel.send('success')
}
//returns success

Why this code returns success even though code is 1 letter short?

sonic lodge
#

!code == /[A-Za-z]{4}/i this isn't doing what you think it's doing

#

!code = convert code to a boolean and negate it

carmine summit
#

Uh

#

Huh?

sonic lodge
#

use code.length to get the length of code

#

don't use regex for that

carmine summit
#

I need it to not count numbers

#

Because if there is numbers. code is invalid

sonic lodge
#

so code must be a string of letters at least 4 characters long

carmine summit
#

Code must only contain letters and must be 4 long

#

Exactly 4 characters long

sonic lodge
#

ok, i understand

carmine summit
#

Not 'at least'

sonic lodge
#

then you need to use regex.test(str), which returns true if the specified regex matches str anywhere

carmine summit
#

Huh

sonic lodge
#
/[A-Za-z]{4}/i.test('ABCD');```
carmine summit
#

let regex = /[A-Za-z]{4}/i

#

?

#
if (test) console.log("success")```
sonic lodge
#

note that that will return true if code contains a sequence of 4 letters anywhere at all

#

add ^ and $ to assert the start and ending position in the string
/^[A-Za-z]{4}$/i

carmine summit
#
if (test) console.log("success")```

Is this correct?

sonic lodge
#

try it and see

astral yoke
#

why am i getting the error (node:13944) UnhandledPromiseRejectionWarning: Error: FFmpeg/avconv not found!

carmine summit
#

Uh

#

npm install ffmpeg --save

#

Command line ^^^

astral yoke
#

done

#

lemme restart and test

#

same thing

drifting wedge
#

Can lavalink do YouTube streams?

astral yoke
#

try it and see

earnest phoenix
#

is there naybot left for verify today

cyan folio
#

Im new and this are scrim

torn ravine
astral yoke
#

i ficed it

torn ravine
#

Ecks Dee

trim saddle
#

@queen violet why is toktok broken

#

i looked at the api, and you can bypass private video filters

delicate shore
#

My bot gives ping in negative

thick gull
#

flip the subtracts

earnest phoenix
#

why the bot dont send "xd"?

thick gull
#

your logging xd

#

and the message has to be cached

#

send a message and then do it on that message

#

once it’s on

earnest phoenix
#

ok

fringe axle
#

How can I join a defined arg? Like: argsC[1].join(" ");

#

Because this won‘t work

thick gull
#

why would you join a single thing

#

args.join(‘ ‘) would be the entire thing

#

unless you mean args 1 and 2

fringe axle
#

I want that text is all after args 0 @thick gull

thick gull
#

cut args 0 put

#

out

fringe axle
#

How?

sonic lodge
#

args.slice(1); = get a copy of args from index 1 to the end

fringe axle
#

Oh, thanks!

#

I tried that

delicate shore
#

My bot gives ping in negative number

fringe axle
#

And got this... @sonic lodge

earnest phoenix
#

you're trying to substring a message, which is a message object

fringe axle
#

Because I define args

#

You can‘t use args in Commando

#

I do my own args

earnest phoenix
#

ah

fringe axle
#

let argsC = message.content.split(" ").slice(1);
#

argsC = args

earnest phoenix
#

the error does not seem to be complaining about that though

fringe axle
#

Oof

#

Hm

#

Because argsC is a message object, right?

earnest phoenix
#

no

fringe axle
sonic lodge
#

it's an array

fringe axle
#

Oh

#

Hmmm

#

But how can I fix this?

#

@earnest phoenix you know how?

echo oak
#

Does anyone know about JDA 4 Sharding?

#

Can't really find anything about it anywhere, i'm new to sharding as well

#

so its a bit confusing

fringe axle
#

@ me if you know how to fix it.

thick gull
#

My bot gives ping in negative number
@delicate shore flip the subtraction

fringe axle
#

:/

earnest phoenix
#

how to log errors in your command handler, or do i need to make in every command a catch?

dusty tulip
#

How to verify a bot?

earnest phoenix
#

hit 75 servers

#

then wait

dusty tulip
#

Ok

sonic lodge
#

then you get a dm from discord asking you to provide id and answer a bunch of questions

delicate shore
#

@delicate shore flip the subtraction
@thick gull
I do everything correctly
It just sometimes give in negative

sonic lodge
#

snowflakes aren't generated by the same machine

delicate shore
#

As you can see here

sonic lodge
#

if one is generated on one machine, and the second on another machine, it is entirely possible for the second timestamp to be before the first

delicate shore
#

You are saying me ?

sonic lodge
#

yes

delicate shore
#

Oh

sonic lodge
#

don't worry about it, it just means your bot is living in the future

delicate shore
#

Ok

#

Maybe I can aks him to get vaccine of covid-19

sonic lodge
#

genius

earnest phoenix
#

No one:
My command handler:

// index.js
const commands = require("./commands.js");
bot.on("message",async (message) => {
  // some switch statements
  case "some-command": 
  commands.some-command(message);
  break;
});

// commands.js
exports.some-command = async (message) => {
  message.channel.send("smth");
}
pure lion
#

No

near veldt
#

i may me retarded af or some but my uptime for my botinfo command, it only labels the hours, minutes, and seconds except for the days>
this is my code

  function duration(ms) {
      const sec = Math.floor((ms / 1000) % 60).toString()
      const min = Math.floor((ms / (1000 * 60)) % 60).toString()
      const hrs = Math.floor((ms / (1000 * 60 * 60)) % 24).toString()
      const days = Math.floor((ms / (1000 * 60 * 60 * 24)) % 60).toString()
      return `${days.padStart(2, '0')}d, ${hrs.padStart(2, '0')}h, ${min.padStart(2, '0')}m, ${sec.padStart(2, '0')}s `
  };

            `**❋ Uptime:** ${duration(client.uptime)}`,
#

it looks fineish to me but.

#

i dunno

#

kinda want my days to show

#

any suggestions?

#

i might just be really dumb and i might have just fixed it

#

idk

worthy glacier
#

Hi im kinda stuck using mongodb nodejs

near veldt
#

Whatcha need

#

broski

worthy glacier
#

I want to have a function that checks if the Server document exists, and if it does it sets settings = to the JSON of that doc, otherwise it uses the Defaults document and sets that equalt to settings. And i want "settings.prefix, welcome, etc." to be able to be called outside the callback function

near veldt
#

i dont currently work on using welcome messages and such but i do for prefixes. if u need someone else with more experience then you'd have to wait a lil while

worthy glacier
#

yeah thats what i was expecting

#

oh well stack overflow it is

near veldt
#

lol

eternal osprey
#

@Not Erwin

#

hey guys

#

could someone help me with these errors:

#
UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'channel' of undefined
    at check_not_in_DM (c:\Users\bilal\Desktop\fitlering\bot.js:79:16)
    at Client.<anonymous> (c:\Users\bilal\Desktop\fitlering\bot.js:97:7)
    at Client.emit (events.js:315:20)
    at MessageCreateAction.handle (c:\Users\bilal\node_modules\discord.js\src\client\actions\MessageCreate.js:31:14)
    at Object.module.exports [as MESSAGE_CREATE] (c:\Users\bilal\node_modules\discord.js\src\client\websocket\handlers\MESSAGE_CREATE.js:4:32)
    at WebSocketManager.handlePacket (c:\Users\bilal\node_modules\discord.js\src\client\websocket\WebSocketManager.js:384:31)
    at WebSocketShard.onPacket (c:\Users\bilal\node_modules\discord.js\src\client\websocket\WebSocketShard.js:444:22)
    at WebSocketShard.onMessage (c:\Users\bilal\node_modules\discord.js\src\client\websocket\WebSocketShard.js:301:10)
    at WebSocket.onMessage (c:\Users\bilal\node_modules\ws\lib\event-target.js:125:16)
    at WebSocket.emit (events.js:315:20)
<node_internals>/internal/process/warning.js:32
(node:3032) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 7)
<node_internals>/internal/process/warning.js:32
Process exited with code 1```
twilit rapids
#

Whatever you're calling channel on is undefined

#

Showing a snippet of the code that's causing the error would help

eternal osprey
#

okay

#

hold on

#
class NotInDMError extends Error {
  constructor() {
    super('I can\'t execute that command inside DMs!');
  }
}

function check_not_in_DM(message)
{
  if (message.channel.type === 'dm') {
    throw new NotInDMError();
  }
}```
quartz kindle
#

how are you calling the function?

#

show where you use check_not_in_DM()

eternal osprey
#
if (msg.startsWith(prefix + 'WEATHER')) {
  
      check_not_in_DM();
      return message.reply('Not implemented yet.');
    }
    else
    {
      check_not_in_DM();
  
      let [skytext] = msg.slice(prefix.length).split(" ");
      console.log('Seaching locations with:', skytext);
      let locations_found =  await get_location_by_skytext(skytext);
      console.log({locations_found});
      if (locations_found.length === 0)
      {
        return message.channel.send('No location found.');
      }```
#
}
  catch(e)
  {
    if (e instanceof NotInDMError)
    {
      return message.reply(e.message);
    }
    else
    {
      throw e;
    }
  }
});```
#

this is everything

#

that has something with dm in it./

quartz kindle
#

@eternal osprey you have the function defined as check_not_in_DM(message)

#

but you're using it as check_not_in_DM()

#

you dont give it any message to use

pine aspen
#

Hey!

#

How could I set a timeout on a mongodb document with mongoose?

vast laurel
#
    if (!message.member.permissions.has("BAN_MEMBERS")) {
    ^^

SyntaxError: Unexpected token 'if'
    at wrapSafe (internal/modules/cjs/loader.js:1053:16)
    at Module._compile (internal/modules/cjs/loader.js:1101:27)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)
    at Module.load (internal/modules/cjs/loader.js:985:32)
    at Function.Module._load (internal/modules/cjs/loader.js:878:14)
    at Module.require (internal/modules/cjs/loader.js:1025:19)
    at require (internal/modules/cjs/helpers.js:72:18)
    at C:\Users\vds\Desktop\Pink Girl V12\handlers\command.js:19:24
    at Array.forEach (<anonymous>)
    at module.exports (C:\Users\vds\Desktop\Pink Girl V12\handlers\command.js:11
:32)
    at C:\Users\vds\Desktop\Pink Girl V12\server.js:22:35
    at Array.forEach (<anonymous>)
    at Object.<anonymous> (C:\Users\vds\Desktop\Pink Girl V12\server.js:19:13)
    at Module._compile (internal/modules/cjs/loader.js:1137:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)
    at Module.load (internal/modules/cjs/loader.js:985:32)```
#

help

pine aspen
#

SyntaxError: Unexpected token 'if'

#

You're missing a } somewhere.

eternal osprey
#

hmmm @quartz kindle so should i define message?

#
(node:464) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
<node_internals>/internal/process/warning.js:32
(node:464) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
<node_internals>/internal/process/warning.js:32
(node:464) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:464) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
#

uhhm something isn't good

quartz kindle
#

you should pass the message to the function

eternal osprey
#

i have

misty sigil
#

lets see

eternal osprey
#

but when running my bot again

#

i get this error again

#

should i give you my whole code?

misty sigil
#

yes

eternal osprey
#

i am using weather-js package

misty sigil
#

check_not_in_DM();

#

you didnt pass message

eternal osprey
#
 check_not_in_DM(message);```
misty sigil
#

no

eternal osprey
#

hmmm

misty sigil
#

not line 102

eternal osprey
#

which line then?

#

line 98>??

#

check_not_in_DM();
return message.reply('Not implemented yet.');