#discord-bots

1 messages · Page 606 of 1

kind wind
#

I have it on the normal code

slate swan
#

Ight

#

so it's not roleid in the code

#

nice

kind wind
#

no

slate swan
#

then.... do you have intents?

kind wind
#

why the codes doesn't work tho

slate nymph
#

For people who are demotivating sherlock did not learn dpy in a day did they?

slate swan
#

Did you actually add the role id

kind wind
maiden fable
#

I started with dpy on my first day of Python

kind wind
slate swan
slate swan
unkempt canyonBOT
#

Using intents in discord.py

Intents are a feature of Discord that tells the gateway exactly which events to send your bot. By default, discord.py has all intents enabled, except for the Members and Presences intents, which are needed for events such as on_member and to get members' statuses.

To enable one of these intents, you need to first go to the Discord developer portal, then to the bot page of your bot's application. Scroll down to the Privileged Gateway Intents section, then enable the intents that you need.

Next, in your bot you need to set the intents you want to connect with in the bot's constructor using the intents keyword argument, like this:

from discord import Intents
from discord.ext import commands

intents = Intents.default()
intents.members = True

bot = commands.Bot(command_prefix="!", intents=intents)

For more info about using intents, see the discord.py docs on intents, and for general information about them, see the Discord developer documentation on intents.

slate swan
slate swan
slate swan
#

intents are different stuff

slate nymph
slate swan
kind wind
#

no i dont

slate swan
#

stop correcting me newbie

#

Not indents

maiden fable
kind wind
#

i use replit to code it

sullen shoal
slate swan
slate swan
maiden fable
slate swan
slate swan
slate nymph
#

You should not use Repl.it to host your bot.

While this may seem like a nice and free service, it has a lot more caveats than you might think, such as:

  • The machines are super underpowered.

    • This means your bot will lag a lot as it gets bigger.
  • You need to run a webserver alongside your bot to prevent it from being shut off.

    • This isn't a trivial task, and eats more of the machines power.
  • Repl.it uses an ephemeral file system.

    • This means any file you saved via your bot will be overwritten when you next launch.
  • They use a shared IP for everything running on the service.
    This one is important - if someone is running a user bot on their service and gets banned, everyone on that IP will be banned. Including you.

Please avoid using repl.it to host your bot. It's not worth the trouble.

https://intuitiveexplanations.com/tech/replit/

slate swan
#

so we both copy tags now

#

mmhmm

slate nymph
#

xd

slate swan
# sullen shoal all

People already experienced with Ruby, LUA, etc probably can jump right into it without finding it that hard

slate nymph
#

yes

kind wind
slate swan
#

the picture I just sent has everything

slate nymph
#

get aws 1 year free trial

sullen shoal
slate swan
#

Yeah

kind wind
#

Error

slate swan
#

python's discord lib is a lot more experienced than that

slate swan
# slate swan not in python

Ruby and LUA are very similar to Python. They'll just need to brush up on some basics which they can do in an hour or two, and then jump right into d.py.

sullen shoal
#

its all objects and classes and nothing

slate swan
#

Source: I know both py and rb

slate nymph
kind wind
#

error.

sullen shoal
#

however using the decorators might take some time

slate nymph
#

some pro ruby programmer could make a discord api wrapper

slate swan
slate swan
#

I sent u the picture

slate swan
kind wind
slate swan
#

slap them

slate nymph
#

hats off to danny

kind wind
#

I slapped em

sullen shoal
#

for the structure this good

kind wind
#

now no error but not sure if works

slate nymph
#

js is currently leading at discord bots

sullen shoal
kind wind
#

I tried making 2 @bot.command in 1 file but I came upon an error

slate swan
kind wind
#

actually I tried to make a help command but it said that, that already existed

#

I am 100% sure I havent made any help commands yet

kind wind
#

why

sullen shoal
#

!d discord.ext.commands.HelpCommand

unkempt canyonBOT
#

