#discord-bots

1 messages ยท Page 700 of 1

manic wing
#

probably a combination of you fucked up the list and a shit error handler

slate swan
#

but this shits annoying

manic wing
#

well if it doesnt work...then youve fucked something up - dont say 'nah' until it works

slate swan
#

file = open("channels", "r")
channel_list = file.read().split()
file.close()

#

this is the list

manic wing
slate swan
#

stil nothing

manic wing
#

can you show all the code

slate swan
#

@client.event
async def on_ready():
    await asyncio.sleep(1)
    servercount = str(len(client.guilds))
    usercount =  str(len(bot.users))
    activity = discord.Activity(type=discord.ActivityType.watching, name=servercount+" servers [a!]")
    await client.change_presence(status=discord.Status.online, activity=activity)
    file = open("channels", "r")
    channel_list = file.read().strip().split()
    file.close()

    print(channel_list)
    for channel_id in channel_list: #where channel_list is a list of id's
        channel = bot.get_channel(int(channel_id)) #searches bots cache for the channel
        embed = discord.Embed(title="> __Channel inactive__", color=0xFF0000)
        embed.add_field(name="Reason for inactivity", value="```Restart by developer```", inline=False)
        embed.add_field(name="Note", value="```Small bug fixes || Added new categories```", inline=False)
        await asyncio.sleep(3)
        await channel.send(embed=embed)
manic wing
#

why the fuck

#

do you have a bot and client

slate swan
#

cuz

#

i started with client and switched to bot for some reason

manic wing
#

why do you have some client then still...ctrl + r it all to bot

slate swan
#

rn client is defined as bot

manic wing
#

pls replace all client instances with bot

slate swan
#

doesn't matter

manic wing
#

idk how tf client.event is working if its called bot

slate swan
#

cuz client = bot

manic wing
#

seeya

slate swan
#

intents.members = True
bot = commands.Bot(command_prefix="a!", intents=intents, status=discord.Status.online, help_command=None)
client = bot

velvet tinsel
#

wtf bot.users are you using client or bot ๐Ÿ˜•

manic wing
velvet tinsel
#

I'm out of here goodbye

manic wing
#

same

velvet tinsel
#

yeah

silent portal
#

How can I get every emoji in a message?

