#discord-bots

1 messages Β· Page 776 of 1

final iron
#

Use this

surreal sierra
#

ty

#

so I have this dice/gamble command, where you guess a number the dice is going to land on and how much u bet it will land on that number.
but it doesnt really work anymore, it worked before tho. The problem is that on line 56, the bot is supposed to send the embed called message but never sends it. I have no idea why and have no errors

here is the code https://paste.pythondiscord.com/wikixosili.py

slate swan
#

variable naming smh

surreal sierra
echo wasp
#

So in vs code it is telling me that INSERT INTO and Welcome are not defined and statements have to sperated by new lines or semi colons

manic wing
#

okimii

echo wasp
#

and member when it is

manic wing
#

what else do you suggest i add to the debug menu

slate swan
#

you name an embed a msg yes its an instance but its an embed obj

final iron
echo wasp
#

what do i need to import?

slate swan
surreal sierra
echo wasp
echo wasp
#

vs code it is telling me that INSERT INTO and Welcome are not defined and statements have to sperated by new lines or semi colons

manic wing
#

one sec

final iron
#

And are you just jumping straight in to sqlite3 without learning at all?

manic wing
#

this screenshotter is whack af

#

its going through discord

#

bro what

#

its not recognising discord as a window

final iron
#

Imagine windows

slate swan
# manic wing one sec

maybe add a settings button which you can edit anything like guild perms and member perms or more

manic wing
final iron
manic wing
slate swan
slate swan
echo wasp
#
   async def on_guild_join(self, ctx):
   Insert INTO Welcome
   Values(self.member.guild.id)```
final iron
final iron
#

@slate swan

slate swan
echo wasp
slate swan
slate swan
echo wasp
#

i did staight from it

slate swan
#

i ment aiosqlite docs

echo wasp
slate swan
#

bruh

#

its in the side

#

left side

manic wing
#

i reckon this is ready to be rolled out

#

finished version

#

apart from bug tests obv

echo wasp
#

also i installed it but vs code can't find the module do i need to restart it?

slate swan
#

you arent doing it right

echo wasp
slate swan
#

your file path to your db file

echo wasp
#

like all the way from the drive letter?

#

or to your folder for it

#

it = bot

slate swan
slate swan
manic wing
echo wasp
#

do i put the file path al the way from the drive letter or the folder it is in?

manic wing
#

im taking screenshots of it rn for examples

slate swan
#

alright nice

slate swan
#

of where the db file is in

#

just change the \ to / so it doesn't think its built ins

echo wasp
slate swan
#

typo

echo wasp
#

ok also do i put welcome.json or just welcome for the table

slate swan
#

table as text

final iron
#

I'm still working on my wallpaper command

slate swan
#

loll

final iron
#

I need to figure out how to create a "paginator" with buttons

slate swan
#

lol

final iron
#

What

slate swan
#

nothing

#

gl

echo wasp
# slate swan table as text

also when i insert the table do i add the values to the command or how do i add them the docs are the best to read

final iron
#

Do buttons have to have labels?

slate swan
#

im not sure if you know sql you should learn it first

final iron
#

Or can I just use the emoji kwarg

slate swan
#

you can use the emoji kwarg

manic wing
#

added images

slate swan
#

nice

echo wasp
#

just following what it says

slate swan
#

into a table?

echo wasp
slate swan
final iron
#

But its not related to development with discord.py or any relevant library

slate swan
#

the code really isnt in dpy

final iron
slate swan
slate swan
manic wing
#

well that aint good

echo wasp
slim ibex
#

what are you trying to do with query

final iron
echo wasp
slate swan
manic wing
slim ibex
slate swan
#

maskuh i suggest you actually learn sql

slim ibex
#

^

slate swan
#

and not read through it you actually need to know what each statement does

slim ibex
#

you still need to know sql triggers and things like that

#

SELECT statements, INSERT INTO, etc

slate swan
#

^

echo wasp
slate swan
#

you know but you dont know what?

slim ibex
#

lmao

final iron
sacred sigil
#

2fa is required for this operation, how do I fix that?

#

without turning it off

manic wing
#

well uh

#

it seems ive fucked something well and truly

echo wasp
slate swan
slate swan
slate swan
pliant gulch
#

Bot's inherit 2FA from the bot owner's account

slate swan
#

hi andypithink

pliant gulch
#

Therefor, if the owner of the bot has 2FA on, the bot will be allowed to do 2FA required actions

slim ibex
#

Andy!

final iron
#

Why does this not exist

sacred sigil
#

and i have specified my owner_id

final iron
#

Why is there no blue button style

slate swan
final iron
slim ibex
#

@echo wasp read up on sql statements and clauses

final iron
#

Why wouldn't there be a blue color

manic wing
#

ahhhhhhh

slate swan
final iron
#

Can I add in my own hex?

slate swan
#

no

final iron
#

;-;

slate swan
#

afaik no

pliant gulch
slate swan
#

that would be cool tho

final iron
#

Why is there such a little selection of colors?

slate swan
#

πŸ˜”

final iron
#

bruh

pliant gulch
#

cause discord supports basically all the colours except for transparent ones

slate swan
pliant gulch
#

Yes

slate swan
#

disnake add the endpoints now

pliant gulch
#

For an example, when building an embed you can pass color into your dict (payload)

#

Then give it an int value, being the colour itself

pliant gulch
#

Eg 0x1031031

slate swan
#

ive worked with it

final iron
slate swan
#

aka discordheximals

pliant gulch
#

ohh you mean styles

slate swan
#

yes

final iron
#

Yeah

pliant gulch
#

I'm not talking about button styles, I'm talking about colours in itself

slate swan
#

what were you thinking?

#

were talking about button colors

final iron
#

I have these buttons right here and I don't like how the background doesn't blend in

slate swan
#

which i assumed discord doesnt have endpoints for such colors

pliant gulch
#

Yea, no you don't have any custom coloured buttons

#

You can only use the 6 button styles

slate swan
#

yeah lol

manic wing
#

NICE

#

i fixed it

slate swan
#

nice what was it?

pliant gulch
slate swan
#

if im not missing other colors

manic wing
pliant gulch
#

They aren't supporting 2 of the styles available then

manic wing
#

so ive reverted back to manually entering the version into 2 different files

slate swan
final iron
pliant gulch
manic wing
final iron
slate swan
pliant gulch
#

Oh

slate swan
#

@final iron what are you talking about a buttons colors right

final iron
#

Yeah

#

Colors

slate swan
#

yeah iirc only 4 options

pliant gulch
unkempt canyonBOT
#

rin/__init__.py line 1

__version__ = "0.1.1-alpha"```
slate swan
#