class discord.ext.commands.HelpCommand(*args, **kwargs)```
The base implementation for help command formatting.

Note

Internally instances of this class are deep copied every time the command itself is invoked to prevent a race condition mentioned in [GH-2123](https://github.com/Rapptz/discord.py/issues/2123).

This means that relying on the state of this class to be the same between command invocations would not work as expected.
slate swan
#

bot = commands.Bot(help_command=None)

#

would solve it

#

or doing it the right way just like Myxi's tag says

kind wind
sullen shoal
#

you dont need to suffer from all that

slate swan
#

Ok none would be able to help can u send a tutorial for the bot basics a link or something

maiden fable
#

🤣 this is what happens when u have the guilds scope in your OAuth URL

slate nymph
#

lol

sullen shoal
#

just use the class

slate swan
#

in your client/bot definition

slate swan
#

you either put the kwarg there or make a help command the right way

kind wind
maiden fable
slate swan
maiden fable
sullen shoal
#

make the text green tho

maiden fable
slate swan
#

so hecker

#

Bro the 😊 face in the middle of the code😭

sullen shoal
#

it will look hecker

slate swan
#

hello sherlock

#

Can Someone send me a tutorial?

maiden fable
#

mf also sent my email id 🤣

sullen shoal
maiden fable
slate swan
slate swan
slate nymph
slate swan
#

This course will give you a full introduction into all of the core concepts in python. Follow along with the videos and you'll be a python programmer in no time!
Want more from Mike? He's starting a coding RPG/Bootcamp - https://simulator.dev/

⭐️ Contents ⭐
⌨️ (0:00) Introduction
⌨️ (1:45) Installing Python & PyCharm
⌨️ (6:40) Setup & Hello Wor...

▶ Play video
#

Hey, why does get(bot.guilds, id=741774567907******) return None?

#

here

sullen shoal
slate nymph
#

oh-

sullen shoal
#

no please not youtube

slate swan
slate nymph
#

tutorial for python

maiden fable
slate nymph
#

xd

slate swan
maiden fable
slate swan
#

this isn't dpy

maiden fable
slate swan
#

😭

slate swan
sullen shoal
slate swan
#

beautiful tutorial

#

!resources

unkempt canyonBOT
#
Resources

The Resources page on our website contains a list of hand-selected learning resources that we regularly recommend to both beginners and experts.

slate swan
#

can only recommend 👍

sullen shoal
#

also that guy suck

#

replit discord bot tutorial

maiden fable
sullen shoal
#

wha

maiden fable
#

Yea...

slate swan
sullen shoal
#

💀

slate swan
maiden fable
#

Why you even say that 😭

kind wind
#

how can I send embeds

#

pops up !d command

sullen shoal
#

😔

maiden fable
#

!d discord.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, mention_author=None, view=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://discordpy.readthedocs.io/en/master/api.html#discord.File "discord.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.9)") of [`File`](https://discordpy.readthedocs.io/en/master/api.html#discord.File "discord.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://discordpy.readthedocs.io/en/master/api.html#discord.Embed "discord.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.9)") of [`Embed`](https://discordpy.readthedocs.io/en/master/api.html#discord.Embed "discord.Embed") objects. **Specifying both parameters will lead to an exception**.
maiden fable
#

embed kwarg

#

@sullen shoal answer meeeeeeeee

slate swan
#

!d help

sullen shoal
maiden fable
#

But that is a fact. Be careful with your words

slate swan
#

💀

maiden fable
#

Idek him

slate swan
maiden fable
#

@sullen shoal sorry for that ;-;

slate swan
#

Lmao

#

Hey, why does

get(bot.guilds, id=741774567907******)

return None?

maiden fable
unkempt canyonBOT
sick birch
#

either that or invalid ID

slate swan
#

nah I didnt use *** actually

#

I am so ded

sick birch
#

instead you could just do bot.get_guild()

slate swan
sick birch
#

afaik get probably has O(n^2) and bot.get_guild() is just O(1)

sullen shoal
slate swan
#

still returns None

slate swan
sick birch
#

your intents are probably not set right then

slate swan
#

hm

slate swan
kind wind
#

if i code it through Visual Studio Code then the bot will be always online??

slate swan
#

oh thats possible

sick birch
slate swan
#

Im zsed to my old bot having all intents

sick birch
#

visual studio code is at a very basic level a text editor

slate swan
#

Its not like replit

kind wind
sick birch
#

if you want your bot to always be online either buy a raspberry pi, or a good VPS both of which you cost you money

slate swan
sick birch
#

raspberry pi has a heavy initial downpay, but it's worth it after you pay off the initial investment. VPS will be a per-month basis often. AWS afaik charges you on cents/hour of uptime

kind wind
#

If I put my computer into sleep mode will the script still running?

sick birch
#

depends on the ACPI power state

slate swan
#

HAHA yes I forgot discord.Intents.all() thanks a lot

sick birch
#

S4/S5 probably won't run

#

S3 is doubtful

slate swan
#

wow...

#

it still returns None

sick birch
#

assuming your intents are correct, then the ID is invalid

cinder horizon
#

Code:-

async with ctx.typing():
      subreddit = reddit.subreddit(sub)
      all_subs=[]
      top = subreddit.top(limit=50)
      for submission in top:
        all_subs.append(submission) 
        random_sub = random.choice(all_subs)
        name = random_sub.title
        url = random_sub.url
        author = random_sub.author
        author_link = f"https://www.reddit.com/user/{author}/"
        postid = random_sub.id

        embed = discord.Embed(title = name, url = url, color=0xf80707, timestamp=ctx.message.created_at)
        embed.set_image(url=url)
        embed.add_field(name="Post author:", value=f"/u/[{author}]({author_link})")
        embed.add_field(name="Post Id:", value=postid)
        embed.set_footer(text=f"Requested by {ctx.author.name}", icon_url = ctx.author.avatar_url)

Error:-

Command raised an exception: AttributeError: 'str' object has no attribute 'subreddit'
```....wut do i do?
kind wind
sick birch
#

really depends on the acpi power state like i said

#

different computers go into different states on sleep, try it and see if it works

slate swan
#
File "/home/container/main.py", line 44, in <module>
    print(f"[L] Support Guild: {supportguild.name} -/- {supportguild.id}")
AttributeError: 'NoneType' object has no attribute 'name'
#

the ID is correct

sick birch
#

i.e you have multiple reddit variables

#

maybe it's in your command argument that takes in a subreddit name?

cinder horizon
#

i gave tht sub

sick birch
#

odd, can you post full traceback?

cinder horizon
slate swan
#

wait if I copy the id on pc its...

#

741774567907000391

#

And on mobile

#

741774567907000391

#

It is the correct ID 02shrug

#

Wait Ill change to bot.get_guild again

#

I just dont kinda like those API calls

sullen shoal
#

test

#

get_guild gets it from cache, fetch_guild will cost an api call afaik

slate swan
#

OH it was fetch_guild that did the API call?

#

Uh

slate swan
#

Well then I switched something lmao

#

I remember something like that did an API call so I thought it was get_guild lmao

#

get() takes from the bots cache if none then it wont do anything

#

Anybody know why sometimes stuff isnt in the bots cache like a channel id?

#

Maybe because the cache is at the limit?

#

Prob

#

I mean you can change the cache limit in Client()

#

Default should be 1000

#

iirc

sage otter
slate swan
slate swan
sage otter
#

A user won’t be in the bots cache if the member isn’t in any of the bots guilds.

slate swan
#

Well anyways get_guild() still returns None

sage otter
#

Guess your bots not in that guild

slate swan
#

So you have to fetch it

sage otter
#

Well actually hold on.

slate swan
#

my code is