@bot.event
async def on_message(message):
    for message.guild.emojis in message:```
Something like this
velvet tinsel
manic wing
#

i go to help channels

velvet tinsel
#
for emoji in ctx.guild.emojis:
velvet tinsel
silent portal
velvet tinsel
#

well

#

I did some googling

#

"That's not how discord relays emojis afaik. In discord.py, native emojis are represented either by their unicode string (\U0001f44d) or by the emoji "image" itself (๐Ÿ™‚), not by their Discord reference (๐Ÿ™‚). You'll need an "emoji list" to check against for native emojis, there are some python packages that you can try as well here's the first one that pops up on pypi emoji.

For custom emojis, you can do something like this:

if any(str(emoji) in message.content for emoji in message.guild.emojis):
    #do something with the message

But that will only check against custom emojis that are in that specific guild, not custom emojis from another guild. To check for external custom emojis you'll probably need to use a regex."

slate swan
velvet tinsel
#

nice pfp btw

slate swan
#

Thx

velvet tinsel
#

and it's you're

#

fix your grammar

slate swan
#

Shh

slate swan
velvet tinsel
#

google it please ๐Ÿšถโ€โ™‚๏ธ

slate swan
#

You love google

silent portal
velvet tinsel
#

it's my ex

slate swan
velvet tinsel
silent portal
#

I cannot use the emoji

velvet tinsel
#

how dare you

silent portal
#

variable

silent portal
velvet tinsel
silent portal
#

emoji = discord.Emoji ?

velvet tinsel
velvet tinsel
slate swan
velvet tinsel
#

get your grammer right

#

and *going to

slate swan
#

Its grammar*

velvet tinsel
#

I was implying sarcasm

slate swan
#

Sure you werepithink

velvet tinsel
#

I was

#

you have a problem with that?

slate swan
#

@velvet tinsel have you seen timeouts?

velvet tinsel
slate swan
#

!d disnake.Member.timeout

unkempt canyonBOT
#

await timeout(*, duration=..., until=..., reason=None)```
This function is a [*coroutine*](https://docs.python.org/3/library/asyncio-task.html#coroutine).

Times out the member from the guild; until then, the member will not be able to interact with the guild.

Exactly one of `duration` or `until` must be provided. To remove a timeout, set one of the parameters to `None`.

You must have the [`Permissions.moderate_members`](https://docs.disnake.dev/en/latest/api.html#disnake.Permissions.moderate_members "disnake.Permissions.moderate_members") permission to do this.

New in version 2.3.
velvet tinsel
#

uwu

slate swan
#

Pretty nice

rare saddle
#

Please tell me how to make the bot load slash commands on all servers?

velvet tinsel
#

nice for moderating

disnake ๐Ÿ˜ญ

slate swan
slate swan
velvet tinsel
slate swan
rare saddle
slate swan
#

Iirc

velvet tinsel
#

hmm

#

on mobile I see

slate swan
#

If just for some guilds use test_guilds=[]
I think it is for some guilds

rare saddle
slate swan
#

Idrk show code

rare saddle
velvet tinsel
#

PEP8

#

for crying out loud

slate swan
#

You dont follow it either

slate swan
velvet tinsel
#

says the guy who doesn't put spaces after the hashtags

tawdry perch
velvet tinsel
#

๐Ÿšถโ€โ™‚๏ธ

slate swan
slate swan
velvet tinsel
rare saddle
velvet tinsel
#

also

hello okimii

#

and cyberweapon

tawdry perch
#

Hello ๐Ÿ‘‹

velvet tinsel
#

merry christmas

slate swan
#
def __init__(self,bot: commands.Bot):
#

Lol

slate swan
slate swan
tawdry perch
slate swan
#

24 is Christmas eve

#

25 is Christmas

tawdry perch
slate swan
#

All my family celebrates it the 25

tawdry perch
#

the 25th day is just a second day for it, well eating what ever is left from 24th day and just smth random

#

but this is a bit offtopic

slate swan
#

Isnt the 24 the day before it hence the name "eve"

tawdry perch
#

ยฏ_(ใƒ„)_/ยฏ

slate swan
#

Lol

slate swan
#

Dont make me show your google command pithink yert

#

how can i check if a member has perms to timeout?

#

with the

@commands.has_permissions()

decorator

tawdry perch
#

moderate_members I guess

#

!d disnake.Member.timeout

unkempt canyonBOT
#

await timeout(*, duration=..., until=..., reason=None)```
This function is a [*coroutine*](https://docs.python.org/3/library/asyncio-task.html#coroutine).

Times out the member from the guild; until then, the member will not be able to interact with the guild.

Exactly one of `duration` or `until` must be provided. To remove a timeout, set one of the parameters to `None`.

You must have the [`Permissions.moderate_members`](https://docs.disnake.dev/en/latest/api.html#disnake.Permissions.moderate_members "disnake.Permissions.moderate_members") permission to do this.

New in version 2.3.
tawdry perch
#

Ye

slate swan
#

mhmmmm

#

thanks

tawdry perch
#

Np

snow flare
#

Is it possible to put multiple views onto a message?

#

For example as an array like this:

await channel.send("Hello there", view=[view1, view2])
snow flare
# slate swan why exactly?

well, because I have two different view classes that I want to put onto one message, and I don't want to create a separate view class to combine them together because it's just gonna take up a lot of space

pliant gulch
#

You can just have one view class and just add ActionRow objects

#

Each of which can have their own components

snow flare
tawdry perch
#

#bot-commands please

karmic totem
#

oh my bad

pliant gulch
#

Not gonna write an example, but should be just like creating buttons but instead you create a ActionRow and then add buttons to them

slate swan
#

this hurts my eyes

pliant gulch
#

Woops, its ActionRow

#

!d discord.ActionRow

unkempt canyonBOT
#

class discord.ActionRow```
Represents a Discord Bot UI Kit Action Row.

This is a component that holds up to 5 children components in a row.

This inherits from [`Component`](https://discordpy.readthedocs.io/en/master/api.html#discord.Component "discord.Component").

New in version 2.0.
snow flare
#

Is there a way to attach a few different views onto an action row?

#

or is it just buttons?

pliant gulch
#

Views no, buttons yes but it's not just buttons and instead every message component

slate swan
#

.topic

lament depotBOT
#
**What unique features does your bot contain, if any?**

Suggest more topics here!

slate swan
#

uh

#

auto nsfw

slate swan
tawdry perch
#

I don't even want to know why

slate swan
#

lol

#

.topic

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

Suggest more topics here!

slate swan
#

uh

slate swan
cold sonnet
slate swan
#

dank memers nsfw module was removed

#

recently

slate swan
cold sonnet
#

in vc

vast gale
pliant gulch
#

Has discord raised the reaction add endpoints rate limits yet again

#

Might as well just kill the archiac reaction paginators

manic wing
pliant gulch
#

Can't remember but this is a pretty high rate limit

slate swan
#

No wait I was looking at the wrong thing ๐Ÿƒโ€โ™‚๏ธ

final iron
#

Has youtube changed their policy on downloading/streaming videos? Mee6 has reimplemented their music feature

shrewd inlet
#

my commands arenโ€™t working, can i show someone my code because idk what i did wrong

#

i need help

slate swan
#

does client.get_channel() work with intent or without?

velvet tinsel
#

well caeden and andy and kraots, it's a field day for you to answer these questions

#

I'm gonna go sleep

placid skiff
slate swan
slate swan
slate swan
#

lol

shrewd inlet
#

can someone tell me whatโ€™s wrong

velvet tinsel
#

oh no replit

#

anyways night night okimii

shrewd inlet
placid skiff
#

you have to tell what is the problem we can't check all your code

velvet tinsel
slate swan
placid skiff
shrewd inlet
slate swan
slate swan
slate swan
shrewd inlet
#

itโ€™s the @bot.command

slate swan
#

Gn bro

slate swan
#

!code @shrewd inlet

unkempt canyonBOT
#

Here's how to format Python code on Discord:

```py
print('Hello world!')
```

These are backticks, not quotes. Check this out if you can't find the backtick key.

slate swan
#

Wait show me ur code

velvet tinsel
#

he's using bot.command()

shrewd inlet
#
import discord
import os
import requests
import json
import random
from discord.ext import commands
from discord import Member
from discord import Embed
from replit import db
from keep_alive import keep_alive

bot = commands.Bot(command_prefix=";")

@bot.event
async def on_ready():
  print('We have logged in as {0.user}'.format(bot)) 
 
@bot.event
async def on_message(message):
   if message.author == bot.user:
    return
  
@bot.command()
async def lyric(ctx):
   await ctx.reply(random.choice(gracie_lyrics))

@bot.command()
async def instagram(ctx):
   await ctx.reply('https://www.instagram.com/gracieabrams/')

@bot.command()
async def intro(ctx):
   await ctx.channel.send('https://open.spotify.com/playlist/51TIRdARgx0ewyPr1PbuoX?si=nw_iyfHLTaiWRWqFVVYXPw')

@bot.command()
async def pic(ctx):
   await ctx.reply(random.choice(gracie_images))

@bot.command()
async def track(ctx):
   await ctx.reply(random.choice(gracie_tracks))

@bot.command()
async def project(ctx):
   await ctx.reply(random.choice(gracie_projects))

@bot.command()
async def cover(ctx):
   await ctx.reply(random.choice(gracie_covers))

@bot.command()
async def ping(ctx):
   await ctx.reply('pong!')

@bot.command()
async def commands(ctx):
   await ctx.reply('__**GRACIE ABRAMS COMMANDS**__\n\n`;cover` โ€” **sends a random project cover**\n`;instagram` โ€” **sends gracieโ€™s instagram**\n`;intro` โ€” **sends introduction playlist**\n`;lyric` โ€” **sends a random lyric**\n`;mv` โ€” **sends a random music video**\n`;pic` โ€” **sends a random picture of gracie**\n`;project` โ€” **sends a random project**\n`;track` โ€” **sends a random track**')

keep_alive()

bot.run(os.getenv('TOKEN'))
velvet tinsel
#

what's wrong

shrewd inlet
#

thatโ€™s not the whole code, the gracie_covers etc are image files

velvet tinsel
#

glad you missed out all the links

shrewd inlet
velvet tinsel
#

yeah that return sucks

slate swan
#

ok first no need for intents

shrewd inlet
#

so what do i need to do

velvet tinsel
#

anyways it doesnt show up with any errors

#

you can rule indents out

slate swan
#

and second no need for that on msg event

velvet tinsel
#

it works fine to me

shrewd inlet
shrewd inlet
velvet tinsel
#

remove it

slate swan
slate swan
#

NO NEED FOR INTENTS

shrewd inlet
shrewd inlet
slate swan
#

no need for it

shrewd inlet
#

msg.event?

slate swan
velvet tinsel
slate swan
velvet tinsel
slate swan
slate swan
shrewd inlet
velvet tinsel
#

it doesn't do anything

velvet tinsel
slate swan
#

๐Ÿ˜‚๐Ÿ˜‚๐Ÿ˜‚ he needs intents to access that event

slate swan
velvet tinsel
#

you're using event

velvet tinsel
#

learn python

#

anyways you could have used listen

slate swan
shrewd inlet
#

OH MY GOD

velvet tinsel
slate swan
shrewd inlet
#

@velvet tinsel you were right my man

velvet tinsel
shrewd inlet
#

i love you

velvet tinsel
slate swan
#

bro

velvet tinsel
slate swan
slate swan
#

dekriel didnt do anything wtf

velvet tinsel
#

I used it before

velvet tinsel
slate swan
velvet tinsel
slate swan
slate swan
#

i was the first to point it out lol

velvet tinsel
#

it's kinda weird but here it is

slate swan
#

no need for intents on a msg event lmfao

slate swan
velvet tinsel
#
@client.listen()
async def on_message(message):
  if message.startswith("tian")
    ...yeah it's cringe
shrewd inlet
#

apparently i cant use the command help

#

like

velvet tinsel
#

I did listen() since if I did event it brok

velvet tinsel
#

now I name it okimii

slate swan
velvet tinsel
#

I mean

#

bot

velvet tinsel
shrewd inlet
#
Traceback (most recent call last):
  File "main.py", line 74, in <module>
    async def help(ctx):
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/ext/commands/core.py", line 1263, in decorator
    self.add_command(result)
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/ext/commands/core.py", line 1149, in add_command
    raise CommandRegistrationError(command.name)
discord.ext.commands.errors.CommandRegistrationError: The command help is already an existing command or alias.
#

itโ€™s saying that

velvet tinsel
#

there's already a help command

slate swan
#
@bot.listen("on_message")
async def on_message(message):
  if message.startswith("tian"):
    ...yeah it's cringe
shrewd inlet
slate swan
shrewd inlet
slate swan
slate swan
wispy spade
shrewd inlet
velvet tinsel
#

?

shrewd inlet
velvet tinsel
#

it's already built in

shrewd inlet
#

i want to remove it

velvet tinsel
shrewd inlet
#

and replace it

velvet tinsel
slate swan
slate swan
velvet tinsel
#

or bot.rem damn it, papi already said it

slate swan
#

help command kwarg is better

placid skiff
velvet tinsel
#

bro ๐Ÿ˜ญ

slate swan
wispy spade
velvet tinsel
slate swan
velvet tinsel
#

tbh

velvet tinsel
#

I prefer $

shrewd inlet
#

it worked tysm

slate swan
#

yw

velvet tinsel
slate swan
slate swan
velvet tinsel
slate swan
velvet tinsel
placid skiff
#

in this way he will never learn

slate swan
placid skiff
#

and he need to learn cuz he is really bad xD

velvet tinsel
#

and me ๐Ÿšถโ€โ™‚๏ธ

slate swan
velvet tinsel
#

he doesn't appreciate me

shrewd inlet
velvet tinsel
slate swan
slate swan
shrewd inlet
slate swan
#

keep it up

velvet tinsel
shrewd inlet
#

@slate swan ty

slate swan
placid skiff
wispy spade
slate swan
velvet tinsel
#

you did bot = commands.Bot(command_prefix=";", help_command=None)

slate swan
#

its a kwarg in the bot constructor

placid skiff
slate swan
velvet tinsel
#

you didn't even issue PEP8

velvet tinsel
slate swan
velvet tinsel
slate swan
#

would help

velvet tinsel
slate swan
#

go to sleep lmfao

velvet tinsel
#

wait

#

narr

#

it's 11:00 o shit sleepy time night night okimii

#

bye~

slate swan
placid skiff
#

Guys, just a little off topic, but not that much:
If somebody offers you a job paid by the hour, make sure that the job is a software in assembly language
D_D

velvet tinsel
#

also okimii

#

I'll make you a deal

slate swan
#

im eating

velvet tinsel
#

idgaf

slate swan
#

_>

velvet tinsel
#

next time someone asks a question I'll lay out the solution as a stack overflow answer

#

with lots of juicy detail

#

ok?

slate swan
#

i swear if you lay a 10 year old solution im going to come to your house

velvet tinsel
#

I'll give you the address

#

night night okimii

slate swan
#

already know it

velvet tinsel
#

and I'll also buy you the plane ticket

slate swan
#

gn

slate swan
#

now go to sleep

shrewd inlet
#

i love u all sm for helping me, i appreciate it

slate swan
#

anytime! thats why this channel is forpithink

shrewd inlet
#

how do i make a command that will repeat what a member says?

example:

MEMBER: ;say hello whatโ€™s up

BOT: hello whatโ€™s up

slate swan
#

you can use a kwarg to eat all the text

shrewd inlet
#

me having no idea what a kwag is: zymochaconfused2

slate swan
#
@bot.command()
async def say(ctx,*,rep):
    await ctx.send(rep)
shrewd inlet
#

ty

slate swan
#

that should work

shrewd inlet
#

thanks!!!

#

it worked :))

slate swan
#

nice :))