ic never done it before

#

oh yeah

leaden jasper
#

What is the max file upload size for bots?

slate swan
#

i think theres up to 100mb im not sure how much nitro offers

pliant gulch
slim ibex
#

yo Andy u gotta notify me when your wrapper can be used

leaden jasper
#

I think its 8

pliant gulch
#

if I get off my ass I'll get it done in like a week or two

slate swan
pliant gulch
#

πŸ˜” , I'm very very lazy though

leaden jasper
#

they are treated the same way users are, can exceed in boosted servers

slate swan
slim ibex
pliant gulch
slate swan
slate swan
leaden jasper
#

but do they have nitro upload limits?

slate swan
#

not sure on that

#

@pliant gulch you arent gonna make a run method?

#

just raw asyncio.run

pseudo grail
#

I am aware that this year discord.py will be losing support, does this mean it's going to be rug pulled entirely? or will it still work just not receive anymore updates.

slate swan
#

so just use a fork

pliant gulch
slate swan
pliant gulch
#

If you don't send a heartbeat within a certain timeframe you will be disconnected

slate swan
pliant gulch
#

Yep

slate swan
#

so the gateway doesnt close the connection

#

alr thx

final iron
#

If somebody uses a command are they the only ones who can use the buttons or will I have to add a check for that?

pliant gulch
#

You have to add a check

kindred epoch
#

can i not set a usage attibute for slash commands?

slate swan
manic wing
unkempt canyonBOT
#

await interaction_check(interaction)```
This function is a [*coroutine*](https://docs.python.org/3/library/asyncio-task.html#coroutine).

A callback that is called when an interaction happens within the view that checks whether the view should process item callbacks for the interaction.

This is useful to override if, for example, you want to ensure that the interaction author is a given user.

The default implementation of this returns `True`.

Note

If an exception occurs within the body then the check is considered a failure and [`on_error()`](https://docs.disnake.dev/en/latest/api.html#disnake.ui.View.on_error "disnake.ui.View.on_error") is called.
slate swan
#

^

manic wing
#

ive got 15 of those in disnake-debug lol

slate swan
#

just check the inter author with the ctx author which can be passed withing the view subclass

manic wing
#

i should just subclass a view with it

pliant gulch
slate swan
slate swan
#

rin

#

Andy's discord api wrapper

final iron
manic wing
#

you’re thanking andy for committing to his own repo?

manic wing
pliant gulch
#

πŸ€”

slate swan
#

i gaved him a suggestion so if he accepted that benefits me

pliant gulch
#

okimii is giving me motivation to get off my ass

#

πŸ˜”

slate swan
final iron
#

My room is actually freezing

unkempt canyonBOT
#

disnake-debug/debug.py line 29

async def interaction_check(self, interaction: MessageInteraction) -> bool:```
kindred epoch
kindred epoch
#

ok wait go to jarvide server

manic wing
#

okimii cant relate

slate swan
#

loll

final iron
#

So I just add it and it will work?

manic wing
#

youre overwriting the default interaction_check method

final iron
#

Oh

manic wing
#

everytime a button/item is clicked it calls interaction_check

slate swan
manic wing
#

by returning bool it determines whether or not it responds

slate swan
#

just pass the ctx author to the class

manic wing
slate swan
final iron
slate swan
pine crown
#

how do i do that

slate swan
#

to the class

final iron
#

Oh

slate swan
#

and just make a param for an author and typehint it to a member

final iron
#

I watched a video on oop yesterday

slate swan
#

lol

pine crown
#
@client.slash_command(description="Shows Bot Info.")
async def BotInfo(ctx):
    view = disnake.ui.View()
    embed=disnake.Embed(color=0x8400a8, title="PexiBot Invite Link!", description="Join Our Support server and report bugs!")
    button = disnake.ui.Button(style=disnake.ButtonStyle.url,label="βœ… Support Server",url="e")
    button2 = disnake.ui.Button(style=disnake.ButtonStyle.url,label="🌐 Website",url="e")
    view.add_item(button)
    view.add_item(button2)
    await ctx.send(embed=embed, view=view)

why does this work as a normal command but not as slash command?
it says application did noy respond when i make it as slash command

slate swan
#

argument naminggg

#

slash commands dont take context so name your arguments correctly

pine crown
#

ok

manic wing
#

interaction: disnake.MessageInteraction

slate swan
final iron
slate swan
final iron
slate swan
#

its better to just subclass it for better handling

pine crown
#

i di coreectly tho

slate swan
kindred drum
#