supportguild = bot.get_guild(741774567907000391)
sage otter
#

You might be right here. Just thought about the max_messages kwarg in the Bot init.

kind wind
#

if I want to code it in VSC i need to make the poetry.lock and the pyproject.toml files in my folder?

slate swan
sage otter
#

No poetry is just an optional package manager

slate swan
#

makes sense

sage otter
#

You can just use pip

sage otter
#

You don’t await get methods

slate swan
slate swan
sage otter
#

No

#

All the get methods and functions are sync

slate swan
#

Like its ... a global var

#

I swear it didbrainmon

#

no

#

fetch does

#

get doesn't

#

;-;

#

get() definetly doesnt thats what I know

#

Why does my bot have await before get() and still work😭

#

Depends if the function is sync or async

#

But

kind wind
#

Why I get "Warnings" (yellow lines) when I want to import discord

import discord #<-- yellow line
from discord.exe #<-- yellow line
slate swan
#

get isnt async

quick gust
#

do you have discord installed on your pc?

slate swan
#

pip install discord

slate swan
#

replit user there

kind wind
#

warnings

slate swan
quick gust
#

do pip install discord

lament mesa
kind wind
quick gust
#

yeah

slate swan
slate swan
slate swan
#

oh

fallen mica
#

How can I delete a message with only a message ID?

kind wind
#

pip is not recognized as an internal or external command.

slate swan
slate swan
quick gust
slate nymph
slate nymph
#

if not

slate swan
#

no get function is a coro

kind wind
#

I just downloaded python 3.10.0

slate swan
slate swan
slate swan
slate nymph
#

py -m pip install discord.py

slate nymph
#

dont install discord

kind wind
slate swan
slate nymph
slate swan
#

And it actually gets the channel with no error

#

👀 now im interested in seeing that code , could you?

slate swan
#

get() is a sync function, even the docs say that 😆

slate swan
#

Anyways my problem is still not solved ):

kind wind
#

I am using an old pip

#

version 21.2.3

slate nymph
kind wind
#

..

slate swan
kind wind
slate nymph
kind wind
#

not recognized

slate nymph
trim meadow
#

Help, there's no spaces on my embed message, and i wanna add 1 space between each field i add. How do i do that?

sick birch
#

You can't. Discord embeds are quite limiting

#

unless you mean putting them on seperate lines

#

In which case, you can pass in the inline=False argument into the discord.Embed object

slate swan
sage otter
#

because send is a coro

#

:oogh:

slate swan
kind wind
#

it uninstalled it but didnt say anything that it installed it

#

now it did

slate swan
#

if you would just get the channel , that would be an error xd

#

😭

night jay
slate swan
#

Makes more sense😭

slate nymph
#

but it requires git

slate swan
kind wind
#

now will it work

slate nymph
#

beta version has select menus and buttons

slate nymph
#

sure

trim meadow
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.
kind wind
#

can i close the cmd?

flint isle
#

Hmmm

slate nymph
#

which editor are u using?

kind wind
#

VSC

slate nymph
#

oh- alr

sick birch
kind wind
#

?

slate nymph
#

close it

#

vscode has a terminal

#

you didnt need to open cmd

kind wind
#

yeah i still have the warnings

sick birch
#

hmm?

#

uh someone sent a scam link i think lol

kind wind
#

yeah

slate nymph
kind wind
jagged root
#
async def on_message(message):
    if "ticket." in message.channel.topic:
        return
    
    if message.author.bot:
        return
  
    if "ticket" not in message.channel.name:
        return
    
    
    else:
        
        if "" in message.content.lower(
        ):
            
            await message.channel.send(
                f"{message.author.mention}, an **ARK Admin** will help you os")
            
            await message.channel.edit(topic="ticket.")```

Why this doesnt work
slate nymph
#

what did you write?

slate swan
#

pip install python

jagged root
kind wind
slate nymph
#

no

slate swan
#

LMAO

kind wind
jagged root
slate nymph
slate swan
#

VDP , restart vsc after pip installing the library

kind wind
#

when i went to my folder to open it a tab opened saying "Updating Visual Studio Code"

slate nymph
#

ok

jagged root
#

Can someone help me please

sick birch
jagged root
#
async def on_message(message):
    if "ticket." in message.channel.topic:
        return
    
    if message.author.bot:
        return
  
    if "ticket" not in message.channel.name:
        return
    
    
    else:
        
        if "" in message.content.lower(
        ):
            
            await message.channel.send(
                f"{message.author.mention}, an **ARK Admin** will help you os")
            
            await message.channel.edit(topic="ticket.")```

Why this doesnt work
sick birch
#

Define "it doesn't work"

flint isle
#

How can I have the bot check for a reaction

jagged root
#

it does when i remove: if "ticket." in message.channel.topic: return but i want it there

sick birch
#

What doesn't work? What do you want it to do? What actually happens? What errors occur? All these are important in diagnosing issues.

slate swan
slate nymph
unkempt canyonBOT
#
Not in a million years.

No documentation found for the requested symbol.

slate nymph
#

!d discord.ext.commands.Bot.wait_for

slate swan
#

if ticket is in the channel topic, stop the code
if ticket is not in the channel's name, return

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**...
slate swan
#

so it is supposed to be a ticket channel or not

#

try making your code make sense

sick birch
#

if "ticket." is in the channel name, no commands will work there. Is that intended behaviour?

jagged root
sick birch
#

topic is name is it not?

slate swan
#

no

sick birch
#

oh okay, my bad

slate swan
#

discord-bots is the channel name

#

For questions and discussions relating to Discord bot development with discord.py and other relevant Python libraries.

jagged root
#

what could be the issue

slate swan
#

is the channel topic

sick birch
#

I see, gotcha

sick birch
jagged root
#

k

slate swan
#

the problem is the logic

flint isle
jagged root
kind wind
#