slate swan
slate swan
#

U can do @shrewd inlet

  #ur code```
slate swan
#

this is a good example

@bot.command()
async def say(ctx,*,rep):
    if "discord.gg/" in rep:
        await ctx.send("cannot say that")
    else:
       await ctx.send(rep)
slate swan
#

you can check a list if you wanted to

slate swan
#

๐Ÿคท๐Ÿพ So he can learn py

shrewd inlet
#

ty

#

well tbh iโ€™m not looking to learn py i just wanna have this bot

slate swan
#

anyways gn yall

shrewd inlet
#

at some point i will wanna learn

#

goodnight !!!!

slate swan
#

huh?

slate swan
livid lichen
#

I'm trying to make a poki here

shrewd inlet
slate swan
#

!indents

unkempt canyonBOT
#

Indentation

Indentation is leading whitespace (spaces and tabs) at the beginning of a line of code. In the case of Python, they are used to determine the grouping of statements.

Spaces should be preferred over tabs. To be clear, this is in reference to the character itself, not the keys on a keyboard. Your editor/IDE should be configured to insert spaces when the TAB key is pressed. The amount of spaces should be a multiple of 4, except optionally in the case of continuation lines.

Example

def foo():
    bar = 'baz'  # indented one level
    if bar == 'baz':
        print('ham')  # indented two levels
    return bar  # indented one level