yo why does this edit the embed every time and not add a field to it? like when they react it doesn't add the new message to the prexisting embed just makes a new one without it ```py
if str(payload.emoji) == "🌩️":
selectedSlot.append("Power of Thor")
for x in selectedSlot:
if x in slotDict[18]["Slot"]:
xe = slotDict[18]["Symbol"]

                    casinoMessageReaction.add_field(name = str(x), value = str(xe), inline=True)
            await channel.purge(limit=1)
            msg = await channel.send(embed=casinoMessageReaction)
        if str(payload.emoji) == "πŸ”«":
            selectedSlot.append("Wanted dead or alive")
            for x in selectedSlot:
                if x in slotDict[19]["Slot"]:
                    xe = slotDict[19]["Symbol"]
                    
                    casinoMessageReaction.add_field(name = str(x), value = str(xe), inline=True)
            await channel.purge(limit=1)
            msg = await channel.send(embed=casinoMessageReaction)
        if str(payload.emoji) == "πŸ₯‡":
            selectedSlot.append("Wild West Gold")
            for x in selectedSlot:
                if x in slotDict[20]["Slot"]:
                    xe = slotDict[20]["Symbol"]
                     
                    casinoMessageReaction.add_field(name = str(x), value = str(xe), inline=True)
            await channel.purge(limit=1)
            msg = await channel.send(embed=casinoMessageReaction)
        if str(payload.emoji) == "❌":
            selectedSlot.append("Super X")
            for x in selectedSlot:
                if x in slotDict[21]["Slot"]:
                    xe = slotDict[21]["Symbol"]
                    
                    casinoMessageReaction.add_field(name = str(x), value = str(xe), inline=True)
            await channel.purge(limit=1)
            msg = await channel.send(embed=casinoMessageReaction)
        if str(payload.emoji) == "πŸ‘‘":
            selectedSlot.append("Spartan King")
            for x in selectedSlot:
                if x in slotDict[22]["Slot"]:
                    xe = slotDict[22]["Symbol"]
                   
                    casinoMessageReaction.add_field(name = str(x), value = str(xe), inline=True)
            await channel.purge(limit=1)
            msg = await channel.send(embed=casinoMessageReaction)
        if str(payload.emoji) == "🐸":
            selectedSlot.append("Fire Hopper")
            for x in selectedSlot:
                if x in slotDict[23]["Slot"]:
                    xe = slotDict[23]["Symbol"]
                    casinoMessageReaction.add_field(name = str(x), value = str(xe), inline=True)
            await channel.purge(limit=1)
            msg = await channel.send(embed=casinoMessageReaction)```
hoary cargo
#

damn

pine crown
#
class MyButton(disnake.ui.View):
  def __init__(self):
    super().__init__()
    button = disnake.ui.Button(label='Click Me', style=disnake.ButtonStyle.url, url='https://discord.com')
    self.add_item(button)


@client.slash_command(description="Shows Bot Info.")
async def BotInfo(inter: AppCmdInter):
  embed=disnake.Embed(color=0x8400a8, title="PexiBot Invite Link!", description="Join Our Support server and report bugs!")
  button = MyButton()
  await inter.send(embed=embed, view=button)

i also teried this but it doesnt work

final iron
#

Whats the point of type hinting something to typing.Any

manic wing
hoary cargo
pine crown
#

well when i do the slash command it also just says application did not respond

hoary cargo
slate swan
final iron
#

How would I use get_context in a dropdown callback?

#

Would I just pass bot in to my __init__ method?

manic wing
slate swan
#

I have a problem, no error, nothing happens

@client.command()
async def kick(ctx, member: discord.Member, *, reason=None):

    await member.kick(reason=reason)

    await ctx.send(f'User {member} has kicked.')```
manic wing
#

!d disnake.ext.commands.Context.bot

unkempt canyonBOT
final iron
manic wing
#

you can do ctx.bot but not bot.ctx, so you pass ctx to get both

#

you can also do self.ctx = ctx to make the interaction_check

slate swan
#

?

#

Tezzy

#

!d

manic wing
#

ty for giving vague error where you await multiple things

slate swan
manic wing
#

do you have a whack error handler

slate swan
slate swan
manic wing
slate swan
#

Imma even try again

#

But I'm sure I did brb

pine crown
#
@client.slash_command(description="Shows Bot Info.")
async def BotInfo(ctx):
    view = disnake.ui.View()
    embed=disnake.Embed(color=0x8400a8, title="PexiBot Invite Link!", description="Join Our Support server and report bugs!")
    button = disnake.ui.Button(style=disnake.ButtonStyle.url,label="βœ… Support Server",url="e")
    button2 = disnake.ui.Button(style=disnake.ButtonStyle.url,label="🌐 Website",url="e")
    view.add_item(button)
    view.add_item(button2)
    await ctx.send(embed=embed, view=view)

why does this work as a normal command but not as slash command?
it says application did noy respond when i make it as slash command

pine crown
slate swan
#

Yea but I use replit bc of database

#

And I have a few other commands with the same exact error

slate swan
#

I've been using replit for a few years now and never had any problems except now

manic wing
#

welp

#

you fucked something up

#

and only you can fix it

#

actually

pine crown
# manic wing welp

ho wto fix this```py
@client.slash_command(description="Shows Bot Info.")
async def BotInfo(ctx):
view = disnake.ui.View()
embed=disnake.Embed(color=0x8400a8, title="PexiBot Invite Link!", description="Join Our Support server and report bugs!")
button = disnake.ui.Button(style=disnake.ButtonStyle.url,label="βœ… Support Server",url="e")
button2 = disnake.ui.Button(style=disnake.ButtonStyle.url,label="🌐 Website",url="e")
view.add_item(button)
view.add_item(button2)
await ctx.send(embed=embed, view=view)

why does this work as a normal command but not as slash command?
it says application did noy respond when i make it as slash command
manic wing
#

do you happen to have made an on_message event recently?

#

try other commands; do they work?

pine crown
#

hi

#

halp

pine crown
#

hshelp

#

why nobody shell me

manic wing
#

dude noone is helping you because a) we cant be fucked b) you dont listen when we say shit c) your naming conventions are fucked, along with the entire code d) you dont know enough basic python to subclass view like a normal person so we dont help you

pine crown
#

ok sorry

manic wing
#

stop spamming the same error in chat, weve seen it, weve just exhausted our patience

pine crown
#

ok ):

#

bye

kindred drum
#

yo why does this edit the embed every time and not add a field to it? like when they react it doesn't add the new message to the prexisting embed just makes a new one without it ```py
if str(payload.emoji) == "🌩️":
selectedSlot.append("Power of Thor")
for x in selectedSlot:
if x in slotDict[18]["Slot"]:
xe = slotDict[18]["Symbol"]

                    casinoMessageReaction.add_field(name = str(x), value = str(xe), inline=True)
            await channel.purge(limit=1)
            msg = await channel.send(embed=casinoMessageReaction)
        if str(payload.emoji) == "πŸ”«":
            selectedSlot.append("Wanted dead or alive")
            for x in selectedSlot:
                if x in slotDict[19]["Slot"]:
                    xe = slotDict[19]["Symbol"]
                    
                    casinoMessageReaction.add_field(name = str(x), value = str(xe), inline=True)
            await channel.purge(limit=1)
            msg = await channel.send(embed=casinoMessageReaction)
        if str(payload.emoji) == "πŸ₯‡":
            selectedSlot.append("Wild West Gold")
            for x in selectedSlot:
                if x in slotDict[20]["Slot"]:
                    xe = slotDict[20]["Symbol"]
                     
                    casinoMessageReaction.add_field(name = str(x), value = str(xe), inline=True)
            await channel.purge(limit=1)
            msg = await channel.send(embed=casinoMessageReaction)
        if str(payload.emoji) == "❌":
            selectedSlot.append("Super X")
            for x in selectedSlot:
                if x in slotDict[21]["Slot"]:
                    xe = slotDict[21]["Symbol"]
                    
                    casinoMessageReaction.add_field(name = str(x), value = str(xe), inline=True)
            await channel.purge(limit=1)
            msg = await channel.send(embed=casinoMessageReaction)
        if str(payload.emoji) == "πŸ‘‘":
            selectedSlot.append("Spartan King")
            for x in selectedSlot:
                if x in slotDict[22]["Slot"]:
                    xe = slotDict[22]["Symbol"]
                   
                    casinoMessageReaction.add_field(name = str(x), value = str(xe), inline=True)
            await channel.purge(limit=1)
            msg = await channel.send(embed=casinoMessageReaction)
        if str(payload.emoji) == "🐸":
            selectedSlot.append("Fire Hopper")
            for x in selectedSlot:
                if x in slotDict[23]["Slot"]:
                    xe = slotDict[23]["Symbol"]
                    casinoMessageReaction.add_field(name = str(x), value = str(xe), inline=True)
            await channel.purge(limit=1)
            msg = await channel.send(embed=casinoMessageReaction)```
velvet tinsel
kindred drum
#

It should

#

add a thing to the embed then

#

wait I can just edit the embed

#

good idea

velvet tinsel
#

didn't you say "why does this edit the embed"

#

I thought you didn't want it to

kindred drum
#

and I can't edit a field that doesn't exist

#

I need to add the field and it just doesn't

flat solstice
#

Am i right in thinking that this will check if the role id of the after role is in my list of level_rewards but will only start checking from the third item in the list? ```py
level_reward_role = discord.utils.get(after.guild.roles, id = [id for id in self.bot.config.level_rewards[2:]])