okay it opened now I can code here and it will work correctly?

sick birch
#

nvm it's a listen, commands will work

kind wind
#

wait do I have to make an .env file?

#

for the token

slate swan
#

and wtf is if "" in message.content.lower( ):

slate nymph
slate swan
slate nymph
#

no need

sick birch
jagged root
slate swan
#

why the if statement then

#

wtf

sick birch
jagged root
#

yes

slate swan
#

that's a really big skill issue bro

sick birch
#

there's no point

slate nymph
#

you need that in replit

jagged root
#

oof ik

flint isle
jagged root
#

i started days ago

kind wind
#

So I just do bot.run(os('TOKEN')) (I will put my bot's token here)

jagged root
#

so im still learning

sick birch
jagged root
#

yea, ig

sick birch
#

You should not attempt to work with the discord.py library as a beginner, it is not meant for beginners and is an advanced library

slate swan
#

no cuz I remember u being here before yert

flint isle
jagged root
#

and came again

slate swan
#

I see okay. Give me a sec

jagged root
#

and i also remember u

kind wind
#

my bot isnt getting online

sick birch
#

It takes a hot minute

slate swan
slate swan
kind wind
sick birch
#

then give it a minute or 2

slate swan
jagged root
#

@sick birch Did you found the issue already?

slate swan
kind wind
#

no

sick birch
jagged root
kind wind
#

i am using Visual Studio CODE

slate swan
sick birch
#

@kind wind your commands should still work if it doesn't show up on the online list

slate swan
#

Yeah^

kind wind
sick birch
#

Given you're connected to the gateway servers of course

kind wind
#

I got an "error" popup

slate swan
sick birch
kind wind
slate swan
#

Ofc your bot won't run if it gets a error

sick birch
#

Why would it need .NET SDK lol

#

do you have any C code?

slate swan
#

Fr

kind wind
#

It is my 1st time

sick birch
#

Yeah you probably shouldn't

kind wind
#

I am just telling you what I see in hope I will get it running

sick birch
#

Like I said before the discord.py library is quite a complex library and is therefore not suited for beginners

kind wind
#

bot still not up

sick birch
#

You should first have a firm understanding of intermediate Python before progressing with discord bots

slate swan
#

!code

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.

sick birch
#

That's not really possible without external parsing, you can however ping the role or give the ID

slate swan
#

Why is your bot var name client?

#

Bad practice

sick birch
slate swan
sick birch
#

I assume they all follow those bad tutorials that use client for the commands.Bot

sick birch
#

that or lucas or like every other garbage d.py tutorial out there

slate swan
#

Yeah

sick birch
#

good naming practices = very important

kind wind
#

Still not online

slate swan
sick birch
slate swan
sick birch
#

Ah that

flint isle
kind wind
slate swan
sick birch
#

I assume the C# extension was the one causing the .NET error

slate swan
#

Yeah

#

I'm sure someone else can help you. I'm quiete busy atm

flint isle
#

Does anyone know how to check for a reaction on a message

kind wind
sick birch
#

good idea

flint isle
sick birch
#

message.reactions

#

returns a list of discord.Reaction objects

quick gust
sick birch
#

it's either discord.Reaction or discord.Reactions i'm not fully sure

peak oyster
#

I wrote a bot that returns a table of information. Often times, the table is more than 2k characters. Can anyone point me a direction of how to split this message into multiple responses please?

I tried the following, but I keep getting the message too long error:

https://paste.pythondiscord.com/ojatodutar.py

kind wind
#

I think I found why my bot doesnt go up

#

I just found that I have been getting a traceback the entire time

#

its about the run

sick birch
#

yeah

kind wind
#

TypeError: 'module' object is not callable

#

I am not sure how this works

#

but how do i fix it

slate swan
#

What colorcode is this? I want to use a HTML code is that possible aswell?

slate swan
#

thank you

peak oyster
manic wing
#

ffs

lyric moat
#

how do i make it show the user badge on userinfo command?

flint isle
#

Does anyone have an example on how to check for a message that has a reaction

flint isle
sick birch
#

message.reactions returns a list of discord.Reaction objects, by the way

flint isle
#

Does that list messages with the reaction in the channel or what

whole stream
#

Heyy, im trying to make a music bot and im running into this issue

#

AttributeError: 'NoneType' object has no attribute 'is_playing'

sick birch
quick gust
maiden fable
#

YOOOO GUESS WHAT

sick birch
#

Finding all messages in a channel with a reaction would be quite time consuming

#

Depending on the server size of course

flint isle
#

So I have to list a message ID?

maiden fable
quick gust
#

Yes

maiden fable
#

YAYAYAYAYAYAYAYAYAY

sick birch
#

But I suppose if you wanted to loop through each message, and check if message.reactions is a falsy value you can

quick gust
flint isle
sick birch
maiden fable
sick birch
#

though you can obtain said object from the ID

quick gust
maiden fable
#

I have also submitted for messages intent, let's see what happens

flint isle
sick birch
#

fetch_message(ID) would also work if you wish to make an API request

maiden fable
unkempt canyonBOT
#

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

Retrieves a single [`Message`](https://discordpy.readthedocs.io/en/master/api.html#discord.Message "discord.Message") from the destination.
maiden fable
sick birch
#

I know, i'm only provide psuedocode

maiden fable
#

Ah, my bad

sick birch
#

wouldn't want to spoonfeed would we haha

maiden fable
#

True hahaha

flint isle
#

So

message = await fetch_message(id=Mid)
If message.reactions:
  #message has reactions
Else
  #message as no reactions```
#

Would that work?

sick birch
#

no

#

fetch_message is a method of a discord.TextChannel object

#

and id doesn't have to be a keyword-argument

fallen mica
#
    @commands.command(aliases=["delete", "Delete","DELETE"])
    async def _delete(self,ctx,message_id=None,channel=None,reason=None):
        msg = await ctx.get_message(channel, message_id)
        await ctx.delete_message(msg)

        reason_channel = await ctx.get_channel(902223345217581086)

        deleted_message_embed = discord.Embed(
            title = "**Advertisement Deleted**",
            description = f"**Message ID:** {message_id} \n"
                           "**Reason:** {reason}"
            ,color = discord.Color.purple()
        )
        await ctx.send(reason_channel,embed=deleted_message_embed)

Can someone help me with this?

sick birch
#

What's the problem?

fallen mica
#

I believe most of the attributes are just wrongly used

gloomy viper
#

Who can drop the code for cleaning and get ban?

fallen mica
#

but I'm unsure which ones are the correct ones for it

gloomy viper
#

Please drop the ban code

#

And the code to clean up.

maiden fable
fallen mica
gloomy viper
#

thanks

maiden fable
regal shard
#

Ok so I want a bot that checks after 30 mins on a website that does it have the true statement on it, if it does then I want it to send a msg in a channel saying: "Hey, {user} is now online.". is it possible? https://paste.pythondiscord.com/iqalujasoq.md <-- there's my current command code

I'd need the time module and the if else statements right?

maiden fable
#

Hmm, lemme see

#

Okay don't use requests

#

It's blocking

#

!blocking read this embed for more information (;

unkempt canyonBOT
#

Why do we need asynchronous programming?
Imagine that you're coding a Discord bot and every time somebody uses a command, you need to get some information from a database. But there's a catch: the database servers are acting up today and take a whole 10 seconds to respond. If you do not use asynchronous methods, your whole bot will stop running until it gets a response from the database. How do you fix this? Asynchronous programming.

What is asynchronous programming?
An asynchronous program utilises the async and await keywords. An asynchronous program pauses what it's doing and does something else whilst it waits for some third-party service to complete whatever it's supposed to do. Any code within an async context manager or function marked with the await keyword indicates to Python, that whilst this operation is being completed, it can do something else. For example:

import discord

# Bunch of bot code

async def ping(ctx):
    await ctx.send("Pong!")

What does the term "blocking" mean?
A blocking operation is wherever you do something without awaiting it. This tells Python that this step must be completed before it can do anything else. Common examples of blocking operations, as simple as they may seem, include: outputting text, adding two numbers and appending an item onto a list. Most common Python libraries have an asynchronous version available to use in asynchronous contexts.

async libraries
The standard async library - asyncio
Asynchronous web requests - aiohttp
Talking to PostgreSQL asynchronously - asyncpg
MongoDB interactions asynchronously - motor
Check out this list for even more!

regal shard
#

ah yes

#

I understand

maiden fable
#

U should use aiohttp

#

!d aiohttp.ClientSession

unkempt canyonBOT
#
class aiohttp.ClientSession(base_url=None, *, connector=None, cookies=None, headers=None, skip_auto_headers=None, auth=None, json_serialize=json.dumps, ...)```
The class for creating client sessions and making requests.
regal shard
#

hmm ok

maiden fable
#

Also

#

!d asyncio.sleep instead of time.sleep

unkempt canyonBOT
#

coroutine asyncio.sleep(delay, result=None)```
Block for *delay* seconds.

If *result* is provided, it is returned to the caller when the coroutine completes.

`sleep()` always suspends the current task, allowing other tasks to run.

Setting the delay to 0 provides an optimized path to allow other tasks to run. This can be used by long-running functions to avoid blocking the event loop for the full duration of the function call.

Deprecated since version 3.8, removed in version 3.10: The `loop` parameter. This function has been implicitly getting the current running loop since 3.7. See [What’s New in 3.10’s Removed section](https://docs.python.org/3/whatsnew/3.10.html#whatsnew310-removed) for more information.

Example of coroutine displaying the current date every second for 5 seconds:
regal shard
#

Okok

maiden fable
#

time.sleep is blocking, not asyncio.sleep

regal shard
#

1 min

maiden fable
#

Ping me if u need any other help (:

regal shard
#

Alright

twin moon
maiden fable
#

!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)`.
maiden fable
#

Oh, hmm

maiden fable
twin moon
maiden fable
#

Try printing it

twin moon
#

found my prob

maiden fable
#

Yay

twin moon
#

if only works once :((((((

#

im stupid

maiden fable
#

Aw

#

U gotta do a while True loop or something

#

Or multiple wait_for's inside your loop

twin moon
#

nah

#

just health while

slate swan
#

this might be dumb of me but as i try to create a help command it tells me there is already help command and its not a command sooooo

maiden fable
quick gust
#

try doing client.remove_command("help")

maiden fable
regal shard
#

@maiden fable hey I'm back

maiden fable
#

!d discord.ext.commands.DefaultHelpCommand is what it uses by default

unkempt canyonBOT
#

class discord.ext.commands.DefaultHelpCommand(*args, **kwargs)```
The implementation of the default help command.

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

It extends it with the following attributes.
regal shard
#

now would you be willing to help?

slate swan
maiden fable
regal shard
#

:D

maiden fable
regal shard
#

Ok so I use asyncio and what other module?

maiden fable
maiden fable
#

But

#

Why not just use tasks?

#

!d discord.ext.tasks.Loop

unkempt canyonBOT
#

class discord.ext.tasks.Loop```
A background task helper that abstracts the loop and reconnection logic for you.

The main interface to create this is through [`loop()`](https://discordpy.readthedocs.io/en/master/ext/tasks/index.html#discord.ext.tasks.loop "discord.ext.tasks.loop").
regal shard
maiden fable
#

Yea

regal shard
#

idk that it even existed

maiden fable
#

It's sort of a while True loop with an asyncio.sleep at last

regal shard
#

:/

maiden fable
regal shard
#

okok

maiden fable
slate swan
regal shard
#

I need this beacuse I wanna stalk my friend, he unfriended me in game

maiden fable
maiden fable
sick birch
#

it is cleaner, it also has more advantages

#

such as overriding specific methods

maiden fable
#

Yups

#

Suppose u add a bot command and after that call that method, then that remove command would get removed

regal shard
#

can you send me a link to the aiohttp docs?

#

!aiohttp

maiden fable
unkempt canyonBOT
#

Common data structures used by aiohttp internally...

regal shard
#

Thanks

maiden fable
flint isle
maiden fable
#

He told u haha

dusk dust
#

how can i get banlist of a server

sick birch
maiden fable
#

U need a TextChannel instance

sick birch
twin moon
# maiden fable Cool
while authorhealth > 0 and memberhealth > 0:
          who = randint(1,2)
          if who == 1:

I changed it like this and it still doesent work

maiden fable
unkempt canyonBOT
#

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

Retrieves all the users that are banned from the guild as a [`list`](https://docs.python.org/3/library/stdtypes.html#list "(in Python v3.9)") of [`BanEntry`](https://discordpy.readthedocs.io/en/master/api.html#discord.BanEntry "discord.BanEntry").

You must have the [`ban_members`](https://discordpy.readthedocs.io/en/master/api.html#discord.Permissions.ban_members "discord.Permissions.ban_members") permission to get this information.
regal shard
regal shard
#

I'll just scroll up

regal shard
maiden fable
#

Well, I don't really know about your game, but why not just use buttons and see if the user clicked the button. If he does, then break the loop

#

!d discord.ui.Button

unkempt canyonBOT
#

class discord.ui.Button(*, style=<ButtonStyle.secondary: 2>, label=None, disabled=False, custom_id=None, url=None, emoji=None, row=None)```
Represents a UI button.

New in version 2.0.
dusk dust
regal shard
#

@maiden fable Let's say, I don't want to switch over to aiohttp, I just wanna stalk 1 person am I good to use requests?

maiden fable
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.

sick birch
dusk dust
#

ok

sick birch
#

sorry i said it was i forgot haha

maiden fable
dusk dust
#

np, ty 🙂

regal shard
#

yea it's a private bot

sick birch
#

don't use it for any actual projects

maiden fable
#

Yea

sick birch
#

requests is blocking in an asynchronous environment

regal shard
#

What about the time module do I have to switch over to asyncio?

maiden fable
maiden fable
#

But

#

Why do that, when u can use tasks?

regal shard
#

ok

maiden fable
regal shard
#

I'll google an example code of tasks

sick birch
#

i think if it's just a quick and dirty tasks there's nothing wrong with going the simpler method

maiden fable
unkempt canyonBOT
#

class discord.ext.tasks.Loop```
A background task helper that abstracts the loop and reconnection logic for you.

The main interface to create this is through [`loop()`](https://discordpy.readthedocs.io/en/master/ext/tasks/index.html#discord.ext.tasks.loop "discord.ext.tasks.loop").
maiden fable
#

The example is there in the docs

twin moon
regal shard
#

oh well... time to read all the docs

maiden fable
# twin moon no

Printing the variables which u think are causing problems and adding print statements to random lines so that u can see which line is being executed and which isn't

slate swan
sick birch
#

vscode has a really nice debugger as well

#

bit more sophisticated but it does its job well

slate swan
regal shard
#

also sorry for the unrealated question, but is an iPhone 6 good in 2021?

maiden fable
sick birch
#

subjective

maiden fable
regal shard
regal shard
#

:/

regal shard
sick birch
#

!ot tho

unkempt canyonBOT
slate swan
maiden fable
slate swan
#

Hey everyone

regal shard
#

just asking

slate swan
regal shard
#

:D

sick birch
slate swan
maiden fable
regal shard
#

coroutine is this read as co routine?

flint isle
#

Error: confuses me

Traceback (most recent call last):
  File "/data/user/0/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py", line 31, in <module>
    start(fakepyfile,mainpyfile)
  File "/data/user/0/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py", line 30, in start
    exec(open(mainpyfile).read(),  __main__.__dict__)
  File "<string>", line 51
    async def msg(ctx, mid):
          ^
SyntaxError: invalid syntax

[Program finished]```
sick birch
regal shard
slate swan
maiden fable
# twin moon random lines ?

Like print statements with random things (preferably numbers), every 2 lines or something so thT u know which are being executed

slate swan
maiden fable
regal shard
#

tho discord lags

sick birch
slate swan
sick birch
#

i don't really use it though (old habits die hard ) haha

maiden fable
sick birch
#

oh weird, it's the 3rd button from the top on the left bar

#

you can pull it up anytime

twin moon
maiden fable
regal shard
#

@maiden fable I a m c o n f u s e d

maiden fable
sick birch
regal shard
#

I d o n ' t u n d e r s t a n d t h e d o c s .

regal shard
#

!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.

maiden fable
maiden fable
slate swan
#

how do i get a category ID by its name

maiden fable
#

!d discord.utils.get

unkempt canyonBOT
#

discord.utils.get(iterable, **attrs)```
A helper that returns the first element in the iterable that meets all the traits passed in `attrs`. This is an alternative for [`find()`](https://discordpy.readthedocs.io/en/master/api.html#discord.utils.find "discord.utils.find").

When multiple attributes are specified, they are checked using logical AND, not logical OR. Meaning they have to meet every attribute passed in and not one of them.

To have a nested attribute search (i.e. search by `x.y`) then pass in `x__y` as the keyword argument.

If nothing is found that matches the attributes passed, then `None` is returned.

Examples

Basic usage...
slate swan
#
async def my_background_task():
    await client.wait_until_ready()
    channel = client.get_channel(id=909981604129157181)
    while not client.is_closed():
        await channel.send('\n'.join(C))
#print(str(channel.last_message.content))
        await asyncio.sleep(200)```

I want to send message every x seconds but I don't want the bot to spam the same message. (C) can varry. How do I make the bot read it's previous message while in a loop so I could send a new message only if its a different one..
maiden fable
#

It's a type of channel

twin moon
regal shard
#

:troll:

slate swan
maiden fable
# twin moon you said I should do that

Yea, u should print the variables and add print statements (debug prints) so thT u can see which lines are being executed and what are the variables values

regal shard
slate swan
maiden fable
regal shard
#

I remember the time I had nitro

maiden fable
sick birch
sick birch
#

It helps you know which parts of your code are running and which aren’t

maiden fable
regal shard
stuck prism
#

Ik this is the wrong server but anyone here who can help me with hosting a discrod bot written in kotlin and java i have the source code

slate swan
maiden fable
maiden fable
#

ctx is from your command

regal shard
#

if u want I can dm link

#

it's free

slate swan
#

there're no commands its a loop

stuck prism
sick birch
#

AWS is arguable the best hosting service in the world

regal shard
#

:D

maiden fable
#

U can just do message = await channel.send() then haha

#

sometimes this channel is overloaded, but sometimes dead asf

regal shard
slate swan
maiden fable
maiden fable
twin moon
slate swan
maiden fable
#

Gonna be 12:30 then

regal shard
#

I see

maiden fable
#

Sorry OTTER, I don't really know what could be wrong, I am on a mobile, so can't really help with big codes rn, sorry

cerulean bridge
#

best host to use with discord bot

#

?

maiden fable
#

AWS

regal shard
#

and @sick birch's offline

slate swan
#

how can i add a command alias

twin moon
maiden fable
#

Not for me tho

maiden fable
unkempt canyonBOT
#

get_command(name)```
Get a [`Command`](https://discordpy.readthedocs.io/en/master/ext/commands/api.html#discord.ext.commands.Command "discord.ext.commands.Command") from the internal list of commands.

This could also be used as a way to get aliases.

The name could be fully qualified (e.g. `'foo bar'`) will get the subcommand `bar` of the group command `foo`. If a subcommand is not found then `None` is returned just as usual.
maiden fable
#

!d discord.ext.commands.Command.aliases

unkempt canyonBOT
sullen shoal
regal shard
slate swan
#

ok

maiden fable
#

Oh add

maiden fable
#

Nvm, my bad 🤦

I am really sleepy, gn

regal shard
quick gust
slate swan
slate swan
slate swan
#

which has the .content attribute

#

so you can just do message.content

#

which will return the message's content

#

thanks I just wanted to ask for docs

#

👍

sullen shoal
#

discord.Guild.roles will return a list of discord.Role of the guild. You can iterate through the list and use in statement (not sure if its called statement) to check if role name is in the message content. If it is, add the current element of the iteration to target

slate swan
#

nvm this method wouldn't work anyway because it's referenced before assignment

sullen shoal
#

ok

jagged root
#

how can i do so bot edits a channel name only by adding 2 numbers
for example from ticket-1111 to ticket-111122

sullen shoal
#

database

jagged root
#

oof

sullen shoal
#

the crap way would be to iterate through the list of channels of the guild then find the channel with the highest number then add 2 to it then do whatever you want

jagged root
#

very hard to me...

sullen shoal
#

so use a database

jagged root
#

i dont even know how to start so i wont be able

jagged root
twin moon
regal shard
#

https://paste.pythondiscord.com/iqalujasoq.py ok so I want to make a command that when I say ,stalk (Username) it should goto the hyperlands api website and check if there is the word "True" if there is I want it to Send a DM to me, if it didn't find it I want it to wait 30 mins and try again

river kindle
#

im making a ticket system but doesn't work

async def ticket(ctx):
    guild = ctx.guild
    embed = discord.Embed(
        title = 'Ticket system',
        description = 'React :envelope_with_arrow: to make a ticket.',
        color = 0
    )

    embed.set_footer(text="ticket system")

    msg = await ctx.send(embed=embed)
    await msg.add_reaction(":envelope_with_arrow:")
    reaction = await msg.fetch_message(msg.id)


    await client.wait_for("reaction_add")



    await client.wait_for("reaction_add")

    if reaction == ':envelope_with_arrow:':
        await guild.create_text_channel(name=f'ticket - {reaction.author.name}')```
sick birch
sick birch
#

i'm at school so i went offline haha

slate swan
#

When do you guys recommend jumping to another programming language and what do you guys recommend i thought about c# or js

twin moon
sullen shoal
#

I would say knowing about objects, classes, OOP is enough

#

then you just need some cheatsheet to jump

sick birch
sick birch
#

whenever you want there's really nothing stopping you from doing it

regal shard
slate swan
regal shard
#

I was alsp afk lemme get it

river kindle
#

heeyy someone can help me please

regal shard
sick birch
#

personally i got bored with python for a while, i have phases like that, i was learning stuff with JS then like electron and node

regal shard
#

F

sick birch
regal shard
#

I only know python, autohotkey, and a little bit of HTML

sullen shoal
slate swan
sick birch
#

yep, learn node, express, react/angular/vue/svlete

#

and hey you can also make discord bots in js 😉

slate nymph
#
@bot.user_command(name="pp",alias="penis")
async def pp(ctx,member=None):
    member = discord.Member or ctx.author
    await ctx.send(":eggplant: Looking in your pants ...", delete_after=2)
    await asyncio.sleep(2)
    sizes = ['=', '==', '===', '====', '=====', '======', '=======', '========', '=========', '==========', '===========', '============']
    pp = random.choice(sizes)
    embed = discord.Embed(title="Penis size", description=f"{member.name}'s penis size is:\n8{pp}D",color=discord.Colour.red())
    await ctx.send(embed=embed)```
sullen shoal
#

please use the random module more

slate nymph
sick birch
#

😂

slate nymph
#

Is that a bug?

sick birch
regal shard
#

Robin mate can you help me now?

slate nymph
sick birch
#
print("="*5)

Output

=====
slate nymph
regal shard
#

!e

print("="*5)
unkempt canyonBOT
#

@regal shard :white_check_mark: Your eval job has completed with return code 0.

=====
regal shard
#

:D

sick birch
#

yep

#

!e

print("="*random.randint(1, 10))
#

hmph

slate nymph
#

member is discord.Member or ctx.author

sick birch
#

!e

import random
print("="*random.randint(1, 10))
unkempt canyonBOT
#

@sick birch :white_check_mark: Your eval job has completed with return code 0.

=========
sick birch
#

see?

#

no need to use dicts with that it makes it easier

slate nymph
#

thats a great idea

sick birch
#

it really is

slate nymph
#

tysm

sullen shoal
#

idk i kinda want to do this idk why

sick birch
#

string multiplication does that to you 😂

sullen shoal
#

!e

print("="*__import__("random").randint(0,10))```
unkempt canyonBOT
#

@sullen shoal :white_check_mark: Your eval job has completed with return code 0.

==========
sullen shoal
#

idk why i did that tho

regal shard
sick birch
#

well from your code i doubt you need tasks

#

you just need to organize stuff better

regal shard
#

can u help?

sullen shoal
#

it needs a dataclass thats it

pine ocean
#

Why discord turns russian symbols into Дура
I post request to api/v9/channels/example/message

sick birch
regal shard
#

:D

#

Thanks

sick birch
#

notice how bedwars stats are in ['stats']['bedwars']

sick birch
#

you can do something like:

bedwars = stats['stats']['bedwars']
bedwars_wins = bedwars['wins']
#

you can apply that to everything else

regal shard
#

Good idea

sick birch
#

because you're repeating things a lot

regal shard
#

true

sick birch
#

also add some line breaks between the different gamemodes

#

bedwars should be in one chunk, skywars in another, etc...

regal shard
#

extra work

#

:(

sick birch
#

aight then not an issue

regal shard
#

ok so how would I make it check it every 30 mins

sick birch
#

tasks

regal shard
#

yes but what is that? 🤔

sick birch
#

though why would you do that

#

why not just update it whenever someone runs the cmd

regal shard
#

but I want it to be a stalking cmd

sick birch
#

so just run the stats command

#

each time it's run it will make a request to the hypixel api

regal shard
#

*hyperlands

sick birch
#

sorry

regal shard
#

Nah it's fine

sick birch
#

but yeah it should return the updated info

regal shard
#

yes I know that

sick birch
#

unless you want it to be like constantly updated in one message

regal shard
#

but since my friend unfriended me from there, I don't know when he is online I just wanna stalk his profile

sick birch
#

kinda like a timer but with stats

sick birch
slate swan
#

What is the best thing for a music system or does disnake come with it? I don't see anything relating to music on the disnake api.

regal shard
#

I-

#

I'm not online most of the time

sick birch
#

you can just run it once

#

and always check it it will have the latest info

regal shard
#

I already have a command like that

#

I just want it to send me a msg when he comes online

sullen shoal
regal shard
#

not wanna rethink life choices :/

sick birch
#

i get it now 😂

regal shard
#

;-;

unkempt canyonBOT
#

Per Python Discord's Rule 5, we are unable to assist with questions related to youtube-dl, pytube, or other YouTube video downloaders, as their usage violates YouTube's Terms of Service.

For reference, this usage is covered by the following clauses in YouTube's TOS, as of 2021-03-17:

The following restrictions apply to your use of the Service. You are not allowed to:

1. access, reproduce, download, distribute, transmit, broadcast, display, sell, license, alter, modify or otherwise use any part of the Service or any Content except: (a) as specifically permitted by the Service;  (b) with prior written permission from YouTube and, if applicable, the respective rights holders; or (c) as permitted by applicable law;

3. access the Service using any automated means (such as robots, botnets or scrapers) except: (a) in the case of public search engines, in accordance with YouTube’s robots.txt file; (b) with YouTube’s prior written permission; or (c) as permitted by applicable law;

9. use the Service to view or listen to Content other than for personal, non-commercial use (for example, you may not publicly screen videos or stream music from the Service)
regal shard
#

finally

sick birch
#

sorry my brain doesn't work half the time

regal shard
#

Same

sick birch
#
from discord.ext import tasks, commands

class MyCog(commands.Cog):
    def __init__(self):
        self.index = 0
        self.printer.start()

    def cog_unload(self):
        self.printer.cancel()

    @tasks.loop(seconds=5.0)
    async def printer(self):
        print(self.index)
        self.index += 1

Exmaple from the docs

bronze pilot
#

ouch that's a shame. Love youtubedl

regal shard
#

it's almost been 2 hours since I started asking for help :D

sick birch
#

you can adapt it to what you want

regal shard
#

okok

sick birch
#

i.e set it to 30 minutes

#

@tasks.loop(minutes=30)

#

anything within that function will be run every 30 minutes

regal shard
#

oh yes

#

that's good

sick birch
#

if you find out that your friend is online, have it ping you or DM you or whatever

regal shard
#

1 question

dapper cobalt
unkempt canyonBOT
#

discord.on_member_update(before, after)```
Called when a [`Member`](https://discordpy.readthedocs.io/en/master/api.html#discord.Member "discord.Member") updates their profile.

This is called when one or more of the following things change:

• nickname

• roles

• pending...
regal shard
#

I'm not using cogs + have never used them in my entire life

sick birch
dapper cobalt
#

I didn't complete the message. However, you may read it in the docs.

regal shard
#

could you make it so that it's without cogs

dapper cobalt
sick birch
dapper cobalt
sick birch
regal shard
#

it get's it from the hyperlands api