The first line is not indented. The next two lines are indented to be inside of the function definition. They will only run when the function is called. The fourth line is indented to be inside the if statement, and will only run if the if statement evaluates to True. The fifth and last line is like the 2nd and 3rd and will always run when the function is called. It effectively closes the if statement above as no more lines can be inside the if statement below that line.

Indentation is used after:
1. Compound statements (eg. if, while, for, try, with, def, class, and their counterparts)
2. Continuation lines

More Info
1. Indentation style guide
2. Tabs or Spaces?
3. Official docs on indentation

livid lichen
slate swan
#

edited the msg to btw

shrewd inlet
#

ty

slate swan
#

yw

shrewd inlet
#

and i can also do it with @\everyone and @\here right?

slate swan
#

yes

livid lichen
#

but everyone will just annoy everyone

slate swan
#

if you dont want some words to repeat just check a list

sage otter
#

using in to check for things like discord links in strings isnโ€™t really that good btw. Consider using regex.

slate swan
#

why exactly?

sage otter
#

Because regex was built for this task alone.

slate swan
#

true

shrewd inlet
#

whatever works, works ๐Ÿคท๐Ÿปโ€โ™‚๏ธ

hallow lake
#

i have a weird issue regarding my discord moderation bot

#

mod bots have dashboards that let you set punishments for certain offences

#

and my bot's warn system is based on warn points rather than "normal" warns

#

but its possible to make an offence so that it punishes you but doesnt directly give you warn points

#

like, have it automatically mute, kick, or temp ban

rugged marsh
#

you could read the user message

hallow lake
#

was that replying to me

rugged marsh
#

yea

#

check for all bad words on user message

hallow lake
#

but what if for example, a server sets the kick threshold at 20 points and ban threshold at 40

#

and someone sends a message with stuff so that the punishment would be "auto kick"

#

and they are at 39 points

rugged marsh
#

you have to set a cooldown for that points tho

hallow lake
#

wdym

rugged marsh
#

after 5 minutes or 10, you must -1 their warning point

hallow lake
#

why

#

that makes no sense imo

rugged marsh
#

Give them a chance?

#

idk :/

hallow lake
#

why would you periodically remove someones infractions

rugged marsh
hallow lake
#

like, how do i give the warning points in such a case

manic wing
rugged marsh
#

Make 2 point system I guess?

slate swan
#

or from a range

hallow lake
#

in this case they committed an offence that doesnt directly give warn points as punishment tho...

but it auto mutes/kicks/bans

rugged marsh
#

then don't add warn point to them

hallow lake
#

for mutes that might work but for kicks and tempbans that doesnt really make sense imo

floral citrus
#

anyone that can help me how to make the text to a url?

hallow lake
#

would having other kick/ban thresholds based on how many times you have been muted/kicked/tempbanned be a good idea

slate swan
rugged marsh
#

wdym?

slate swan
#

has to be a str

floral citrus
rugged marsh
#

he'll understand

#

oh

slate swan
#

yeah but some dont lol

#

better to be clear yk

outer violet
#

Is it possible to get the bots role color and avatar for the thumbnail in an embed?

manic wing
unkempt canyonBOT
#
Not gonna happen.

No documentation found for the requested symbol.

manic wing
#

this is what it is

#

its just not documented

#

but role color - no

visual island
#
embed = discord.Embed(..., color = ctx.me.colour)
embed.set_thumbnail(url=ctx.me.display_avatar.url)
outer violet
manic wing
#

you can change the embed color

#

but not the thumbnail color

outer violet
#

Yeah so how would I get the bots role color?

heavy folio
#

ctx.me.color gets the bot's role color

visual island
#

nothing, the first is just neater

slate swan
visual island
#

It save up some lines though btw, I dont really care about pings tbh

slate swan
shrewd inlet
#

how do i make an embed autoresponder command

#

like for example:

MEMBER: ;help

BOT: (the embed)

quaint epoch
#

is there any way to timeout a member/user object?

#

because the discord app provides it

#

ping me if you have an answer

slate swan
quaint epoch
slate swan
#

!d disnake.Member.timeout

unkempt canyonBOT
#

await timeout(*, duration=..., until=..., reason=None)```
This function is a [*coroutine*](https://docs.python.org/3/library/asyncio-task.html#coroutine).

Times out the member from the guild; until then, the member will not be able to interact with the guild.

Exactly one of `duration` or `until` must be provided. To remove a timeout, set one of the parameters to `None`.

You must have the [`Permissions.moderate_members`](https://docs.disnake.dev/en/latest/api.html#disnake.Permissions.moderate_members "disnake.Permissions.moderate_members") permission to do this.

New in version 2.3.
quaint epoch
#

hmm, should i keep main system of using roles to mute ppl?

slate swan
slate swan
slate swan
quaint epoch
#

I'm confused

slate swan
slate swan
#

Supports up to 28 days in the future. May not be used in combination with theย untilย parameter.

#

I see

slate swan
unkempt canyonBOT
#

class discord.Embed(*, colour=Embed.Empty, color=Embed.Empty, title=Embed.Empty, type='rich', url=Embed.Empty, description=Embed.Empty, timestamp=None)```
Represents a Discord embed.

len(x) Returns the total size of the embed. Useful for checking if itโ€™s within the 6000 character limit.

bool(b) Returns whether the embed has any data set.

New in version 2.0.