potent spear
opaque trail
#

reletable

kindred drum
#

yo why does this edit the embed every time and not add a field to it? like when they react it doesn't add the new message to the prexisting embed just makes a new one without it

  if str(payload.emoji) == ":cloud_lightning:":
                selectedSlot.append("Power of Thor")
                for x in selectedSlot:
                    if x in slotDict[18]["Slot"]:
                        xe = slotDict[18]["Symbol"]
                          
                        casinoMessageReaction.add_field(name = str(x), value = str(xe), inline=True)
                await channel.purge(limit=1)
                msg = await channel.send(embed=casinoMessageReaction)
            if str(payload.emoji) == ":gun:":
                selectedSlot.append("Wanted dead or alive")
                for x in selectedSlot:
                    if x in slotDict[19]["Slot"]:
                        xe = slotDict[19]["Symbol"]
                        
                        casinoMessageReaction.add_field(name = str(x), value = str(xe), inline=True)
                await channel.purge(limit=1)
                msg = await channel.send(embed=casinoMessageReaction)
            if str(payload.emoji) == ":first_place:":
                selectedSlot.append("Wild West Gold")
                for x in selectedSlot:
                    if x in slotDict[20]["Slot"]:
                        xe = slotDict[20]["Symbol"]
                         
                        casinoMessageReaction.add_field(name = str(x), value = str(xe), inline=True)
                await channel.purge(limit=1)
                msg = await channel.send(embed=casinoMessageReaction)
            if str(payload.emoji) == ":x:":
                selectedSlot.append("Super X")
                for x in selectedSlot:
                    if x in slotDict[21]["Slot"]:
                        xe = slotDict[21]["Symbol"]
                        
                        casinoMessageReaction.add_field(name = str(x), value = str(xe), inline=True)
                await channel.purge(limit=1)
                msg = await channel.send(embed=casinoMessageReaction)
            if str(payload.emoji) == ":crown:":
                selectedSlot.append("Spartan King")
                for x in selectedSlot:
                    if x in slotDict[22]["Slot"]:
                        xe = slotDict[22]["Symbol"]
                       
                        casinoMessageReaction.add_field(name = str(x), value = str(xe), inline=True)
                await channel.purge(limit=1)
                msg = await channel.send(embed=casinoMessageReaction)
            if str(payload.emoji) == ":frog:":
                selectedSlot.append("Fire Hopper")
                for x in selectedSlot:
                    if x in slotDict[23]["Slot"]:
                        xe = slotDict[23]["Symbol"]
                        casinoMessageReaction.add_field(name = str(x), value = str(xe), inline=True)
                await channel.purge(limit=1)
                msg = await channel.send(embed=casinoMessageReaction)``` Anyone got a solution? it doesn't add the updates to the main message
potent spear
final iron
kindred drum
#

it should stay no?

potent spear
final iron
potent spear
potent spear
kindred drum
final iron
potent spear
# kindred drum shouldn't matter

true, but the code is very hard to debug since I have no idea what your emoji is etc, you just showed some code and I have to guess which if statement is true, what casinoMessageReaction is, ...

kindred drum
#

Ill send a gif

potent spear
final iron
#

Actually I just figured out a way

#

Thanks anyway

flat solstice
potent spear
flat solstice
potent spear
flat solstice
storm steppe
#

you guys see any errors

homebaseHeaders = {"Authorization": f"bearer {b[1]}", "Content-Type": "application/json"}
        reqGetHomebaseName = requestText(session.post(links.profileRequest.format(account_id, "QueryProfile"), headers=homebaseHeaders, data="{}"))
        reqSetHomebaseName = requestText(session.post(links.profileRequest.format(account_id, "SetHomebaseName"), headers=homebaseHeaders, json={"homebaseName": b[2]}))
        oldHomebaseName, newHomebaseName = [reqGetHomebaseName['profileChanges'][0]['profile']['stats']['attributes']['homebase_name'], reqSetHomebaseName['profileChanges'][0]['profile']['stats']['attributes']['homebase_name']]

im getting error discord.ext.commands.errors.CommandInvokeError

slate swan
potent spear
#

I'm using a python shell

slate swan
#

bro

potent spear
#

F eval lol

#

or jishaku
I won't use discord client as my IDE

slate swan
#

😭

potent spear
#

noticed that the Python discord icon is animated?

glacial zealot
#

yeah the icon is usually animated

potent spear
#

it's very subtle this time

slate swan
#

always is

pulsar shell
#

How can I make my bot send β€œPushin πŸ…ΏοΈβ€ every time someone says ?

potent spear
#

first thing you check in that event:
if the author isn't a bot
second thing
if the message content is equal to ?

lastly
send in message channel pushing πŸ…ΏοΈ

royal oar
#

How do i get the bot to send a message on the ctx.author can see

potent spear
slim ibex
#

^

royal oar
#

Thank you

potent spear
#

depending on what library you have, this is supported
most libs have it as a kwarg in the send method

royal oar
#

thx

final iron
potent spear
#

can't say, I don't use them

final iron
#

Pretty sure it is

#

!d disnake.abc.Messageable.send

unkempt canyonBOT
#
await send(content=None, *, tts=None, embed=None, embeds=None, file=None, files=None, stickers=None, delete_after=None, nonce=None, allowed_mentions=None, reference=None, ...)```
This function is a [*coroutine*](https://docs.python.org/3/library/asyncio-task.html#coroutine).

Sends a message to the destination with the content given.

The content must be a type that can convert to a string through `str(content)`. If the content is set to `None` (the default), then the `embed` parameter must be provided.

To upload a single file, the `file` parameter should be used with a single [`File`](https://docs.disnake.dev/en/latest/api.html#disnake.File "disnake.File") object. To upload multiple files, the `files` parameter should be used with a [`list`](https://docs.python.org/3/library/stdtypes.html#list "(in Python v3.10)") of [`File`](https://docs.disnake.dev/en/latest/api.html#disnake.File "disnake.File") objects. **Specifying both parameters will lead to an exception**.

To upload a single embed, the `embed` parameter should be used with a single [`Embed`](https://docs.disnake.dev/en/latest/api.html#disnake.Embed "disnake.Embed") object. To upload multiple embeds, the `embeds` parameter should be used with a [`list`](https://docs.python.org/3/library/stdtypes.html#list "(in Python v3.10)") of [`Embed`](https://docs.disnake.dev/en/latest/api.html#disnake.Embed "disnake.Embed") objects. **Specifying both parameters will lead to an exception**.
final iron
#

No ephemeral kwarg

#

!d disnake.MessageInteraction.send

unkempt canyonBOT
#

await send(content=None, *, embed=..., embeds=..., file=..., files=..., allowed_mentions=..., view=..., components=..., tts=False, ephemeral=False, delete_after=...)```
This function is a [*coroutine*](https://docs.python.org/3/library/asyncio-task.html#coroutine).

Sends a message using either [`response.send_message`](https://docs.disnake.dev/en/latest/api.html#disnake.InteractionResponse.send_message "disnake.InteractionResponse.send_message") or [`followup.send`](https://docs.disnake.dev/en/latest/api.html#disnake.Webhook.send "disnake.Webhook.send").

If the interaction hasn’t been responded to yet, this method will call [`response.send_message`](https://docs.disnake.dev/en/latest/api.html#disnake.InteractionResponse.send_message "disnake.InteractionResponse.send_message"). Otherwise, it will call [`followup.send`](https://docs.disnake.dev/en/latest/api.html#disnake.Webhook.send "disnake.Webhook.send").

Note

This method does not return a [`Message`](https://docs.disnake.dev/en/latest/api.html#disnake.Message "disnake.Message") object. If you need a message object, use [`original_message()`](https://docs.disnake.dev/en/latest/api.html#disnake.MessageInteraction.original_message "disnake.MessageInteraction.original_message") to fetch it, or use [`followup.send`](https://docs.disnake.dev/en/latest/api.html#disnake.Webhook.send "disnake.Webhook.send") directly instead of this method if you’re sending a followup message.
final iron
#

ephemeral kwarg

potent spear
#

I said the send method, didn't mention from which class πŸ˜‰

final iron
#

Oh shit

#

😐

slate swan
#

lmaooo

potent spear
#

but yeah, the interaction seems like the most logic class

final iron
#

My brain actually fucking hurts right now

slate swan
#

oof

royal oar
#

oop

left crater
#

how does save() work

final iron
#

!d disnake.MessageInteraction.send

unkempt canyonBOT
#

await send(content=None, *, embed=..., embeds=..., file=..., files=..., allowed_mentions=..., view=..., components=..., tts=False, ephemeral=False, delete_after=...)```
This function is a [*coroutine*](https://docs.python.org/3/library/asyncio-task.html#coroutine).

Sends a message using either [`response.send_message`](https://docs.disnake.dev/en/latest/api.html#disnake.InteractionResponse.send_message "disnake.InteractionResponse.send_message") or [`followup.send`](https://docs.disnake.dev/en/latest/api.html#disnake.Webhook.send "disnake.Webhook.send").

If the interaction hasn’t been responded to yet, this method will call [`response.send_message`](https://docs.disnake.dev/en/latest/api.html#disnake.InteractionResponse.send_message "disnake.InteractionResponse.send_message"). Otherwise, it will call [`followup.send`](https://docs.disnake.dev/en/latest/api.html#disnake.Webhook.send "disnake.Webhook.send").

Note

This method does not return a [`Message`](https://docs.disnake.dev/en/latest/api.html#disnake.Message "disnake.Message") object. If you need a message object, use [`original_message()`](https://docs.disnake.dev/en/latest/api.html#disnake.MessageInteraction.original_message "disnake.MessageInteraction.original_message") to fetch it, or use [`followup.send`](https://docs.disnake.dev/en/latest/api.html#disnake.Webhook.send "disnake.Webhook.send") directly instead of this method if you’re sending a followup message.
potent spear
final iron
slate swan
left crater
potent spear
slate swan
#

from where is that

left crater
#

docs

slate swan
#

WHERE

#

the coro can be from anything

#

anything

left crater
#

the discordpy docs

slate swan
#

which class

potent spear
#

attachment

left crater
#

idk lmao

slate swan
potent spear
#

!d discord.Attachment.save

unkempt canyonBOT
#

await save(fp, *, seek_begin=True, use_cached=False)```
This function is a [*coroutine*](https://docs.python.org/3/library/asyncio-task.html#coroutine).

Saves this attachment into a file-like object.
royal oar
# unkempt canyon

This seems to be with an interaction 😭 Is there a way for it to send it after i use like a clear command and it sends it say "cleared Messages"

royal oar
#

damn

final iron
#

Thats why I sent the docs

slate swan
#

you cant send a ephemeral msg if its not on an interaction

final iron
#

To show its only available for interactions

royal oar
#

Ahh ok

final iron
#

So disnake.MessageInteraction.channel.send doesn't return anything

potent spear
#

the return type tells you

final iron
#

How would the message object?

potent spear
#

there isn't one => None

potent spear
royal oar
#

saddening but thank you

slate swan
final iron
slate swan
#

thats what the coro returns

final iron
#
This method does not return a Message object. If you need a message object, use original_message() to fetch it, or use followup.send directly instead of this method if you’re sending a followup message.
#

Which is the issue. How would I get the message object of the message I sent because I need to edit it later

slate swan
#

what are you trying to do?

final iron
#

Trying to edit a message (triggered by button click) which the bot sent when a user picked an option from a menu

serene lynx
final iron
#

So to edit the message I would need a message object

#

Which is very convenient because disnake.MessageInteraction.channel.send doesn't return anything

potent spear
final iron
#

Basically yes

#
msg = await interaction.channel.send(embed=embed, view=Confirm(self.ctx))
await msg.edit(content="sus")
#

^ This is what im trying to do in a nutshell

#

ngl I'm kinda scared for anyone to see the code because its actual hell

potent spear
#

poop

view = MyView()
view.message = await channel.send('...', view=view)```
final iron
#

Okay, I think I need to rework all my code

slate swan
final iron
#

Yes need

potent spear
#

ctrl + a del
handles that for you

final iron
#

This is currently what I have

#

Very, very bad

#

Since my brain is being fried, how would I "fix" this

#

I need to rework all of it

potent spear
final iron
#

Because the way its structured makes everything complicated

final iron
#

I just have no idea how I would do that

potent spear
#

me neither, I'm excited for you

final iron
#

bruh

#

Okay if I can't rework it how would you suggest I make this in the first place

potent spear
#

by using examples in the docs

#

dpy has great examples on the gh

#

that way, you know for sure you're not implementing a shit method

final iron
#

My idea is I have a drop down menu filled with image sizes. When a user picks an image size it sends an embed with the image of the correct size and deletes the message with the image. Then user can then use the buttons to go back and forth to generate new images and go back to their old ones

slate swan
#

@final iron
after you edit a msg aka respond to the interaction you cannot edit it again as a response and you must use edit_original_message to edit the msg

final iron
final iron
cobalt jacinth
#

Pls let me what does this mean ?

final iron
cobalt jacinth
#

It happens when the discord bot starts

slate swan
#

thats what you should do

final iron
slate swan
#

cant even understand my msg😭

slate swan
final iron
#

And views

#

And selects

#

Basically everything to do with ui

slate swan
#

read the msg i wont explain it again lol

slate swan
final iron
cobalt jacinth
#

Okk either it's token issue or connection issue ?
Or when it's wrong token it says wrong token in error

slate swan
#

if the token is wrong it will give you a nonetype error

#

and as you can see you got the 503 http status code

final iron
slate swan
final iron
#

What

#

I'm editing my message in my on_forward_press method

slate swan
#

what params does it take?

final iron
#

self

slate swan
#

just self?

final iron
final iron
slate swan
#

alr

#

the heck is that structure

final iron
#

Thats my point

#

I need to rework the structure

slate swan
#

lol

final iron
#

I have no clue how. Can I get some help with that?

final iron
#

So its basically like a paginator

#

Except having a menu in there makes this so much harder

slate swan
final iron
#

I'm looking here

#

And theres no pagination

#

Actually nvm

#

Welp, time to scrap 3+ hours of work

slate swan
pliant gulch
#

Quite old though so there is probably an issue somewhere

unkempt canyonBOT
#

src/utils/hyperview.py lines 30 to 32

await interaction.response.send_message(
    "You cannot interact with other peoples menu", ephemeral=True
)```
slate swan
#

How to store a comment in a variable

slim ibex
#

like this?

x = # comment
#

yoou would still have to have a value for the variable

#

since comments do not count as code

slate swan
#

they can count as string

slim ibex
#
x = "#comment"
#

?

slate swan
final iron
slim ibex
#

idk if you quite understand

slate swan
final iron
#

How?

#

What?

slim ibex
#

lmao

pliant gulch
slim ibex
#

nice

echo wasp
#

How would I make a enable/disable command for my discord bot welcome message

leaden tapir
#

!d discord.Guild

unkempt canyonBOT
#

class discord.Guild```
Represents a Discord guild.

This is referred to as a β€œserver” in the official Discord UI.

x == y Checks if two guilds are equal.

x != y Checks if two guilds are not equal.

hash(x) Returns the guild’s hash.

str(x) Returns the guild’s name.
echo wasp
#

I bet I will need a database

slate swan
final iron
slate swan
sick iris
slim ibex
#

its been discontinued

#

you can still use it, but it's no longer maintained so it wont get new features

#

i would use disnake, or nextcord

#

!pypi nextcord\

unkempt canyonBOT
slim ibex
#

!pypi disnake

unkempt canyonBOT
slate swan
#

!d zip

unkempt canyonBOT
#
zip

zip(*iterables, strict=False)```
Iterate over several iterables in parallel, producing tuples with an item from each one.

Example:

```py
>>> for item in zip([1, 2, 3], ['sugar', 'spice', 'everything nice']):
...     print(item)
...
(1, 'sugar')
(2, 'spice')
(3, 'everything nice')
```...
slate swan
#

How do we make a bots' reply have emojis in them, in the embed

slate swan
#

else you just use normal name like :star:

#

but if its a custom emoji you'll be using \emoji and getting the escaped name

#

It's custom

final iron
#

Okay so I got the buttons working

#

I can now cycle back and forth through the images

#

I just need to add a menu

#

Which is going to be a pain in the ass

flat fulcrum
#

!pip pyaudio

unkempt canyonBOT
#

Bindings for PortAudio v19, the cross-platform audio input/output stream library.

slate swan
#

hi anyone building a discord bot lemme know i wanna work with you

echo wasp
final iron
misty ridge
#

is there anything wrong with this script? im trying to make my bot upload an edited picture that edited using PIL/Pillow

if msg.startswith("!stage"):
    img = Image.open('panggung.jpg')
    draw = ImageDraw.Draw(img)
    font = ImageFont.truetype('impact.ttf', 20)
    text = username
    draw.text((420, 272), text, font = font, align ="middle")
    img.save('meme.png')
    await channel.send(file=discord.File("meme.png"))

if i input "!stage" in a chat channel there will be no output
and the Log will show me this

Ignoring exception in on_message
Traceback (most recent call last):
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/client.py", line 343, in _run_event
    await coro(*args, **kwargs)
  File "main.py", line 110, in on_message
    await channel.send(file=discord.File("meme.png"))
AttributeError: 'str' object has no attribute 'send'
slate swan
#

dont use on_message to make commands.

#

use the command framework already , or you'll keep facing such issues

maiden fable
#

Do u even sleep @slate swan

slate swan
misty ridge
zealous dagger
#

@slate swan

slate swan
maiden fable
#

Lmao

misty ridge
#

@slate swan do bot these days use slash commands instead of prefix?

zealous dagger
slate swan
slate swan
zealous dagger
final iron
#

Use a library with slash command support like disnake

#

!pypi disnake

unkempt canyonBOT
slate swan
maiden fable
slate swan
maiden fable
#

Still no

pliant gulch
#

That would force message commands to be prefixed by the bot's mention

slate swan
#

yea

maiden fable
#

Wait you mean prefix commands?

zealous dagger
#

using disnake

slate swan
maiden fable
#

Ah

#

I was thinking about message application commands

slate swan
misty ridge
#

do people use this handler discord-py-slash-command

slate swan
#

ive not seen any "good" project using it

#

use some fork instead of a 3rd party library

maiden fable
slate swan
maiden fable
#

Idk

slate swan
#

lol

#

well its a single privacy policy command , do it doesnt matter

maiden fable
#

Facts

nimble plume
#

Why ppl use something[0]

#

What is that

maiden fable
#

Indexing

nimble plume
#

!index

slate swan
#

!e print([1,2,3][0]) # list indexing

slate swan
unkempt canyonBOT
#

@slate swan :white_check_mark: Your eval job has completed with return code 0.

1
slate swan
nimble plume
#

Nvmd j understnad

slate swan
#

great

nimble plume
maiden fable
slate swan
nimble plume
#

Ok

slate swan
#

its same , i use one liners wherever possible

slate swan
nimble plume
maiden fable
maiden fable
nimble plume
final iron
maiden fable
burnt monolith
#

So I keep hearing about how discord.py is about to be unsupported or something to that context. Can someone elaborate on this?

final iron
#

Its an extremely beginner topic

slate swan
slate swan
nimble plume
grim oar
nimble plume
final iron
slate swan
slate swan
maiden fable
nimble plume
slate swan
nimble plume
#

I only know print

burnt monolith
nimble plume
#

-_-

final iron
slate swan
final iron
#

You can't quantify how much you know in a percent

#

Doesn't work that way

slate swan
nimble plume
#

Stop!!!!

grim oar
#

Well yeah, discord will bring changes and nobody would implement them in dpy so it will stop working eventually

nimble plume
final iron
#

Ping the entire moderation team if you actually believe you are being bullied

slate swan
#

Lol

final iron
slate swan
#

now you did a ghost ping , they have message logs though πŸ™‚

nimble plume
slate swan
#

Imagine if people wouldnt argue for no reason pithink

burnt monolith
nimble plume
#

@slate swan i have created a dc bot ..

slate swan
#

;-;

nimble plume
#

and?... :(

final iron
nimble plume
grim oar
#

Use some other bot lib

slate swan
slate swan
#

Its completely upto you

slate swan
#

never ignore advices from ashley

slate swan
nimble plume
slate swan
slate swan
slate swan
burnt monolith
#

Understood, thanks you guys

nimble plume
slate swan
slate swan
slate swan
nimble plume
slate swan
slate swan
unkempt canyonBOT
#

@slate swan :white_check_mark: Your eval job has completed with return code 0.

0.8999999999999999
slate swan
nimble plume
grim oar
#

!ot

unkempt canyonBOT
slate swan
nimble plume
#

Im being rate limited

nimble plume
slate swan
#

Anyways, I'm out, dont eat my brain

nimble plume
#

Demotivated

slate swan
#

idk if its a good way of doing stuff but py welcome_message = (message .replace('$usermention' , str(event.member.mention)) .replace('$userid' , str(event.member.id)) .replace('$username' , str(event.member.username)) .replace('$userdiscriminator' , str(event.member.discriminator)) .replace('$userdiscrim' , str(event.member.discriminator)) .replace('$user' , str(event.member) )
i use this to replace welcome variables in welcome messages
any better method than using .replace ?

#

nvm too long

slate swan
nimble plume
grim oar
#

^

nimble plume
#

rule_7 = "Nevermind"

slate swan
pliant gulch
#

You could just format

zealous dagger
#

@slate swan where can I get

slate swan
# nimble plume *rule_7*..

;-; nvm why do people expect help if they behave like this
I hope someone helps you, thanku for the rule warning

zealous dagger
#

ApplicationCommandInteraction in disnake

slate swan
#

!e ```py
a = "so like this ? {name}".format(name="andy")
print(a)

unkempt canyonBOT
#

@slate swan :white_check_mark: Your eval job has completed with return code 0.

so like this ? andy
slate swan
#

alright makes sense

pliant gulch
grim oar
#

f string

nimble plume
grim oar
#

format is shit

zealous dagger
pliant gulch
#

All my homies don't use f strings and .format we using __format__

#

😎

slate swan
grim oar
slate swan
slate swan
zealous dagger
#

@slate swan

#

Can You

slate swan
#

Lol

zealous dagger
#

Ok

slate swan
#

!d disnake.ApplicationCommandInteraction

unkempt canyonBOT
#

class disnake.ApplicationCommandInteraction```
Represents an interaction with an application command.

Current examples are slash commands, user commands and message commands.

New in version 2.1.
zealous dagger
slate swan
nimble plume
slate swan
slate swan
slate swan
slate swan
#

its just one part of the code

slate swan
nimble plume
#

..

slate swan
#

!paste

unkempt canyonBOT
#

Pasting large amounts of code

If your code is too long to fit in a codeblock in discord, you can paste your code here:
https://paste.pythondiscord.com/

After pasting your code, save it by clicking the floppy disk icon in the top right, or by typing ctrl + S. After doing that, the URL should change. Copy the URL and post it here so others can see it.

nimble plume
#

Paste

final iron
#

I just want you to keep that in mind

slate swan
#

this is what the actual code looks like lol

nimble plume
slate swan
maiden fable
#

Imagine telling the God to use function

slate swan
final iron
slate swan
final iron
#

I just don't say anything or say that I don't know

maiden fable
pliant gulch
slate swan
pliant gulch
unkempt canyonBOT
#

@pliant gulch :white_check_mark: Your eval job has completed with return code 0.

Welcome to the guild Andy!
final iron
pliant gulch
#

This could also work, but it's over-complicating it

#

So I'd just go for format yea

slate swan
pliant gulch
slate swan
maiden fable
slate swan
#

i sec brb

final iron
maiden fable
#

U don't understand the meaning of an anonymous function

nimble plume
#

Ok seen

slate swan
maiden fable
#

Not talking about the dictionary meaning

pliant gulch
slate swan
maiden fable
#

Lefi

#

How did u even find such a name tho?

pliant gulch
#

Manga character

#

I'm rewriting that wrapper though, I'm working on Rin now

slate swan
maiden fable
maiden fable
pliant gulch
slate swan
#

so like , i have this command which allows user to configure there welcome messages , like $user replacing the user tag when the welcome message is sent

#

that was the point of using replace there

slate swan
maiden fable
grim oar
#

A custom Message object

pliant gulch
#

Just a proof-of-concept for custom classes when dispatching

grim oar
pliant gulch
#

In my example (the gist), I hook onto the MESSAGE_CREATE event basically

slate swan
slate swan
maiden fable
dreamy sluice
#

Anyone here know how I can add the discord bot to github and host it using heroku?

maiden fable
#

Heroku

#

Whyyyyyyyyyyyy

dreamy sluice
slate swan
dreamy sluice
#

I just wanna be able to run the bot while being able to use the github features

slate swan
dreamy sluice
#

:(

maiden fable
slate swan
maiden fable
#

I got a feeling Novia is gonna run the ot command soon

slate swan
maiden fable
dreamy sluice
slate swan
dreamy sluice
grim oar
slate swan
slate swan
maiden fable
dreamy sluice
grim oar
maiden fable
slate swan
# dreamy sluice which is the easiest one

While creating the bot app? Thats the one I use, create an app and scroll down, connect to github
also I guess
This is not the right channel to ask about heroku hosting

keen talon
maiden fable
#

Yay

slate swan
#

Welp

maiden fable
#

?

slate swan
# maiden fable ?

Thats too deep to understand, can we get a simpler explanation of your symbol, Lord

maiden fable
#

Ok I'm out

slate swan
#

Lol

#

hunter , and his god level symbols

slate swan
#

anyways , back to work
gib command ideas

slate swan
slate swan
maiden fable
#

@slate swan I seriously got the best command idea ever

slate swan
maiden fable
#

A command to give more command ideas πŸ₯Ί

slate swan
slate swan
slate swan
slate swan
#

see how the suggestions get flooded

slate swan
#

hunter add a suggest feature in hunai , and we'll uwu you

keen talon
maiden fable
slate swan
#

lets see what hunAI responds with on Uwus

maiden fable
#

Sure

keen talon
#

@maiden fable Do you understand their language lol pithink pithink

maiden fable
#

No

slate swan
#

until hunter did something like ```py
@HunAI.event
async def on_message(message):
if 'uwu' in message.content.lower(): return
await HunAI.process_commands(message)

maiden fable
#

Nah

#

Also I use cogs FYI

slate swan
#

yea but cogs wont override the bot's prefix commands like an event does

slate swan
#

this will make any content with uwu un processable

slate swan
maiden fable
slate swan
#

~~ πŸ˜” no thats illegal , we cannot let that happen to a god~~

slate swan
maiden fable
#

Bruh, I'm out

slate swan
#

!ot

unkempt canyonBOT
slate swan
#

ashley being hunter

#

drops another codeblock , so noone actually moves to the ot channel

#

cof cof

#

Β―_(ツ)_/Β―

#

.topic

lament depotBOT
#
**What's one feature you wish more developers had in their bots?**

Suggest more topics here!

slate swan
#

a suggest feature

slate swan
slate swan
#

oh btw ,

slate swan
slate swan
sick sundial
slate swan
#

currently the thing i need most is a better on_guild_add event

#

πŸ’€ i dont want my bot to exist in servers with like 90% bots

shadow wraith
#

does anyone know how you could see a message's amount of reactions (like what emoji and how much people reacted with that emoji)

unkempt canyonBOT
shadow wraith
#

oh so for example

this = await ctx.send("hello world")
print(this.reactions)

right?

maiden fable
shadow wraith
#

oh yeha and how do you edit an embed

maiden fable
#

!d discord.Message.embeds

unkempt canyonBOT
shadow wraith
#

uh

keen talon
pliant gulch
maiden fable
#

embed = message.embeds[0]
embed.title = "Why not change the title"

shadow wraith
maiden fable
keen talon
#

@maiden fable Your status made me sad 😒😭

maiden fable
slate swan
# slate swan wdym

if a bot's guilds have too many common owners or mostly bot accounts in the .users , it may get blacklisted from verification with a reason : "inorganic growth"

keen talon
slate swan
maiden fable
#

Hmm I still haven't watched NWH

keen talon
#

😬 😬

slate swan
slate swan
pliant gulch
shadow wraith
#

how would you get how much people reacted on a specific emoji btw

slate swan
#

πŸ˜‚

maiden fable
keen talon
#

!d discord.Reaction

unkempt canyonBOT
#

class discord.Reaction```
Represents a reaction to a message.

Depending on the way this object was created, some of the attributes can have a value of `None`.

x == y Checks if two reactions are equal. This works by checking if the emoji is the same. So two messages with the same reaction will be considered β€œequal”.

x != y Checks if two reactions are not equal.

hash(x) Returns the reaction’s hash.

str(x) Returns the string form of the reaction’s emoji.
keen talon
#

Read the docs pithink

maiden fable
#

???

pliant gulch
maiden fable
#

Ik, but can't really help it. They deleted the ID Proof after an year after u delete your verified bots

pliant gulch
#

What are your profit margins like with hosting the bot and gaining from it

#

Or are you losing money

maiden fable
#

Anyways, it was my old ID Proof with the old pic, address and stuff, so I don't care that much

pliant gulch
maiden fable
#

I am neither gaining, nor losing money. It is more of a hobby project, hosted on a friend's VPS

pliant gulch
#

πŸ‘οΈ πŸ‘οΈ

#

Surprised you got someone to do that for you

maiden fable
#

Haha yups

slate swan
#

not everyone is a god like hunter

maiden fable
#

Dude stop it

#

Its annoying

slate swan
slate swan
lament depotBOT
#
**What feature would you be the most interested in making?**

Suggest more topics here!

maiden fable
slate swan
slate swan
#

ok so how do i write a privacy policy and tos now

shadow wraith
#

privacy policy is a privacy policy

slate swan