#development

1 messages · Page 881 of 1

earnest phoenix
#

@knotty sundial what's up? Got any development issues?

knotty sundial
#

I've à Light prob

spice smelt
#

@digital ibex i think that there’s different ways to do it : by exemple instead of if (msg.content === PREFIX + "command" you should use msg.content === "?command"

earnest phoenix
#

That's not how it works lol

spice smelt
#

with ? as the special prefix

digital ibex
#

so

#

i got dis

#
    let prefix;
    if(message.author.id === '475371795185139712') {
        prefix = guild.prefix || ';;' || ';'
    } else {
        prefix = guild.prefix || ';;'
    }```
#

no

earnest phoenix
#

The third one doesn't work

spice smelt
#

but that isn’t correct

digital ibex
#

what

knotty sundial
#

I want create my bot, but knowing nothing yet, and i want create a room for all bots and commands

digital ibex
#

r u gud

spice smelt
#

you cant put 1 var on different values

#

you can do an array otherwise

earnest phoenix
#

In let statement... You can only put 2 values

digital ibex
earnest phoenix
#

It doesn't check for the 3rd value

spice smelt
#

like prefix = ["?", "!"] prehaps

earnest phoenix
#

@spice smelt nope i tried that... That's not possible

#

@knotty sundial YouTube is your best friend if you know nothing at all.

knotty sundial
#

Sorry im not a expert for this but can help with oter

#

😩

earnest phoenix
#

Also if you want to create a bot... The best Library to start with is discord.js @knotty sundial

knotty sundial
#

Yes you rezdon bri

earnest phoenix
knotty sundial
#

Reason

#

Bro

digital ibex
#

um

earnest phoenix
#

Hmm... If you want to start creating a bot you should watch a tutorial in yt... And come here when you're having any development issues with it @knotty sundial

digital ibex
#

prefix can't be an array

earnest phoenix
#

True that

knotty sundial
#

Right, im happy to your understanding, czn we doing a group ?

earnest phoenix
#

Nah because it would take way too long for me to teach you how to create a bot

knotty sundial
#

Yes

digital ibex
#

ik a place where they're teaching how 2 make bots

#

loc

earnest phoenix
#

It's a magical place called:

#

YouTube

digital ibex
#

no

spice smelt
#

or StackOverflow

digital ibex
#

yt tutorials are WACk

fleet chasm
#

what is problem

knotty sundial
#

Do you have chznnel pl

digital ibex
#

its a discord channel

slender thistle
#

YT tutorials overall are a bad idea to get into Discord bot making

earnest phoenix
#

Youtube tutorials are outdated tbh

spice smelt
#

yes

digital ibex
#

discord server but

#

¯_(ツ)_/¯

earnest phoenix
#

But they can make discord bots from YouTube and come here whenever there's a problem so we teach them how to solve

slender thistle
#

You're prone to find old videos that won't work by the time you find them

digital ibex
#

there aren't much eris tutorials but

knotty sundial
#

Alright

digital ibex
#

they're not as bad as djs ones

#

because theres not a major update everyday

knotty sundial
#

K, what's the Best so,

digital ibex
#

djs

earnest phoenix
#

(Don't tell me none of you started making discord bots with watching YouTube tutorials first)...

digital ibex
#

or just js

earnest phoenix
#

discord.js is kinda the best ngl

spice smelt
#

i agree

slender thistle
#

I got started with very little knowledge of Python by modifying Red bot

#

Never used YT as reference

fleet chasm
#

ok what is the problem

earnest phoenix
#

@slender thistle doubt

knotty sundial
#

Yes but jzva, html and more =40pct for me

digital ibex
#

i used to watch 2, menu docs and the source code

slender thistle
#

YT isn't a universal solution to everything fyi

modest maple
#

^^

#

really good way to learn how not to code

digital ibex
#

imagine making a bot in html

spice smelt
#

XDDD

modest maple
#

90% of tutorial videos show bad practice

earnest phoenix
#

We know it's not a solution to everything but at least it helps

spice smelt
#

what a nice idea

modest maple
#

especially with discord bots

slender thistle
#

How do outdated videos help

modest maple
#

they try to simplify something that just isn't simple at the base and that causes bad code and bad practices

digital ibex
#

i was going to start a good eris tutorial

earnest phoenix
#

@slender thistle i mean just to warm up and start up getting better... Not to just teach you the exact better way

digital ibex
#

covering like a custom handler and shit

spice smelt
#

excuse me but what’s eris ?

earnest phoenix
#

A library

modest maple
#

discord.js just not shit

slender thistle
#

How do you get better if you follow an outdated tutorial

earnest phoenix
#

Uhh

modest maple
digital ibex
#

¯_(ツ)_/¯

#

you don't

earnest phoenix
#

@slender thistle i said to warm up lol... And after that get better by asking updated help out there or using stackOverFlow

modest maple
#

by using stack over flow lmao

#

that is

earnest phoenix
#

Lel

slender thistle
#

SO isn't good for Discord API wrappers either

knotty sundial
#

I want create a event with you ?

modest maple
#

excuse me what

earnest phoenix
#

Anyway this turned into #memes-and-media ... Can we get to problem solving please?

slender thistle
#

You might only get a very vague gist of how a Discord bot is made in X library, but that's about all you'll learn.

knotty sundial
#

Thank you for enjoy

modest maple
#

youtube tutorials are only good for the basics of a language

knotty sundial
#

Where can you gonig for speeking ?

modest maple
#

anything more and they become a hinderance

earnest phoenix
#

@modest maple yea that's what i've been trying to explain

#

Just to learn the basics

modest maple
#

not the basics of bot making tho etc...

#

like

#

basiccccccccc

earnest phoenix
#

Lol

modest maple
#

people should learn how to read docs just after learning the basics

digital ibex
#

so voltrex uh

earnest phoenix
#

Yea?

digital ibex
#

i disagree @modest maple

knotty sundial
#

ALL and It’s the ifferent prices

slender thistle
#

Anyhow, let's get back to solving things

earnest phoenix
#

Reading docs after learning basics is not a good thing tbh

modest maple
#

i mean yes it is

earnest phoenix
#

Because you're a beginner and not know how to solve issues with docs

modest maple
#

you should

digital ibex
#

some people find it hard to read some docs, like me, i can't read djs docs for shit

earnest phoenix
#

Lol

modest maple
#

if you've learnt the basics you should know the terminology to describe everything

knotty sundial
#

OK

earnest phoenix
#

Hmm

digital ibex
#

i can read eris and mongoose

earnest phoenix
#

Let's get to solving issues shall we?

digital ibex
#

they're the only 2 i've actully thingiesd

#

kk

#

ok uh

#

i have this

#
    let prefix;
    if(message.author.id === '475371795185139712') {
        prefix = guild.prefix || ';;' || ';'
    } else {
        prefix = guild.prefix || ';;'
    }
#

but it doesn't work with ;

#

like i do ;ping

#

no response

#

i do ;;ping

#

response

earnest phoenix
#

That ;; you put there will work not the ;

digital ibex
#

yes

trim nexus
#

or if guild.prefix exists

earnest phoenix
#

Because the let statements only check for 2 values

#

Not 3

digital ibex
#

also works with guild.prefix

knotty sundial
#

Thank you @everyone, i bzck please let me a grad for our project please, good job guys

earnest phoenix
#

@digital ibex so do you want ;; or ; as your special prefix?

trim nexus
#

what

slender thistle
#

';;' || ';' is always going to be the first one

#

Since ';;' is not a false-y value

earnest phoenix
#

@slender thistle but they aren't the default prefix

#

Just default prefix and one special prefix

#

@digital ibex

    if(message.author.id === '475371795185139712') {
        prefix = guild.prefix  || ';';
    } else {
        prefix = guild.prefix || ';';
    }```
#

You can change that ; to ;; if you want

modest maple
#

whats the point in that check then...

earnest phoenix
#

Uhh what

modest maple
#

prefix = guild.prefix || ';'; is the same as prefix = guild.prefix || ';'; the line bellow it

slender thistle
#

similar to js if (x) y = 5 else y = 5

earnest phoenix
#

Oh he put that ; below there as a mistake lol

digital ibex
#

oh

modest maple
#

you dont even need that if statement

#

its just redundant code

earnest phoenix
#

@digital ibex
The one below needs to be:
prefix = guild.prefix; only

spice smelt
#

yes

digital ibex
#

what i want for only me:
guilds prefix & ; as the prefix
else
guilds prefix

#

so i got uh

#
if (message.author.id === '475371795185139712') {
prefix = guild.prefix || ';';
} else { 
prefix = guild.prefix || ';;';
}```
earnest phoenix
#

No

digital ibex
#

but i also want ;; to work

#

¯_(ツ)_/¯

earnest phoenix
#

For others?

digital ibex
#

thats where i am confused

earnest phoenix
#

The ;; will not work on ya

#

Only ;

spice smelt
#

guild.prefix is the prefix for everyone and ; just for u

digital ibex
#

yeah

#

yes

earnest phoenix
#

So below one needs to be:
prefix = guild.prefix;

#

Lel

spice smelt
#
if (message.author.id === '475371795185139712') {
prefix = guild.prefix || ';';
} else { 
prefix = guild.prefix;
}```
earnest phoenix
#

Yea correct

digital ibex
#

that won't work

#

no its not

earnest phoenix
#

Wait why?

digital ibex
#

because if there is no prefix then?

earnest phoenix
#

Oh it's because there's no
let prefix; on top?

digital ibex
#

there is

spice smelt
#

are you sure we can put multiple value to 1 variable ?

digital ibex
#

thats y i have let prefix = guild.prefix || ';;'

earnest phoenix
#

@spice smelt yes but only 2

spice smelt
#

that’s surprising i didn’t know

digital ibex
#

so can i do

#
let oof = ';;' || ';';
if (message.author.id === '475371795185139712') {
prefix = guild.prefix || oof 
} else { 
prefix = guild.prefix || ';;';
}
#

or uh

#

is that wrong?

spice smelt
#

yes i guess yes

#

wait

earnest phoenix
#

Hmm TRY IT AND SEE...

digital ibex
#

ok

spice smelt
#

btw i have a question too

earnest phoenix
#

What's it?

#

how can i give bot developer role

digital ibex
#

add ur bot to dbl

earnest phoenix
#

@earnest phoenix have a bot approved in dbl

digital ibex
#

i thjink

spice smelt
#

(im asking it because i can test it right now) what happens if the bot tries to delete a msg but cant because it hasn’t the perms? is this a fatal error?

earnest phoenix
#

i send my bot but my bot waitin approv

slender thistle
#

Depends on how your code/library handles 403 error code

earnest phoenix
#

@spice smelt no it just sends a normal basic error to your console.log

slender thistle
#

Usually it shouldn't crash your bot, though I suggest handling them anyway

spice smelt
#

ok.

#

thank you

slender thistle
#

It's good practice to try-catch stuff that can raise errors

earnest phoenix
#

I literally get the Missing Permissions errors every day on my console.log

#

So it's common

#

Np

#

when my bot approv

slender thistle
#

-faq 2 -c

gilded plankBOT
earnest phoenix
#

in about 2-3 weeks @earnest phoenix

spice smelt
earnest phoenix
#

k ty

#

👍

digital ibex
#

doesn't work, no errors

earnest phoenix
#

Hmm can i see your code?

digital ibex
#
let prefix;
let oof = ';;' || ';';
if (message.author.id === '475371795185139712') {
prefix = guild.prefix || oof 
} else { 
prefix = guild.prefix || ';;';
}```
earnest phoenix
#

That oof needs to be above the let prefix;

spice smelt
#

why?

digital ibex
#

ok

#

@earnest phoenix

earnest phoenix
#

@spice smelt uhh...

digital ibex
earnest phoenix
#

Huh

digital ibex
#

y u msg me

#

nvm

flat pelican
#
let prefix;
let oof = ';;' || ';';
if (message.author.id === '475371795185139712') {
prefix = guild.prefix || oof 
} else { 
prefix = guild.prefix || ';;';
}```
earnest phoenix
#

Uhh

flat pelican
#

it didn't message me

digital ibex
#

¯_(ツ)_/¯

earnest phoenix
#

Oh lol

digital ibex
#

i just sent that and i got dmmed

flat pelican
#

can someone else send the block to see if it DMs someone else

earnest phoenix
#

Something might have went wrong in the bot code i think

#
let oof = ';;' || ';';
if (message.author.id === '475371795185139712') {
prefix = guild.prefix || oof 
} else { 
prefix = guild.prefix || ';;';
}```
#

Nope

ember atlas
#
let oof = ';;' || ';';
if (message.author.id === '475371795185139712') {
prefix = guild.prefix || oof 
} else { 
prefix = guild.prefix || ';;';
}```
#

Nope

digital ibex
#

¯_(ツ)_/¯

rotund ferry
#

Mm

digital ibex
#

pl

#

oh, it was pl, when i was meant to say ok

earnest phoenix
#

Oh... The pl is It's prefix lol

digital ibex
#

mb

earnest phoenix
#

It sent a dm to me too lol

digital ibex
#

so uh, voltrex, u got any ideas?

flat pelican
#

okay

#

Thanks guys

earnest phoenix
#

@digital ibex ideas about what?

digital ibex
#

how i can get my own prefix to work only for me and no one else

#

and me still work for the guilds prefix

earnest phoenix
#

Hmm i gave you the code tho

digital ibex
#

that didn't work

#

no errors

earnest phoenix
#

Did you move oof let statement above let prefix;
?

digital ibex
#

oh, nope

#

i'll do thta

earnest phoenix
#

K

digital ibex
#

nope

#

doesn't work

earnest phoenix
#

Hmm what's guild.prefix as defined as?

digital ibex
#

this is guild

#

let guild = await guildS.findOne({ id: message.channel.guild.id });

#

and thats for the db

#

and guild.prefix is for the thingy

#

uh

#

prefix for the guild

earnest phoenix
#

That message.channel.guild.id can be message.guild.id tho

digital ibex
#

wot

#

no

earnest phoenix
#

Yes it can lmao

digital ibex
#

not for eris

spice smelt
#

yes it can

#

uh

earnest phoenix
#

Wait is that for eris?

digital ibex
#

um

#

yeah

earnest phoenix
#

So you've been writing my code in the eris library?

digital ibex
#

i'm using the djs bit and like uh

#

yes

#

theres nothing different

earnest phoenix
#

That would not work lol

digital ibex
#

with the code u have so

#

wot

earnest phoenix
#

Every library has it's own differences

digital ibex
#

its the same for djs and eris, the code u gave

earnest phoenix
#

Hmm really?

digital ibex
#

some similarities

spice smelt
slender thistle
#

That code snippet isn't exclusive to Eris as you're not interacting with the library at all

digital ibex
#

yes

earnest phoenix
#

Yup

#

That code snippet i gave you belongs to discord.js

grizzled raven
#

just note that || doesnt work like that

earnest phoenix
digital ibex
#

its- the only library thing in that code is message.author.id

earnest phoenix
#

Hmm

digital ibex
#

and message.author.id is djs, in eris its message.author.id

#

same

grizzled raven
#
let prefix;
let oof = ';;' || ';'; // will always return ";;"
if (message.author.id === '475371795185139712') {
prefix = guild.prefix || oof // these 2 return the same thing
} else { 
prefix = guild.prefix || ';;'; // these 2 return the same thing
}
earnest phoenix
#

Wdym these 2 return the same thing?

digital ibex
#

what i have is

#

before i started

#

is

#
let prefix = guild.prefix || ';;';
grizzled raven
#

basically what you are doing is ```js
let prefix = guild.prefix || ";;"

digital ibex
#

¯_(ツ)_/¯

#

not doing that

earnest phoenix
#

Yea because both are having the same results

grizzled raven
#

that whole code block id equivalent to my line

digital ibex
#

confusion: how 2 make prefix 4 me?

#

like

#

i don't want other people to use it apart from me

earnest phoenix
#
if (message.author.id === '475371795185139712') {
prefix = guild.prefix || 'special prefix for yourself';
} else { 
prefix = guild.prefix;
}```
digital ibex
#

it won;t wotk

#

like i said lol, if there is no guild prefix then

#

¯_(ツ)_/¯

#

whats the prefix?

#

thats y its prefix = guild.prefix || ';;';

earnest phoenix
#

Hmm... You can just set the guild.prefix to just ! if it's the default prefix

digital ibex
#

i have ;; as the default prefix

#

but still

#

this shits weird so i just do that to avoid it

earnest phoenix
#

Hmm

pale vessel
#

something like this? js let prefix = guild.prefix; if (authorID == yourID) prefix = guild.prefix || ";;";

earnest phoenix
#

Yeah that should work

digital ibex
#

but then i won't be able to use the guilds prefix

pale vessel
#

how's that?

#

i added it

earnest phoenix
#

Hmm...

digital ibex
#

the thing is weird

pale vessel
#

i edited the code

digital ibex
#

i have ;; as the defult prefix but it says i there is no prefix ir smthing

#

so

pale vessel
#

then prioritize ;;

digital ibex
#

i have prefix = guild.prefix ||';;';

#

hm

meager ermine
#

Hey does any bot dev use glitch? I'm stuck on my verify command and can't fix it

pale vessel
#

";;" || guild.prefix

earnest phoenix
#

Wait you said you have ;; as your default prefix @digital ibex

digital ibex
#

yes

earnest phoenix
#

can someone tell me why discord.js is more Ram and memory consuming than eris?

grizzled raven
#

cache

digital ibex
#

no lol

grizzled raven
#

yes lol

earnest phoenix
#

Cache is frustrating

digital ibex
#

because djs adds more things like .hexolor

#

which u can do urself

grizzled raven
#

ram and memory are the same thing

#

absolutely not

digital ibex
#

but djs adds things which u can do urself

#

which eris does not

grizzled raven
#

well

digital ibex
#

which is why

earnest phoenix
#

does eris caches anything?

digital ibex
#

bigger bots don;t use it

#

ofc it does

earnest phoenix
#

what does discord.js cache does eris doesnt

digital ibex
#

u don't cache smthing, u access the cache

#

technically

earnest phoenix
#

@earnest phoenix it does but doesn't have cache method so less ram/memory consuming

#

i mean like which part does discord.js that eris doesnt

#

Idk

#

i am going to fork discord.js so that its less ram consuming

grizzled raven
#

@digital ibex extra functions barely matters, its more to do with the users, members, roles, emojis, guilds, channels and permissions always being cached

earnest phoenix
#

how are they accessed from eris when it is not cached?

digital ibex
#

it is

earnest phoenix
#

straight forward access?

#

Yes

digital ibex
#

well uh

#

yeah

earnest phoenix
#

imma study how caches work in discord.js and eris then fork discord.js because i dont wanna recode my bot to switch to Eris

#

Idk what the hell was going on, on the discord.js's developers minds when they added cache to the whole thing

digital ibex
#

this

grizzled raven
#

so everything could be easier?

#

imagine having to fetch a channel from discord when you wanted to do a command

#

or a user every time you recieve a message

digital ibex
#

wot

earnest phoenix
#

how does eris fetches channels then?

digital ibex
#

<client>.createMessage(channeld, content, file)

#

or, 'channelid'.createMessage(content, file)

#

(haven't tried that)

slender thistle
#

string.createMessage
yeah no

digital ibex
#

¯_(ツ)_/¯

#

never tried

slender thistle
#

Thinking logically

#

IDs are not special objects created by Eris, they are literally strings

digital ibex
#

oh yeah

heavy marsh
#

I am using discord.js - v12.1.1

let VC = message.member.voice.channel;

if (!VC) return message.channel.send(`![voice_channel](https://cdn.discordapp.com/emojis/678581551856091157.webp?size=128 "voice_channel") **Join a voice channel and retry!**`);
let perms = VC.permissionsFor(message.bot.user);

I get an error saying user is not defined

digital ibex
#

like uh

#

define it

heavy marsh
#

??

#

It worked on v12

#

v11*

digital ibex
#

but u need to define user

heavy marsh
#

I also use bot not client

digital ibex
#

what is message.bot.user?

#

u mean

split hazel
#

message.bot is not a property, nor is it documented, no clue where you got that from

heavy marsh
#

message.member.voice.channel.permissionsFor(message.bot.user);

digital ibex
#

<client>.user

earnest phoenix
#

@heavy marsh
message.bot.user
To
bot.user

digital ibex
#
- message.bot.user;
+ bot.user
heavy marsh
#

ok hold on i will try that

earnest phoenix
#

K

heavy marsh
#

Thank you it workings fine now

earnest phoenix
#

Np

golden condor
#

How can I bind to an IP using mongodb localhost

digital ibex
#

you dont have to bind an ip using localhost

#

@golden condor it can only be accessed from ur pc, thats it so

#

theres no need to whitelist 1

earnest phoenix
#

How's it possible to colorize the result of the eval command?

#

using code blocks and marking the language

#

Hmm oh ok

#

it isn't granted to be colorized it's just syntax highlighting for the language you set it to

#

Yea ik that

golden condor
#

@digital ibex can you whitelist a different up?

#

*ip

digital ibex
#

not with localhost no

#

with atlas yeah

quartz kindle
#

hosting mongodb yourself gives you full control of every aspect of the database

#

there is no whitelisting system or any other atlas configuration

#

you have to create those yourself if thats what you want, they dont exist by default

#

all you need is to make sure the database is accessible via your public IP address

#

if you want to connect to it from another machine

golden condor
#

@quartz kindle I tried that but it keeps timing out at the end of the 30 seconds

quartz kindle
#

then your database is not accessible

earnest phoenix
#

Hi , i am using djs v12..

const send = await msg.channel.send(embed) await send.react('✅')

Why this isnt working? I tried everything but not worked.

golden condor
#

@quartz kindle is there no way to make it accessible?

quartz kindle
#

you need to configure your router and/or your firewall in order to allow connections

golden condor
#

Kk

earnest phoenix
#

Any1?

golden condor
#

That should work

#

What is the error?

earnest phoenix
#

But not work

golden condor
#

What is the error?

earnest phoenix
#

react of undefined

astral canyon
#

Send full error pls

earnest phoenix
#

full ?

golden condor
#

Yes

astral canyon
#

Yes

#

think i got it

echo hull
#

türk mod varmı

astral canyon
#
msg.channel.send(embed).then(message => {
  message.react('✅')
})
earnest phoenix
#

oh, i fixed

split hazel
#

That is the same as above but with a callback

astral canyon
#

Yes

#

But should work

#

I switched to python because JS became a bit stoopid

quartz kindle
#

yes, but this should also work ```js
let send = await message.channel.send()
await send.react()

golden condor
#

@quartz kindle I will try what you said

split hazel
#

Incompetence does not mean a language is "stoopid" but okay

astral canyon
#

Yes but it gives errors for working things like

#

BRUH

gritty tartan
#

i've put my bot on top.gg like 5 days ago, when will it be verified ?

modest maple
#

2 -3 weeks

iron steeple
#

It shouldn’t be too long however some can take up to 2-3 weeks yes

gritty tartan
#

oh

astral canyon
#

Wow

iron steeple
#

New staff are being added right now so the wait times should be decreased soon

high bough
#

Quick question guys, how do I get hours, minutes, and seconds out of a timestamp?

astral canyon
#

What kind of timestamp

earnest phoenix
#

is there a way to check in discord.js in what category a certain channel is?

high bough
#

What kind of timestamp
@astral canyon message.createdTiestamp

split hazel
#

channel.parent@earnest phoenix

earnest phoenix
#

oh okay

#

thanks

low bolt
#

Hello guys, I'm trying to do getting message from language.json file with function. But this function shows Promise { 'MESSAGE' }. Can someone help?

    if (language !== "en_US" && language !== "tr_TR") return
    const file = JSON.parse(fs.readFileSync("./languages/" + language + ".json"));
    const text = file[message]
    if (!text) return
    return text;
  };```

client.locale("en_US", "Version")

en_US.json file:
```{
"Version": "1.0.0"
}```
#

file.message is not working too, because trying to get message from language file

knotty steeple
#

@astral canyon thats just u being incompetent

#

cant blame a language for it

astral canyon
#

Yes I can

knotty steeple
#

u can but its really stupid to do so

astral canyon
#

If something works, why would it say error Thonk

knotty steeple
#

cuz it doesnt work

astral canyon
#

It does LMAO

digital ibex
#

because there is an error

earnest phoenix
#

ERROR IS ERROR

astral canyon
#

YES BUT IT WORKS

knotty steeple
#

it doesnt spit errors for no reason

digital ibex
#

and that error is stopping something in that code

astral canyon
#

No

digital ibex
#

may not be where it executes wot u want

#

but somewhere

astral canyon
#

It didnt stop anything

digital ibex
#

there is

#

how do u kno

split hazel
#

I dont think the compiler lies or tricks you on April fools

astral canyon
#

Everything worked perfectly fine

knotty steeple
#

it works but u still doing something wrong

digital ibex
#

¯_(ツ)_/¯

#

if u say so

earnest phoenix
#

If you did .then()
And it doesn't work... That means you can't use .then() in that function @astral canyon

astral canyon
#

Yes but it works

#

@earnest phoenix The point is that it does work

digital ibex
#

most likely is the javascript which is causing this issue tbh

astral canyon
#

Look at the code

knotty steeple
#

like arent u supposed to put a function in then

digital ibex
#

ok

earnest phoenix
#

Hmm

digital ibex
#

lol

knotty steeple
#

then(() => {})

high bough
#

@earnest phoenix Can help me?
Quick question guys, how do I get hours, minutes, and seconds out of a timestamp?

earnest phoenix
#

@knotty steeple he knows but some functions doesn't support .then() method

digital ibex
#

what language

knotty steeple
#

parse it properly

astral canyon
#

See, it logs, then says the .then() is not a func, but in the .then() is the log part

knotty steeple
#

its a listen function for express

#

it does

#

ur just doing ur then wrong

earnest phoenix
#

@high bough wdym minutes and seconds out of timestamp?

astral canyon
#

I know

#

But it still works

knotty steeple
#

stop saying that

high bough
#

@high bough wdym minutes and seconds out of timestamp?
@earnest phoenix Like 86000 seconds in hours or minuts, etc.

knotty steeple
#

thats not the point

digital ibex
#

just like

#

@high bough what lanaguage

high bough
#

djs

#

12.2.0

earnest phoenix
#

Hmm

digital ibex
#
.then(() => conole.logo('oof');
knotty steeple
#

^

earnest phoenix
#

Lmao

#

Conole.logo

high bough
#

lmao

earnest phoenix
#

My favorite function

fleet chasm
#

🛑

digital ibex
#

i don't see anything wrong with that

low bolt
#

conole.logo

digital ibex
#

at least he'll read it

#

¯_(ツ)_/¯

earnest phoenix
#

@high bough i still got confused about what you're trying to do lmao

low bolt
#

He will fix it if he knows

digital ibex
#

@high bough <message>.createdTimestamp

earnest phoenix
#

Uhh

#

to find a category in discord.js, do you have to do this? let category = guild.channels.find(c => c.name == 'category name' && c.type == 'category')

knotty steeple
digital ibex
#

i don't think so

#

iirc

earnest phoenix
#

category to CATEGORY

high bough
#

Turn like, example 86300000 (which is a day minus 100 seconds) into 23 hours 58 minutes 20 seconds

knotty steeple
#

also that finds the channel not the category

digital ibex
#

yeah like

#

google it

knotty steeple
#

@high bough thats not a timestamp

digital ibex
#

how 2 convert a timestamp to hours

#

or

earnest phoenix
#

@knotty steeple isn't categories considered as channels?

knotty steeple
#

well idk

#

check the docs

digital ibex
#

just use ```js
new Date(message.createdTimestamp).toDateString();

low bolt
slender thistle
#

There's category channels, text channels and voice channels

#

So technically yes, a category is still a channel

knotty steeple
#

u dont have to make a date from the message timestamp

#

u can just do Date.now()

digital ibex
#

well

#

thats what he's wants to use

earnest phoenix
#

Because if you do
message.guild.channels.cache.size you'll see that it counts the categories as channels so

#

Big brain

digital ibex
#

channels = categories, voice channels and text channels

#

like shivaco sed

knotty steeple
#

@high bough get a timestamp and divide by 1000

high bough
#

umm, it shows seconds only

digital ibex
#

kayui, wot r u trying to do? get the bots uptime?

knotty steeple
#

well u have to do the rest

#

divide by 60 for a minute

digital ibex
#

because a message can't be created 12 hours ago

knotty steeple
#

divide for an hour and whatever

digital ibex
#

like the 1 u r trying to get

knotty steeple
#

what

digital ibex
#

from what he said, it sounds like he's trying to get the time the message was created at

#

or she

knotty steeple
#

<Message>.createdAt()

high bough
#

Hmmm

digital ibex
#

he's using the timestamps doe

#

or she

opaque kite
#

Use timestamp

high bough
#

Im trying to use modulo divisions r niw

digital ibex
#

How can i create a command to delete my bots messages in eris?

knotty steeple
#

from what he said, it sounds like he's trying to get the time the message was created at

earnest phoenix
knotty steeple
#

read the error

#

use a callback

sacred mountain
#

Can anyone help me with an issue I have, for all of my bots the token changes every few seconds

#

It only started doing it today

split hazel
#

Your bot is most likely logging in >1000 times

sacred mountain
#

?

#

How

split hazel
#

in a day

earnest phoenix
#

@sacred mountain show us da code

#

with censoring the key ofc

split hazel
#

This can happen if your bot keeps restarting

sacred mountain
#

It’s not to do with the code tho

split hazel
#

due to an error or whatever

#

have you checked your logs?

sacred mountain
#

What logs

#

The console?

split hazel
#

yes

#

also do you get any emails from discord?

sacred mountain
#

No

#

Also when I try boot up my bot it says invalid token

#

And on the site it keeps changing

earnest phoenix
#

The only thing (hopefully) using your token is your application, so showing the code might help us investigate why that might happen

heavy marsh
#

Can I not use brodcast eval to get the total amount of vc's the bot is connected to? - v12.1.1

const promises = [
    bot.shard.fetchClientValues('guilds.cache.size'),
    bot.shard.broadcastEval('this.guilds.cache.reduce((prev, guild) => prev + guild.voiceConnections, 0)'),
];

Promise.all(promises)
    .then(results => {
        const totalvcs = results[2].reduce((prev, voiceConnections) => prev + voiceConnections, 0);
sacred mountain
#

Whenever I refresh the page

split hazel
#

you sure its not someone else?

sacred mountain
#

How could it be

earnest phoenix
#

Regenerate the token and try it with the new one

split hazel
#

the token changing everytime you refresh the page simply cannot happen

sacred mountain
#

Ik

#

So why is it happening

#

Someone can’t be on my acc

#

I hav 2 step

split hazel
#

it's probably something on your end, but if you're clueless you can try contacting discord support

earnest phoenix
heavy marsh
#

2FA*

sacred mountain
#

I gtg

#

I will be back later

#

But yes

#

It’s from there

#

It changed every time I refresh the page

earnest phoenix
#

kk, i'd say check your code for now, maybe you're accidentally logging in multiple times

#

what page? the bot page?

sacred mountain
#

Yh

#

I gtg

trim nexus
#

it gives u a different token everytime, that's not news

#

but doesn't mean it resets

earnest phoenix
#

yeah when you press regenerate

trim nexus
#

no no

#

sometimes u dont even have to press regen

#

happened to me million times

#

giving me different tokens without regen

earnest phoenix
#

never had that issue once

heavy marsh
#

Are you using glitch or something for hosting

earnest phoenix
#

i have the feeling that they think that the bot works through the bot page idk

#

we had multiple people who thought that putting code into the bot description will host it

trim nexus
#

lmfao

heavy marsh
sacred mountain
#

@earnest phoenix what do u mean put it in the description

#

I put it in the code

#

But it is always invalid

#

Bc it keeps changing

earnest phoenix
#

good good, we just had multiple people putting it into their bot description because they had 0 idea how it works

#

again, showing us the code (with censoring the token ofc) might help us

quartz kindle
#

@heavy marsh results[1] not [2]

heavy marsh
#

I have something set for 1

#
const promises = [
    bot.shard.fetchClientValues('guilds.cache.size'),
    bot.shard.broadcastEval('this.guilds.cache.reduce((prev, guild) => prev + guild.memberCount, 0)'),
    bot.shard.broadcastEval('this.guilds.cache.reduce((prev, guild) => prev + guild.voiceConnections, 0)'),
];
quartz kindle
#

[0] = guilds size
[1] = voice connections

#

ah then you changed your code

heavy marsh
#

Nope I did past is full sorry

#

I connected it to one of my vsc

#

but it still shows 0

#

No errors

quartz kindle
#

guild.voiceStates.cache

#

in v12

heavy marsh
#
const promises = [
    bot.shard.fetchClientValues('guilds.cache.size'),
    bot.shard.broadcastEval('this.guilds.cache.reduce((prev, guild) => prev + guild.memberCount, 0)'),
    bot.shard.broadcastEval('this.guilds.cache.reduce((prev, guild) => prev + guild.voiceStates, 0)'),
];```
#

like this?

quartz kindle
#

voiceStates.cache.size

spice smelt
#

Hey, I use discord.js. Does anyone know how to check if the bot has a permission? A little bit like msg.member.hasPermission but with msg.member as the client. I have already tried Discord.Guild.me.hasPermission but it doesn't work.

heavy marsh
#

https://cdn.danbot.xyz/tB06Lp84

const promises = [
    bot.shard.fetchClientValues('guilds.cache.size'),
    bot.shard.broadcastEval('this.guilds.cache.reduce((prev, guild) => prev + guild.memberCount, 0)'),
    bot.shard.broadcastEval('this.guilds.cache.reduce((prev, guild) => prev + guild.voiceStates, 0)'),
];

Promise.all(promises)
    .then(results => {
        const totalGuilds = results[0].reduce((prev, guildCount) => prev + guildCount, 0);
        const totalMembers = results[1].reduce((prev, memberCount) => prev + memberCount, 0);
        const totalvcs = results[2].reduce((prev, voiceStates) => prev + voiceStates, 0);
digital ibex
#

@spice smelt ```js
message.guild.me.hasPermission();

sacred mountain
#

@earnest phoenix at the top i have const token = 'The token'; then at the bottom i have bot.login(token);

spice smelt
#

@digital ibex ok. i'll retry.. thank you

digital ibex
#

👍

sacred mountain
#

@earnest phoenix it used to always work

earnest phoenix
#

Try to regenerate the token by yourself then

sacred mountain
#

I did

#

And it keeps doing it

#

Every time I refresh the page

quartz kindle
#

@heavy marsh i told you, guild.voiceStates.cache.size

sacred mountain
#

Even when I don’t, the token is apparently invalid

earnest phoenix
#

lemme just do something dangerous, sec

heavy marsh
#

If I do that it shows 4

#

Which is wrong

#
const promises = [
 bot.shard.fetchClientValues('guilds.cache.size'),
 bot.shard.broadcastEval('this.guilds.cache.reduce((prev, guild) => prev + guild.memberCount, 0)'),
bot.shard.broadcastEval('this.guilds.cache.reduce((prev, guild) => prev + guild.voiceStates.cache.size, 0)'),
];
earnest phoenix
#

@sacred mountain and your Token has this format? (regenerated the token ofc)

sacred mountain
#

Yh

#

It is just like that

#

But every time I refresh that page it changes

slender thistle
#

You just generate an additional token

sacred mountain
#

How

slender thistle
#

Your old ones are still valid

earnest phoenix
#

do you mean me rn or him

slender thistle
#

The only way to make all previous tokens invalid is by regenerating your token

earnest phoenix
#

oh him nvm lol

sacred mountain
#

They don’t work tho

#

I tried them

slender thistle
sacred mountain
#

They all say invalid

#

It’s odd

#

But why do they keep changing

#

They don’t normally

tired nimbus
#

whats the npm package that allows for bots to stream youtube videos

earnest phoenix
#

i still think its something on the code, but otherwise im really clueless

hushed berry
#

Your IP may have been banned from the API

earnest phoenix
#

and how could that happen? by hitting the ratelimit multiple times or?

sleek bear
#

aye guys, sorry for disturbing but i gotta question .. is it possible to add a bot without a prefix ?

quartz kindle
#

tokens are made of two parts: a timestamp and a code. when you refresh the page, the timestamp part of the token gets updated, causing it to change, but the actual token code doesnt change

high bough
#

I finally got this right!

var seconds = Math.floor(((res.dailyclaim + 86400000 - message.createdTimestamp) / 1000) % 60)
            var minutes = Math.floor(((res.dailyclaim + 86400000 - message.createdTimestamp) / 60000) % 60)
            var hours = Math.floor((res.dailyclaim + 86400000 - message.createdTimestamp) / 3600000)
quartz kindle
#

so its normal for the token to change when you refresh the page

#

the code part of the token, which is the important part, only changes if you regen your token

high bough
#

aye guys, sorry for disturbing but i gotta question .. is it possible to add a bot without a prefix ?
@sleek bear Ofc not.

hushed berry
#

@high bough gonna be honest, that's borderline unreadable

sleek bear
#

aight, then it wont be able to just delete the msg of a specific "person" after a timer ?

high bough
#

Sry

quartz kindle
#

tbh thats a mute case, not a decline case

high bough
#

Oh lol, i thot

sacred mountain
#

@quartz kindle the tokens don’t work

#

They all say the same thing when I try to run it

quartz kindle
#

@sacred mountain regen it, then DM me it, let me test here

high bough
#

@sacred mountain I'm pretty sure I see you in almost all the help channels on every single server.

sacred mountain
#

Yup

high bough
#

That's a lot of help needed to give a person help

#

Lmao

quartz kindle
#

@sacred mountain your token works

#

you're doing something wrong in your code

high bough
#

Did you define the token twice? @sacred mountain

sacred mountain
#

No

#

Ohhh

#

I fixed it

high bough
#

.?

sacred mountain
#

I had process.env.token at the bottom

#

I had to switch it to token

high bough
#

Hmmm...

earnest phoenix
#

i smell glitch project

tired nimbus
#

it is

sacred mountain
#

What

#

What is a glitch project?

high bough
#

I Use GCP

earnest phoenix
#

nvm it isnt a glitch project

#

@sacred mountain little off topic question but how old are you

sacred mountain
#

Umm why u wanna know

#

Another person who thinks I’m 9?????

high bough
#

Seems 15 to me

earnest phoenix
#

We have a special program for ppl under 13

#

to get them into development

#

and help them more

tired nimbus
#

what package do bots use to stream youtube music

high bough
#

Called ban

earnest phoenix
#

lmao

high bough
#

Lmao

sacred mountain
#

Why does everyone think I’m 9

earnest phoenix
#

fr tho how old are you

high bough
#

You sound like it

sacred mountain
#

Like a 9 yr old?

#

Well that’s a bit insulting

high bough
#

Asks every single error you get, doesn't even spend time to search google

#

On every server lmao

sacred mountain
#

Well ppl are helpful here

digital ibex
#

as soon as the bot starts, i get that

high bough
#

Prob wrong url on using POST method

digital ibex
#

how can i fix it?

high bough
#

Check your URL that you're using the POST API on, make sure it's correct.

digital ibex
#

wot

#

where?

high bough
#

Otherwise its probably the code that you post

digital ibex
#

im not using any url

high bough
#

wot
@digital ibex You're not using URL? Webhook?

#

Maybe its your code then

digital ibex
#

or anytghing

#

or a webhook

high bough
#

API?

digital ibex
#

doesn't say

#

it anywhere

#

nope

#

it said it has smthing to do with fields

#

not an api lol

tired nimbus
#

are you sending an image link through embeds

digital ibex
#

this is the code i added when i got the error ```js
fields: [
{
name: 'Old Message',
value: { content: message.content },
inline: true
},
{
name: 'New Message',
value: message.content,
inline: true
}
]

#

no

high bough
#

Tf, i cant read on my phone

#

I'll pass for now, bye guys.

#

I don't use eris either, so imma bit confused tbh

quartz kindle
#

@digital ibex there is no content inside value

#

value must be a string

digital ibex
#

oh

#

is it the first one? Old Messsage?

quartz kindle
#

yes

#

should be value: message.content

digital ibex
#

i am trying to get the message before it was edited

quartz kindle
#

is this a messageUpdate event?

digital ibex
#

yeah

quartz kindle
#

client.on("messageUpdate", (newMessage,oldMessage) => {

})

#

oldMessage.content

digital ibex
#

oh

#

thats eris?

quartz kindle
#

yes

digital ibex
#

oh

#

ok, thank

quartz kindle
#

you need to check if oldMessage exists before using it

#

since it might be null if not cached

digital ibex
#

oh, ok

#

i am having another trouble with audit logs

#

i can't find a way to get the member who done the action

#

like

#

if i delete a message, how can i find out who deleted it?

#

all i know is that i have to get the audit log and filter it by action

#

but

#

¯_(ツ)_/¯

quartz kindle
digital ibex
#

oh, ok

#

thank you

idle schooner
#

@copper cradle remember me ?

royal portal
#

how to store emojis on discord.js?

#

then use them in any server?

mossy vine
#

client.emojis is a thing

royal portal
#

cant i use something like

frail ocean
#

client.emojis.get(ID)

#

And then just reference the variable you stored it in wherever.

royal portal
#

so I can do

#

const emoji = client.emojis.get('2145912849128498214')

#

and then

frail ocean
#
var emoji = client.emojis.get(ID)

message.channel.send(emoji)```

is an example/
royal portal
#

I would need the id in ' '

#

so client.emojis.get('18491284912321321124')

frail ocean
#

var emoji = client.emojis.get("123123")

#

Yeah

royal portal
#

yea

#

Okay

frail ocean
#

My id is always stored as a variable since I define that somewhere else too but yeah

royal portal
#

alright

#

imma try it

quartz kindle
#

if you're using discord.js v12, its client.emojis.cache.get()

royal portal
#

yup

frail ocean
#

I still haven't migrated to v12 😂 and I never will

mossy vine
#

ok nvm that was stupid as shit

#

if channel is a number it shits itself

#

string works

#

of course it does

royal portal
#

oof

quartz kindle
#

wtf

#

it should automatically convert itself to a string when added like that

mossy vine
#

it is literally the same string

#

oh wait a minute what

#

its not the same string

#

@quartz kindle ur js pro can u tell me whats going on

royal portal
#

wait

#

@quartz kindle would I use '.then' as .then() => {

mossy vine
#

.then(() => {})

quartz kindle
#

where do you want to use .then?

#

@mossy vine its not the same string

#

one ends in 40, the other ends in 42

mossy vine
#

i know it isnt but why

#

the input is the same

quartz kindle
#

because IDs are too large for numbers

mossy vine
#

ohhhhhhh

#

that makes sense lmao thanks

quartz kindle
#

they get rounded to nearest valid 64 bit value

#

unless you use bigInt

royal portal
#

I want to use it after the embed is sent

#

to react an emoji

#

two emojis

quartz kindle
#

you can use
...send().then(newMessage => { newMessage.react() })
or you can
newMessage = await ....send()
newMessage.react()

royal portal
#

message.channel.send(embed).then(() => {
message.react(emoji.id)

#

would that work?

hasty sparrow
#

Depends on whether you want to react to the message you sent or the one you received

royal portal
#

the message that the bot replies to

quartz kindle
#

then its correct

hasty sparrow
#

Then it should work

quartz kindle
#

no need for .then() actually

#

just ```js
message.channel.send()
message.react()

royal portal
#

how about two emojis?

#

to react to two

quartz kindle
#

do you need them in order?

#

if order doesnt matter, you can do js message.react() message.react()

royal portal
#

error

quartz kindle
#

if order matters, then you need ```js
await message.react()
await message.react()

or

message.react().then(() => message.react())```

royal portal
#

emoji must be a string or guildemoji/reactionemoji

quartz kindle
#

console.log it

royal portal
#

its tickYes

quartz kindle
#

is it a custom emoji?

royal portal
#

315009125694177281

#

yes

quartz kindle
#

try .react("315009125694177281")

royal portal
#

I have it stored

#

in a var

quartz kindle
#

yes but try it directly like that

royal portal
#

doesnt work

quartz kindle
#

error?

royal portal
#

unknown emoji

#

I want it to use an emoji on any server

quartz kindle
#

your bot is not in the server where the emoji comes from
or your bot doesnt have "use external emoji" permission

surreal wind
#

is it okay to even ask basic question here about coding for a discord bot? cause no matter what i looked up online it doesn't solve my issue. i am new to Javascript but not new to programming

restive furnace
#

code and error please.

#

or the question.

#

@surreal wind

royal portal
#

@quartz kindle it works but how would I make it to react to the message the bot sent

restive furnace
#

use .then or await (and store into var)

quartz kindle
#

you said you wanted to react to the message the bot replies to, not the message the bot sends

#

otherwise do like i said before

royal portal
#

I tried that

#

I have two emojis to react

surreal wind
#

@restive furnace i wasn't sure, so i just asked in general before. My issue is, i want to be able to Add a Role to a person who joined the Server, they will receive a message and upon typing in a command the role is to be added. but i get a error every time i try it.

#

TypeError: Cannot read property 'roles' of undefined
at DiscordClient.<anonymous> (D:\Discord Bot\DiscordBot\bot.js:46:32)
at DiscordClient.emit (events.js:315:20)
at DiscordClient.handleWSMessage (D:\Discord Bot\DiscordBot\node_modules\discord.io\lib\index.js:1854:11)
at WebSocket.emit (events.js:315:20)
at Receiver.ontext (D:\Discord Bot\DiscordBot\node_modules\ws\lib\WebSocket.js:841:10)
at D:\Discord Bot\DiscordBot\node_modules\ws\lib\Receiver.js:536:18
at Receiver.applyExtensions (D:\Discord Bot\DiscordBot\node_modules\ws\lib\Receiver.js:371:5)
at D:\Discord Bot\DiscordBot\node_modules\ws\lib\Receiver.js:508:14
at Receiver.flush (D:\Discord Bot\DiscordBot\node_modules\ws\lib\Receiver.js:347:3)
at Receiver.finish (D:\Discord Bot\DiscordBot\node_modules\ws\lib\Receiver.js:541:12)

restive furnace
#

codetoo

royal portal
#

cache

surreal wind
quartz kindle
#

@surreal wind you're using a very old and outdated discord library

royal portal
#

message.guild.cache.roles.get

quartz kindle
restive furnace
#

use discord.js or eris. instead

surreal wind
#

Okay how do i do that?

quartz kindle
#
digital ibex
#

hi, i'm having trouble trying to get the members old nickname with eris

surreal wind
#

I jsut folled a guide to set up a bot

quartz kindle
#

you followed a very bad guide

restive furnace
quartz kindle
#

which hasnt been updated in over 5 years

surreal wind
#

well i couldnt know^^

digital ibex
pale vessel
#

debug

restive furnace
#

try log it console.log({oldMember})

digital ibex
#

how can i get the oldMember? like, do i define it as a variable of the guildMemberUpdate d or smthing

#

?

#

im just having trouble accessing it

quartz kindle
restive furnace
#

<client>.on("guildMemberUpdate", (guild, member, oldMember) => {});

quartz kindle
#

^

digital ibex
#

yeah, but how can i, because its an object, get the old members nicknaame?

#

like

restive furnace
#

simply oldMember.nick?

digital ibex
#
<client>.on("guildMemberUpdate", (guild, member, oldMember) => {
console.log(oldMember.nick);
});
quartz kindle
honest perch
#

how much ram is a bot supposed to use because i think something isnt right

royal portal
#

message.channel.send(embed).then(function (message) {
message.react('486453662923751424')
message.react('486453681940594699')

quartz kindle
#

depends on library and how many guilds/users you have

digital ibex
#

okay

#

then

royal portal
#

missing )

digital ibex
#

thank you

honest perch
#

discordjs and 65 servers

royal portal
#

after argument list

quartz kindle
#

discord.js can use several hundreds of MB of ram

restive furnace
#

Discord.JS after it has been ran for while, the ram usage may become high.

#

cause cache things..

honest perch
#

makes sense then lol

quartz kindle
#

with 65 servers, a normal usage should be around 150-200mb

copper viper
#

lmao I kind of want to make a bot like the taco one, but I have no idea how to start with that. I do have experience with discord.js and javascript in general tho

honest perch
digital ibex
#

btw guys, i just wanted to ask, is it just me or are making ur own audit log kinda thing hard?

restive furnace
#

thats normal

digital ibex
#

it is hard or?

copper viper
#

audit log would just be sending stuff to a channel

digital ibex
#

yeh

copper viper
#

so if you can figure out the channel it's just sending an embed after the bot does the command to the channel

hasty sparrow
#

Depends on what you want to log

quartz kindle
#

@royal portal if its missing ) then fix it lol

digital ibex
#

no because i am trying to get the member who deleted the messag e

royal portal
#

I'm sending an embed not a message

digital ibex
#

and its a pain

restive furnace
#

executir

#

executor is the member

surreal wind
#

Okay I'm lost on how to get rid of the old and get the new stuff. just delete the folders and then install everythign anew?

restive furnace
#

auditLogEntry.exutor

#

or smh

#

@surreal wind yes

quartz kindle
#

also remake or edit your package.json

digital ibex
#

i'm trying to access it

restive furnace
digital ibex
#

like

#

its not <guild>.auditLogEntry

#

and i can't find it how bc eris' search bar doesn't work

royal portal
#

anyone know how to make it so the bot reacts to the embed it sent?

quartz kindle
#

its all there lol

#

guild.getAuditLogs

digital ibex
#

oh?

quartz kindle
#

the result is an object containing instances of auditLogEntry

#

@royal portal the code you showed before was correct

restive furnace
#

and to get the author member object, you need to get executor id, and then fetch/get the member from the guild with the id.

royal portal
#

it didnt work

quartz kindle
#

error?