Certain properties return an `EmbedProxy`, a type that acts similar to a regular [`dict`](https://docs.python.org/3/library/stdtypes.html#dict "(in Python v3.9)") except using dotted access, e.g. `embed.author.icon_url`. If the attribute is invalid or empty, then a special sentinel value is returned, [`Embed.Empty`](https://discordpy.readthedocs.io/en/master/api.html#discord.Embed.Empty "discord.Embed.Empty").

For ease of use, all parameters that expect a [`str`](https://docs.python.org/3/library/stdtypes.html#str "(in Python v3.9)") are implicitly casted to [`str`](https://docs.python.org/3/library/stdtypes.html#str "(in Python v3.9)") for you.
shrewd inlet
slate swan
quaint epoch
#

hey anyone know what values the duration param takes in member.timeout()?

quaint epoch
manic wing
quaint epoch
slate swan
# quaint epoch does it take floats? and if so is it days, seconds, minutes or what?

Parameters

durationย (Optional[Union[float,ย datetime.timedelta]]) โ€“ The duration (seconds or timedelta) of the memberโ€™s timeout. Set toย Noneย to remove the timeout. Supports up to 28 days in the future. May not be used in combination with theย untilย parameter.

untilย (Optional[datetime.datetime]) โ€“ The expiry date/time of the memberโ€™s timeout. Set toย Noneย to remove the timeout. Supports up to 28 days in the future. May not be used in combination with theย durationย parameter.

reasonย (Optional[str]) โ€“ The reason for this timeout. Appears on the audit log.

#

You can only use one kwarg btw

quaint epoch
slate swan
quaint epoch
slate swan
vast gale
slate swan
#

You can only use one tho

vast gale
#

you can use either duration or until, but not both

#

and reason

slate swan
vast gale
#

so that's 2 kwargs that you can always use

#

just not 3

#

and actually we should typehint that with overloads

slate swan
#

I never said how much you could use

slate swan
vast gale
#

ye

slate swan
#

lol

quaint epoch
#

Why does it give me this error? File "C:\Users\shake\AppData\Local\Programs\Python\bot.py", line 507 await member.timeout(duration=duration, *, reason=reason) ^^^^^^^^^^^^^^^^^ SyntaxError: iterable argument unpacking follows keyword argument unpacking

#
duration = (time * 60)```
#

so why did i get that error? (time is a param that is in minutes)

visual island
#

you dont need the *

slate swan
#

Your making a kwarg a kwarg lol

quaint epoch
#

ah i added the * in the wrong spot :/

slate swan
#

Yeah it should be in params

quaint epoch
slate swan
#

Lol

quaint epoch
#

now it's giving me an error when i do -

#

it said that it is an invalid perm

slate swan
#

Yeah it happened to me

#

So i just left

ban_members=True
quaint epoch
slate swan
quaint epoch
#

so i just ran the timeout command, it says that Member has no attr timeout, even tho im using disnake

slate swan
#

weird mind ending the command

quaint epoch
#

here is the code ```py
@client.command()
@commands.has_permissions(manage_messages=True, kick_members=True, ban_members=True)
async def timeout(ctx, member: discord.Member, time: float, *, reason='None'):
duration = (time * 60)
await member.timeout(duration=duration, reason=reason)
try:
await member.send(f'''{member.mention} you were put in the timeout chair by {ctx.author} for {time} minutes, because:
{reason}.''')
except (discord.HTTPException, discord.errors.HTTPException, discord.ext.commands.errors.CommandInvokeError,
commands.CommandInvokeError, commands.CommandError, AttributeError, discord.Forbidden):
print(f'Cannot direct message {member.name}.')
await ctx.send(f'''{ctx.author.mention} was put {member.mention} in the timeout chair for {time} minutes, because:
{reason}.''')

#

i read member as a member object, should i have fetched the member using the id instead?

slate swan
#

idk all seems good

quaint epoch
#

okay guess im going to delete these commands

slate swan
#

did you import disnake as discord?

quaint epoch
slate swan
#

weird dont tho wait for someone who knows

quaint epoch
#

im not going to push this onto github tho lol

slate swan
#

in params make time have a default value of None so if not given it will unmute them

async def timeout(ctx, member: discord.Member, time: float = None, *, reason='None'):
slate swan
maiden fable
slate swan
quaint epoch
#

so, essentially, i wanted to do member.timeout() in disnake, but it says that Member object doesn't have attr called 'timeout'

#

even tho i imported disnake

maiden fable
#

Did u update disnake?

quaint epoch
maiden fable
#

No

quaint epoch
maiden fable
#

install -U disnake

#

Add the -U

#

That means force update

quaint epoch
maiden fable
#

Yea

quaint epoch
#

alr

#

didn't work

#

says that pip don't exist

#

event tho i installed it

maiden fable
#

py -m pip install -U disnake

slate swan
#

weird i get no errors

@bot.command(aliases=["mute", "mutemember"])
@commands.has_permissions(ban_members=True)
async def timeout(ctx,member: disnake.Member,time=None,*,reason=None):
    await member.timeout(duration=time,reason=reason)
quaint epoch
#

yeah im trying that lol

#

so, i upgraded from 2.2.2, to 2.2.2??

maiden fable
#

Weird no

slate swan
#

@quaint epoch btw dont typehint duration as a float so users can use duration as a datetime delta obj

quaint epoch
maiden fable
#

That should update to 2.3

quaint epoch
#

okay i got 2.3

#

lemme see if it works now

maiden fable
#

!e
from datetime import datetime
time = datetime.utcnow()
print(float(time))

#

Hmmmmmmm okay

manic wing
#

imagine using slash commands

#

im waiting till the week before it changes

#

it will be least fucked then

#

its all cancer rn

quaint epoch
#

nice it worked

slate swan
#

they seem useful but idk why i should change all my commands to slash commands

manic wing
#

soon dislash will win

maiden fable
manic wing
#

what โ€˜staffโ€™ lol

#

contributers contribute whenever they want to

maiden fable
#

Discord devs and everyone else

#

Ah u mean disnake one

manic wing
#

yeah that

maiden fable
#

Thought u meant discord changing stuff

manic wing
#

no

#

disnake will win soon and then pycord devs will contribute to it

#

its too split rn

#

we need daddy disnake to dominate

#

fuck pycord | nextcord | all that shit

pliant gulch
pliant gulch
# pliant gulch what

And if you were to typehint it as a float you can just do datetime.datetime.utcnow() + datetime.timedelta(seconds=time)

pliant gulch
#

How do you not get any errors btw from your code

pliant gulch
#

can you run that code again but print type(time)

slate swan
#

i type hinted it to a float lol

slate swan
#

i didnt even tested it out i just pushed it to git lol

pliant gulch
slate swan
#

no it was i just edited it

pliant gulch
#

I'm so confused

slate swan
#

nvm lol

strong sluice
#
Ignoring exception in on_message
Traceback (most recent call last):
  File "C:\Users\bruh\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\client.py", line 343, in _run_event
    await coro(*args, **kwargs)
  File "C:\Users\Usuario\Desktop\Hehe.py", line 12, in on_message
    if message.content.lowet().startswith('>teste'):
AttributeError: 'str' object has no attribute 'lowet'```
#
import discord
import asyncio

client = discord.Client()

@client.event
async def on_ready():
    print('hello?')

@client.event
async def on_message(message):
    if message.content.lowet().startswith('>teste'):
        await client.send_message(message.channel, "Oi")

client.run('bruh')```
maiden fable
#

lower*

#

@strong sluice

slate swan
#

And don't use Client for commands shipit

maiden fable
#

Yea that too

slate swan
#

Outdated code

strong sluice
slate swan
#

client.send_message is no longer a thing

maiden fable
#

Yea

strong sluice
maiden fable
#

message.channel.send

strong sluice
#

i viewed 2017 tutorial

maiden fable
sage otter
#

That would make sense why heโ€™s using Client

slate swan
maiden fable
#

Yea

sage otter
#

The commands framework didnโ€™t exists that far back

slate swan
#

Mhm

strong sluice
#

ahn

#

new traceback

#
Traceback (most recent call last):
  File "C:\Users\dies from cringe\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\client.py", line 343, in _run_event
    await coro(*args, **kwargs)
  File "C:\Users\fardnuks\Desktop\Hehe.py", line 13, in on_message
    await message.channel.send(message.channel, "Oi")
TypeError: Messageable.send() takes from 1 to 2 positional arguments but 3 were given```
slate swan
#

remove message.channel from there

strong sluice
#
import discord
import asyncio

client = discord.Client()

@client.event
async def on_ready():
    print('hello?')

@client.event
async def on_message(message):
    if message.content.lower().startswith('>fard'):
        await message.channel.send(message.channel, "*farding")

client.run('fardingfardamogus')```
slate swan
#
message.channel.send("hola")```
#

Like this

manic wing
strong sluice
manic wing
rugged marsh
#

;-;

strong sluice
neon oyster
#

I have a list of channel ids and i want to make it a list of channel objects do i use for loop or list comprehension. py channels = [for channel in self.bot.config['tutorial']['channels'] ]this is what i got for list comp and i sont know what to do next

slate swan
#

you can just do

#

saving the channel ids in self.bot.config['tutorial']['channels'] py channels = [self.bot.get_channel(channel_id) for channel_id in self.bot.config['tutorial']['channels'] ]

slate swan
strong sluice
#

how to create a message variantion

#

example, i say >crime,
and i can put random money number?

slate swan
#

!d random.randint

unkempt canyonBOT
#

random.randint(a, b)```
Return a random integer *N* such that `a <= N <= b`. Alias for `randrange(a, b+1)`.
strong sluice
#

but

#

how to implete this on message

#

sorry for bad english

#

@slate swan

slate swan
#

!e py import random print(f'the random number is {random.randint(1,10)}')

unkempt canyonBOT
#

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

the random number is 2
slate swan
strong sluice
slate swan
#

a better way to make commands is the Bot framework though

#

you would just have to make functions instead of lots of if/elif commands in an on_message event

strong sluice
#

i dont use slash

#

its bad

strong sluice
#

import random.randint

slate swan
strong sluice
slate swan
strong sluice
strong sluice
#
import discord
import asyncio
from random import randint
import random

client = discord.Client()

@client.event
async def on_ready():
    print('Logged!')

@client.event
async def on_message(message):
    if message.content.lower().startswith('!steal'):
        await message.channel.send(f'You have {random.radiant(1,5000)}')

client.run('...')```
#

i typing !steal, and i dont recive the message

slate swan
#

is that all the code you have?

strong sluice
slate swan
#

from random import randint remove this since youre importing random

strong sluice
#

ready

#

traceback

#
Ignoring exception in on_message
Traceback (most recent call last):
  File "C:\Users\whoareyou\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\client.py", line 343, in _run_event
    await coro(*args, **kwargs)
  File "C:\Users\whereyouare\Desktop\Hehehahihou.py", line 14, in on_message
    await message.channel.send(f'You have {random.radiant(1,5000)}')
AttributeError: module 'random' has no attribute 'radiant'```
slate swan
#

spelling mistake

#

its randint , not radiant

strong sluice
#

oh, i dont viewed LOL

#

how to clean chat?

slate swan
#

something like a purge command?

#

!d discord.TextChannel.purge

unkempt canyonBOT
#

await purge(*, limit=100, check=..., before=None, after=None, around=None, oldest_first=False, bulk=True)```
This function is a [*coroutine*](https://docs.python.org/3/library/asyncio-task.html#coroutine).

Purges a list of messages that meet the criteria given by the predicate `check`. If a `check` is not provided then all messages are deleted without discrimination.

You must have the [`manage_messages`](https://discordpy.readthedocs.io/en/master/api.html#discord.Permissions.manage_messages "discord.Permissions.manage_messages") permission to delete messages even if they are your own. The [`read_message_history`](https://discordpy.readthedocs.io/en/master/api.html#discord.Permissions.read_message_history "discord.Permissions.read_message_history") permission is also needed to retrieve message history.

Examples

Deleting botโ€™s messages...
strong sluice
#

clean chat = delete all chat messages

slate swan
#

you'd keep purging all the messages in the channel for that

strong sluice
#

because i spammed commands, and its irritan to me

#

make chat ugly

#

wait

loud junco
#

how do i get input from user like
yes or no

slate swan
#

!d discord.ext.commands.Bot.wait_for

unkempt canyonBOT
#

wait_for(event, *, check=None, timeout=None)```
This function is a [*coroutine*](https://docs.python.org/3/library/asyncio-task.html#coroutine).

Waits for a WebSocket event to be dispatched.

This could be used to wait for a user to reply to a message, or to react to a message, or to edit a message in a self-contained way.

The `timeout` parameter is passed onto [`asyncio.wait_for()`](https://docs.python.org/3/library/asyncio-task.html#asyncio.wait_for "(in Python v3.9)"). By default, it does not timeout. Note that this does propagate the [`asyncio.TimeoutError`](https://docs.python.org/3/library/asyncio-exceptions.html#asyncio.TimeoutError "(in Python v3.9)") for you in case of timeout and is provided for ease of use.

In case the event returns multiple arguments, a [`tuple`](https://docs.python.org/3/library/stdtypes.html#tuple "(in Python v3.9)") containing those arguments is returned instead. Please check the [documentation](https://discordpy.readthedocs.io/en/master/api.html#discord-api-events) for a list of events and their parameters.

This function returns the **first event that meets the requirements**...
loud junco
#

how do i use it

gentle imp
#
msg = await client.wait_for('message', check=lambda message: message.author == ctx.author)
#

returns a message object, to get the content just use msg.content, will be a str

slate swan
#
async def your_command .......>

  message = await bot.wait_for('message')
  # message is the response ```
loud junco
#

thanks

gentle imp
#

you can also set your check to a bool returning function if you prefer, making sure msg.content.lower() in ["yes", "no"] to require specific response

sullen shoal
#

tuples suit better for those things

#
msg.content.lower() in ("yes", "no")```
pliant gulch
#

Any reason?

#

The only one I could think of is that it would be immutable, but I don't see now that would give much of an advantage here

shrewd inlet
#

how do i make an embed command?

torn sail
#

Wdym

shrewd inlet
torn sail
#

Well make the embed discord.Embed() then send it

#

!d discord.Embed

unkempt canyonBOT
#

class discord.Embed(*, colour=Embed.Empty, color=Embed.Empty, title=Embed.Empty, type='rich', url=Embed.Empty, description=Embed.Empty, timestamp=None)```
Represents a Discord embed.

len(x) Returns the total size of the embed. Useful for checking if itโ€™s within the 6000 character limit.

bool(b) Returns whether the embed has any data set.

New in version 2.0.

Certain properties return an `EmbedProxy`, a type that acts similar to a regular [`dict`](https://docs.python.org/3/library/stdtypes.html#dict "(in Python v3.9)") except using dotted access, e.g. `embed.author.icon_url`. If the attribute is invalid or empty, then a special sentinel value is returned, [`Embed.Empty`](https://discordpy.readthedocs.io/en/master/api.html#discord.Embed.Empty "discord.Embed.Empty").

For ease of use, all parameters that expect a [`str`](https://docs.python.org/3/library/stdtypes.html#str "(in Python v3.9)") are implicitly casted to [`str`](https://docs.python.org/3/library/stdtypes.html#str "(in Python v3.9)") for you.
shrewd inlet
#

Thanks

slate swan
loud junco
#

i learn from this hope it helps u

#

we can only make cd with bucket?

#

cuz everytime i restart the bot the cd refresh

slate swan
#

print("its about the rice its about the flour")

loud junco
#

๐Ÿคฃ

#

what is this

slate swan
upbeat otter
loud junco
#

hmm what is rich

#

what is type rich

#

๐Ÿคฃ

#

maybe there is type rich and type poor

upbeat otter
loud junco
#

no

#

just embed doing weird thing that i dun und

slate swan
upbeat otter
#

interesting

slate swan
#

Ikr

upbeat otter
loud junco
upbeat otter
loud junco
#

btw

loud junco
slate swan
#

@upbeat otter this what docs say idk what it means tho

type
The type of embed. Usually โ€œrichโ€. This can be set during initialisation. Possible strings for embed types can be found on discordโ€™sย api docs
Type
str

slate swan
loud junco
#

we can only make cd with bucket?
cuz everytime i restart the bot the cd refresh

#

:/

slate swan
upbeat otter
loud junco
#

hmm

slate swan
upbeat otter
unkempt canyonBOT
slate swan
#

Devs dont sleep

loud junco
#

:/

slate swan
torn sail
upbeat otter
upbeat otter
slate swan
#

Stop being off topic guyspithink

unkempt canyonBOT
slate swan
#

Stopyert

loud junco
#

we can only make cd with bucket?
cuz everytime i restart the bot the cd refresh

#

:/

upbeat otter
#

stop spamming

slate swan
loud junco
slate swan
#

Dont ping me

loud junco
upbeat otter
slate swan
#

Ok im gonna stop now

slate swan
upbeat otter
unkempt canyonBOT
upbeat otter
#

lol

shrewd inlet
#

guys whatโ€™s the best way to show a help embed

slate swan
loud junco
upbeat otter
#

as an embed

shrewd inlet
slate swan
shrewd inlet
#

like is that good

#

no i meant, how it looks ๐Ÿ˜ญ

slate swan
loud junco
#

add color

shrewd inlet
slate swan
shrewd inlet
loud junco
#

this is how mine looks like

shrewd inlet
slate swan
#

let user's customise the embed color :')

shrewd inlet
loud junco
#

100% copy

slate swan
#

added it recently

shrewd inlet
loud junco
#

;-;

#

pls answer me

slate swan
loud junco
#

we can only make cd with bucket?
cuz everytime i restart the bot the cd refresh

slate swan
#

!d discord.Embed

unkempt canyonBOT
#

class discord.Embed(*, colour=Embed.Empty, color=Embed.Empty, title=Embed.Empty, type='rich', url=Embed.Empty, description=Embed.Empty, timestamp=None)```
Represents a Discord embed.

len(x) Returns the total size of the embed. Useful for checking if itโ€™s within the 6000 character limit.

bool(b) Returns whether the embed has any data set.

New in version 2.0.

Certain properties return an `EmbedProxy`, a type that acts similar to a regular [`dict`](https://docs.python.org/3/library/stdtypes.html#dict "(in Python v3.9)") except using dotted access, e.g. `embed.author.icon_url`. If the attribute is invalid or empty, then a special sentinel value is returned, [`Embed.Empty`](https://discordpy.readthedocs.io/en/master/api.html#discord.Embed.Empty "discord.Embed.Empty").

For ease of use, all parameters that expect a [`str`](https://docs.python.org/3/library/stdtypes.html#str "(in Python v3.9)") are implicitly casted to [`str`](https://docs.python.org/3/library/stdtypes.html#str "(in Python v3.9)") for you.
slate swan
#

^

loud junco
#

HELP

slate swan
loud junco
#

we can only make cd with bucket?
cuz everytime i restart the bot the cd refresh

loud junco
#

so how do i make it continues
is there other ways?

slate swan
#

Dbs ig

#

Idrk

quick gust
#

just don't restart very often

loud junco
#

ok

shrewd inlet
#

is ; a good prefix or should i choose another one?

loud junco
#

then imma just ignore that

slate swan
loud junco
slate swan
quick gust
slate swan
#

All personal preference

sick birch
slate swan
#

. / > is my fav one

shrewd inlet
quick gust
#

dbs

shrewd inlet
sick birch
#

get_prefix()

slate swan
shrewd inlet
sick birch
#

it's called every time there's a message so it's worth keeping that in mind

shrewd inlet
#

i wanna make it so other people from other servers can change their prefix

sick birch
#

Other bot devs i've talked to said they use caching to hold prefixes as making a database call every single message can get stressful on the database

#

especially because their bot was pretty big

#

But you don't really have to worry about that until later

slate swan
sick birch
#

notice how it takes a message parameter

#

that's what i meant by it gets called every message

slate swan
#

you can use the message and bot params

sick birch
#

usually people hook it up to a database to store and retrieve prefixes

shrewd inlet
sick birch
#

you would need a command for that

slate swan
sick birch
#

that would edit the database entry

shrewd inlet
#

ohh

#

whatโ€™s the command ?

quick gust
#

I don't think they have a database yet? Correct me if I'm wrong @shrewd inlet

sick birch
#
def get_prefix(bot, message):
  # get prefix from database
  return prefix

@bot.command()
async def prefix(ctx, prefix):
  # set the prefix in the database
slate swan
#

Nah they don't

shrewd inlet
#

how do i get a database

quick gust
#

yeah so you're gonna have to make one

shrewd inlet
#

how ๐Ÿ‘€

sick birch
#

first pick one

#

sql, postgres, mongodb, etc

shrewd inlet
#

i-

sick birch
#

personally i would say sqlite is the easiest but it's limited in features unlike postgres

shrewd inlet
#

yk what iโ€™ll just make people stick to my prefix ๐Ÿ˜

sick birch
#

lmao

quick gust
#

go for sqlite if u have no experience with dbs

sick birch
#

^

sick birch
#

i found sqlite very easy

quick gust
#

same

shrewd inlet
sick birch
#

mongodb is more of a json sort of database if you wanna do that as well

#

though personally i find relational databases easier for modelling user data on discord

quick gust
#

mongodb sounds funny

sick birch
#

it does xd

slate swan
#

Anything with sql is pretty easy

sick birch
#

mangodb

quick gust
sick birch
visual island
slate swan
sick birch
#

yep

slate swan
#

if you don't want to make things complicated by making a database server etc just use Sqlite

#

Yeah

sick birch
#

sqlite is single file yeah

#

very limited in scalability though

slate swan
#

It's ok for a small/medium sized bot

quick gust
slate swan
#

and if you don't put too much load on the db ( just like the cache thing we talked earlier ) it can be used in big projects too

sick birch
#

transferring the data to a more flexible and scalable database later on will be an absolute headache i assume

#

right if you add an intermediate caching database like redis you should be okay for a long while

shrewd inlet
#

how can i add an image to an embed command

sick birch
#

local or url?

shrewd inlet
#

url

quick gust
#

embed.set_image then

shrewd inlet
#

or both idc

sick birch
#

.set_thumbnail()

#

or .set_image()

#

pretty sure thumbnail is the tiny one on the right

#

image is the big one on the bottom

quick gust
#

yep, thumbnail is smaller

slate swan
#

!pypi aiosqlite

unkempt canyonBOT
sick birch
#

asqlite also works, as a bonus it's by the same person who made discord.py and has better defaults

quick gust
unkempt canyonBOT
#

set_thumbnail(*, url)```
Sets the thumbnail for the embed content.

This function returns the class instance to allow for fluent-style chaining.

Changed in version 1.4: Passing [`Empty`](https://discordpy.readthedocs.io/en/master/api.html#discord.Embed.Empty "discord.Embed.Empty") removes the thumbnail.
slate swan
sick birch
#

for sure yeah

shrewd inlet
#

ok so for the image can i set the name of the random images i got

slate swan
shrewd inlet
#

like i have a series of random images

slate swan
shrewd inlet
#

so how do i do that ?

sick birch
#

oh cool, didn't know that existed

sick birch
#

embeds only show the image, not the name of the image

slate swan
#

Hi

shrewd inlet
slate swan
sick birch
#

so you want to send a random iamge

slate swan
#

Can someone help me build a bot

sick birch
#

No

#

We can help with questions though

quick gust
sick birch
shrewd inlet
sick birch
#

oh easy

#

random.choice()

#

feed that into .set_image()

slate swan
shrewd inlet
#

did i do it right?

sick birch
#

you got it

slate swan
#

Yes

shrewd inlet
#

the command didnโ€™t work

quick gust
#

don't forget to import random

shrewd inlet
#

on discord

shrewd inlet
sick birch
#

what's the error

quick gust
sick birch
#

doesn't set_image take a url= kwarg or am i dumb

shrewd inlet
#
Traceback (most recent call last):
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/ext/commands/bot.py", line 939, in invoke
    await ctx.command.invoke(ctx)
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/ext/commands/core.py", line 863, in invoke
    await injected(*ctx.args, **ctx.kwargs)
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/ext/commands/core.py", line 94, in wrapped
    raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: TypeError: set_image() takes 1 positional argument but 2 were given
172.18.0.1 - - [23/Dec/2021 06:21:42] "HEAD / HTTP/1.1" 200 -
sick birch
#

thought so

sick birch
#

pass in a url= kwarg into .set_image() and you should be good to go

#

also import random

sick birch
#

.set_image(url="my_url")

shrewd inlet
sick birch
#

right

shrewd inlet
#

so how am i gonna do that

sick birch
#

use random.choice

quick gust
#
url=random.choice(gracie_images)``` 

would look something like this
sick birch
#

yep and put that in the .set_image

shrewd inlet
#

hm weird

#

it didnโ€™t work

sick birch
#

error?

shrewd inlet
#

nope

#
@bot.command()
async def pic(ctx):
 embed = discord.Embed(description="here's your random image!",color=0x2f3136)
 embed.set_image(url=random.choice(gracie_images))
sick birch
boreal ravine
quick gust
#

that's ur whole command?

shrewd inlet
sick birch
#

ah

quick gust
#

if so, u didn't send the embed

sick birch
#

makes sense

#

you need to actually send a message containing the embed

shrewd inlet
#

o

slate swan