#discord-bots

1 messages · Page 253 of 1

sick coyote
#

how can i disable a button with the message id?

slate swan
unkempt canyonBOT
slate swan
#

this is a list of all components message has

sick coyote
#

thanks

slate swan
#

when you gather button you need you just need to set .disabled to True

#

!d discord.ui.Button.disabled

unkempt canyonBOT
sick coyote
#

so i dont need to edit the view after?

slate swan
sick coyote
#

when you wanna set a buttonn to disable you need to edit the view after

slate swan
#

yes

shrewd vapor
#

WHY ????

Traceback (most recent call last):
  File "/home/container/.local/lib/python3.11/site-packages/discord/app_commands/commands.py", line 842, in _do_call
    return await self._callback(interaction, **params)  # type: ignore
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/container/otrobot.py", line 671, in kick
    await interaction.followup.send(f"{interaction.user.mention} you can't kick my developers!")
  File "/home/container/.local/lib/python3.11/site-packages/discord/webhook/async_.py", line 1800, in send
    data = await adapter.execute_webhook(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/container/.local/lib/python3.11/site-packages/discord/webhook/async_.py", line 219, in request
    raise NotFound(response, data)
discord.errors.NotFound: 404 Not Found (error code: 10015): Unknown Webhook
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
  File "/home/container/.local/lib/python3.11/site-packages/discord/app_commands/tree.py", line 1248, in _call
    await command._invoke_with_namespace(interaction, namespace)
  File "/home/container/.local/lib/python3.11/site-packages/discord/app_commands/commands.py", line 867, in _invoke_with_namespace
    return await self._do_call(interaction, transformed_values)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/container/.local/lib/python3.11/site-packages/discord/app_commands/commands.py", line 860, in _do_call
    raise CommandInvokeError(self, e) from e
discord.app_commands.errors.CommandInvokeError: Command 'kick' raised an exception: NotFound: 404 Not Found (error code: 10015): Unknown Webhook```
slate swan
shrewd vapor
#
@bot.tree.command(name="kick", description="Kick member from guild")
async def kick(interaction, member : discord.Member, *, reason : str):
        if (not interaction.user.guild_permissions.kick_members):
            await interaction.response.send_message(f"You are not authorized to use this command {interaction.user.mention}")
            return
        if (interaction.user == member):
            await interaction.followup.send(f"{member.mention} you can't kick yourself!")
            return
        if (member.id == 944574924234846298):
            await interaction.followup.send(f"{interaction.user.mention} you can't kick my developers!")
            return
        await member.send(f"You have been kicked by {interaction.user} from {interaction.guild.name}.\nReason : {reason}")
        await member.kick (reason = reason)
        await interaction.response.send_message(f"{member.mention} has been kicked from the guild")```
#

I know lol

slate swan
#

!d discord.Member.kick

unkempt canyonBOT
#

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

Kicks this member. Equivalent to [`Guild.kick()`](https://discordpy.readthedocs.io/en/latest/api.html#discord.Guild.kick "discord.Guild.kick").
shrewd vapor
#

Its just followup.send

slate swan
#

Is there a @app_commands check to see if the bot itself has a certain permission

#

!d discord.app_commands.checks.bot_has_permissions

unkempt canyonBOT
#

@discord.app_commands.checks.bot_has_permissions(**perms)```
Similar to [`has_permissions()`](https://discordpy.readthedocs.io/en/latest/interactions/api.html#discord.app_commands.checks.has_permissions "discord.app_commands.checks.has_permissions") except checks if the bot itself has the permissions listed. This relies on [`discord.Interaction.app_permissions`](https://discordpy.readthedocs.io/en/latest/interactions/api.html#discord.Interaction.app_permissions "discord.Interaction.app_permissions").

This check raises a special exception, [`BotMissingPermissions`](https://discordpy.readthedocs.io/en/latest/interactions/api.html#discord.app_commands.BotMissingPermissions "discord.app_commands.BotMissingPermissions") that is inherited from [`CheckFailure`](https://discordpy.readthedocs.io/en/latest/interactions/api.html#discord.app_commands.CheckFailure "discord.app_commands.CheckFailure").

New in version 2.0.
slate swan
#

thank you

#

👍

#

Like this? ```py
@app_commands.checks.bot_has_permissions("manage_webhooks")

#

oh nvm

#

🤦

#
    @app_commands.checks.bot_has_permissions(manage_webhooks=True)
slate swan
#

ye lol

slate swan
#

how can i add the description for an embed? I though add_field would, but it needs a name

velvet sierra
#

guys, i'm getting the error
AttributeError: 'NoneType' object has no attribute 'global_name'
when i try to use guild.owner.global_name in my code, i'm using the 2.3.0 discord.py library, someone know why this is happening?
i'm doing a for guild in bot guilds: guild.owner.global_name
it works fine in my pc version but dont work fine in the venv version

unkempt canyonBOT
#

The description of the embed. This can be set during initialisation. Can only be up to 4096 characters.

slate swan
#

when you create embed you can pass the description embed = Embed(..., description=...)

slate swan
#

i see

velvet sierra
slate swan
#

and how can u remove all the fields? i see remove_field(), but anyway to remove all of them?

#

!d discord.Guild.owner

unkempt canyonBOT
slate swan
#

it is optional in the docs

velvet sierra
#

alright ty ' ~'

slate swan
#

oh, clear_fields

slate swan
#

!d discord.Embed

unkempt canyonBOT
#

class discord.Embed(*, colour=None, color=None, title=None, type='rich', url=None, description=None, 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.

x == y Checks if two embeds are equal.

New in version 2.0...
slate swan
#

!d discord.Embed.clear_fields

unkempt canyonBOT
#

clear_fields()```
Removes all fields from this embed.

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

Changed in version 2.0: This function now returns the class instance.
slate swan
#

yeah got it, ty

sick coyote
#
for comp in msg.components:
    comp.disabled = True
await msg.edit(view=msg.components)

why does this not work? i get no error

vocal fossil
#

!d events

#

!d events

graceful basin
#

hi! i'm making a discord bot using python using vscode, and the code runs fine and it logs into discord (bot becomes active). None of the commands work , how can i fix this?

slate swan
#

and you are prolly looking for view=self but hard to say from this small amount of code

slate swan
#

what do you get in console?

graceful basin
#

in terminal?

slate swan
#

yes

graceful basin
slate swan
#

and nothing below?

graceful basin
#

nothing under that

sick coyote
slate swan
graceful basin
#

in the terminal or in my bot testing channel?

slate swan
#

in discord channel

graceful basin
#

oh

#

nvm it works fine lmaooo

#

thank you for your help :)

slate swan
#

👍

slate swan
#

do u know by chance if editing a embed with an image attached feels laggier than editing an embed without?

potent spear
slate swan
#

yeah, it does, like, there is a small, very small, delay before showing the edited embed. I tried editing the embed without an image and it is faster. But i saw another bot which is more fluent with a thumbnail instead

mortal thistle
#

how to check by whom a member is invited?

potent spear
tight flower
#

Ill give full credits

upbeat gust
#

Why would you even want that though when there are better examples on the github repo

tight flower
upbeat gust
slate swan
#

Is it possible to do this, so basically my bot is a word blocker if you say a swear it will delete and warn, now I want it so if I have the highest role in my server, I can say anything I want and not getting deleted if that makes sense

turbid condor
#

U can just exclude the roles that u want to

slate swan
turbid condor
#

How are you checking the messages for swear words?

slate swan
turbid condor
#

Ok create a variable for excluded role and put the role ID there

slate swan
turbid condor
#
    if any(word in content for word in blocked_words) and not any(role.id == excluded_role_id for role in message.author.roles):```
slate swan
#

Alr thanks I’ll try it

slate swan
#

excluded_role_id = '1116182568421830696'

if any(word in content for word in blocked_words) and not any(role.id == excluded_role_id for role in message.author.roles):

#

If i have the role it still sends

buoyant quail
#

Role ids are stored as integers

vale wing
#

Another way to check if user has role is message.author.get_role(id) is not None

#

In some cases it's better

slate swan
#
async def on_message(message):
    if not message.author.bot:
        content = message.content.lower()
        if any(word in content for word in blocked_words):
            deleted_message = message.content, {message.author.mention}
            await message.delete()
            await message.channel.send(f"bad word ")
            webhook.send(deleted_message)```


how can i make it instead of sending the bad word i want to send the whole message so if i had "chain is a (BAD WORD)" it wil send the whole message to logs
#

can anyone help

slate swan
vale wing
#

How much sense does it make

twilit grotto
#

that should work, u just have to format the message, and also remove deleted_message = message.content, {message.author.mention} and change it, not correct syntax

vale wing
#

And how is webhook defined

slate swan
#

i just sent the function for referece

vale wing
#

Yeah but how

slate swan
#

webhook = Webhook.from_url("", adapter=RequestsWebhookAdapter())

twilit grotto
# slate swan How could i do it

i dont want to spoonfeed you, but ill tell you a tiny bit, just how you're defining deleted_message, if you are trying to make it concatenate message.content and the users mention, you'd use a + not a comma, and remove the curly braces

vale wing
#

There's not even adapter param is there? Is this a fork

twilit grotto
#

and you'd prob just want to f-string it, so u can add a space

twilit grotto
#

ofc

slate swan
#

hellooo i made this bot and it should react to a emoji and it gives you a one in 15,000 chance of getting a certain role and else you get a different role and you cant react anymore to it for 10 minutes and this bot will be used for a minimum of 15k people is there any way i can optimize it so it doesnt crash on launch?

#

If it crashes, a traceback is more useful than the code

unkempt canyonBOT
#
Traceback

Please provide the full traceback for your exception in order to help us identify your issue.
While the last line of the error message tells us what kind of error you got,
the full traceback will tell us which line, and other critical information to solve your problem.
Please avoid screenshots so we can copy and paste parts of the message.

A full traceback could look like:

Traceback (most recent call last):
  File "my_file.py", line 5, in <module>
    add_three("6")
  File "my_file.py", line 2, in add_three
    a = num + 3
        ~~~~^~~
TypeError: can only concatenate str (not "int") to str

If the traceback is long, use our pastebin.

steep estuary
#

Is there any way to show bot embed to members who don't have permission to chat on a channel and on the same channel other members with permissions see their daily chats?

naive briar
#

What

#

That's the most confusing message I've seen this year

formal basin
#

is it possible to get the latest message in a certain channel?

slate swan
naive briar
unkempt canyonBOT
naive briar
unkempt canyonBOT
formal basin
formal basin
# slate swan Yes it's possible, there's a few ways to do it
@client.tree.command(name="update", description=f"get the latest update on {name}")
async def update(interaction: discord.Interaction):
  channel2 = client.get_channel(1112066492574478378)
  message = await channel2.fetch_message(channel2.last_message_id)
  await interaction.response.send_message(f"the latest update is: ``{message}``")
  ``` i tried this
#

the latest update is: <Message id=1117364590334971914 channel=<TextChannel id=1112066492574478378 name='bot-updates' position=6 nsfw=False news=True category_id=1112053260879147134> type=<MessageType.default: 0> author=<Member id=821789676255969301 name='zagzag990' discriminator='0482' bot=False nick=None guild=<Guild id=1112053259604074618 name='zagzag support' shard_id=0 chunked=True member_count=8>> flags=<MessageFlags value=1>>

#

but thats the response

naive briar
formal basin
naive briar
#

And? What's wrong

formal basin
naive briar
naive briar
#

I literally just sent the docs

formal basin
#

just the latest message

naive briar
#

That's the message

#

It's the repr of a message object, which is returned by the fetch_message method

naive briar
#

What do you even want to do

#

Just the get resources you want from the message

formal basin
#

thats all

naive briar
#

And you got it?

formal basin
#

i didn't even get the message

naive briar
#

You're kidding

formal basin
naive briar
#

You're kidding

#

Just print type(message) or message.content

formal basin
#

not all messages

naive briar
#

Are you on the same topic

formal basin
naive briar
formal basin
naive briar
#

You literally just fetched the last message and store it as message

#

I shouldn't have to explain this

formal basin
naive briar
#

And?

formal basin
#

so do i just do message = message.content_channel2

naive briar
formal basin
slate swan
#

How much OOP do you know?

formal basin
#

uhh idk why i got that error

naive briar
#

Read the docs

#

And I'm leaving

formal basin
slate swan
#

||spolier: client did not log in to discord api yet||

potent spear
pulsar burrow
#

doesnt work im on centos 7 vm and its commandl ine only

slate swan
#

for macos its Install Certificates.command

#

file

vale wing
#

Me first time seeing someone else using termius

lofty lance
#

hey

#

i am getting such a error wile importing token form .env file

#

ImportError: cannot import name 'load_dotenv' from 'dotenv

#

can anyone help me out pls

slate swan
#

prolly Python or somewhere in Programs

slate swan
lofty lance
#

but issue is sloved

#

did a messy mistake

slate swan
#

mhm

lofty lance
#

btw can i ask one more thing?

slate swan
#

why not?

lofty lance
#

like i am trying to make a map for a dsicord bot game
and i want to put latitude and logitude system in it

#

but cant make my brain think how to do it any idea?

slate swan
#

how you want that to work?

lofty lance
#

to make it like a game

#

like two server have locations and lat and long will help to determain distance and time for person to travel like a real life traveling

#

tho u can consider hrs to secs in game

slate swan
slate swan
#

where this guild is located

like coordinates

lofty lance
#

consider it like u are in real life and

lofty lance
#

u wana taravel form one place whose cordinates are 11 long and 22 lat
and u wana go to 44 long and 33 lat

#

so thats what i wana do in discord

slate swan
#

yeah i understand

#

im saying that you can store it in the database

#

the coordinates for each guild

lofty lance
#

yaa data can be stored

lofty lance
#

tho i have never used a class i am a biggner
never done oops programmign

slate swan
#

when you use a class then the data will be removed when you restart the bot

slate swan
slate swan
lofty lance
slate swan
lofty lance
slate swan
lofty lance
#

one more question @slate swan

slate swan
lofty lance
#

well as i am a biggner in python
i have learnd till oop
like just know little basics of classes
so do i need to learn more or shall i shift to discord.py for now

#

as i want to build the bot

#

will it affect the bot making ?

slate swan
#

yes you need to know classes good if you want to create bots that are written in pythonic way

#

:)

#

it worked before

#

idk what changed

lofty lance
#

or shall i use chat gpt

slate swan
lofty lance
#

like atleast i can start building the basic of that bot

#

with my current knowlagae

slate swan
#

you can make basic bot without classes but when it will grow you will need classes at some point

#

its better to know them from the beggining

lofty lance
#

and need to plan the layouts to

#

so i can make a basic structure and learn the python simantaniously

#

i will make sure to put bot in pefrect conditon before i launch it

#

@slate swan ahh can i ask one more thing if u dont mind pls

slate swan
#

dont ask to ask just ask

lofty lance
#

for basics
so i tried leetcode

#

but quesitons there were out of my understanding even the first one

#

any suggestion
where can i fix that issue of mine

slate swan
#

well i didnt understand half of the coding problems too and what i did was watching someone solve them on youtube

#

worked for me

lofty lance
#

alr

tight flower
#

how do make it so the user has a choice on what person they want to kick?

tight flower
slate swan
#

Where then

tight flower
#

A custom prefix

#

so if you say !panel

#

it will make a choice of who to kick

slate swan
#

So a dropdown

tight flower
#

bassicly

#

or however you spell it

slate swan
#

!d discord.ui.UserSelect

unkempt canyonBOT
#

class discord.ui.UserSelect(*, custom_id=..., placeholder=None, min_values=1, max_values=1, disabled=False, row=None)```
Represents a UI select menu with a list of predefined options with the current members of the guild.

If this is sent a private message, it will only allow the user to select the client or themselves. Every selected option in a private message will resolve to a [`discord.User`](https://discordpy.readthedocs.io/en/latest/api.html#discord.User "discord.User").

New in version 2.1.
slate swan
#

and you dont pass options

#

options are all users already

tight flower
slate swan
#

what library are you using?

slate swan
#

my discord bot should add a role but it gets to the print("loser") and doesnt give the role it doesnt give any errors and i cant find out why it doesnt give the role

potent spear
#

it's your try except
you're only handling the HttpException, which hides all other errors

#

so you have 2 options:

  1. remove that stinky try except
  2. also except handle all other errors
slate swan
formal basin
#
@client.tree.command(name="help", description="get help on commands")
async def help(interaction: discord.Interaction, choose_command: Literal["welcome setup", "leave setup", "verification setup", "anti spam setup"]):
  channel2 = client.get_channel(1112053260879147130)
  await channel2.send(f"help command used by {interaction.user}")

  if choose_command == "welcome setup":
    embed1 = discord.Embed(name="How to setup welcome manager")
    embed1.add_field(name="welcome manager", value="type /welcome-setup put your welcome channel and your welcome message if you want to mention a user do {mention}.")
    await interaction.response.send_message(embed=embed1)
  if choose_command == "leave setup":
    embed2 = discord.Embed(name="How to setup leave manager")
    embed2.add_field(name="leave manager", value="/leave-setup put your leave channel and your leave message do {mention} to mention a user.")
    await interaction.response.send_message(embed=embed2)
  if choose_command == "verification setup":
    embed3 = discord.Embed(name="How to setup verification system")
    embed3.add_field(name="leave manager", value="type /verify-setup your channel is the channel for the users to verify in and the verified_role is your verified role")
    await interaction.response.send_message(embed=embed3)
  if choose_command == "anti spam setup":
    embed4 = discord.Embed(name="How to setup anti spam")
    embed4.add_field(name="how to setup anti spam", value="Type /anti-spam-on your mute_duration_minutes is how many minutes you want the member to get muted when they spam. (only works in minutes) 1 hour = 60 minutes, 2 hours = 120 minutes and 1 week = 10080 minutes")
    await interaction.response.send_message(embed=embed4)```
#
  File "/home/runner/zagzag/venv/lib/python3.10/site-packages/discord/app_commands/commands.py", line 842, in _do_call
    return await self._callback(interaction, **params)  # type: ignore
  File "main.py", line 52, in help
    embed4 = discord.Embed(name="How to setup anti spam")
TypeError: Embed.__init__() got an unexpected keyword argument 'name'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/runner/zagzag/venv/lib/python3.10/site-packages/discord/app_commands/tree.py", line 1248, in _call
    await command._invoke_with_namespace(interaction, namespace)
  File "/home/runner/zagzag/venv/lib/python3.10/site-packages/discord/app_commands/commands.py", line 867, in _invoke_with_namespace
    return await self._do_call(interaction, transformed_values)
  File "/home/runner/zagzag/venv/lib/python3.10/site-packages/discord/app_commands/commands.py", line 856, in _do_call
    raise CommandInvokeError(self, e) from e
discord.app_commands.errors.CommandInvokeError: Command 'help' raised an exception: TypeError: Embed.__init__() got an unexpected keyword argument 'name'

#

what does this error mean

#

ive done the embed right right?

potent spear
#

what does the error say & what do you understand by it?

formal basin
formal basin
formal basin
potent spear
formal basin
dim cosmos
#

you're basically doing discord.Embed(name="something")

potent spear
potent spear
dim cosmos
#

that should be enough of a hint

formal basin
potent spear
formal basin
#

thanks

dim cosmos
formal basin
quick gust
#

you can have subcommands

dim cosmos
#

yes

#

and why are u manually creating multiple embeds and filling them n shit

formal basin
#

at least it works

dim cosmos
#

i mean yes it does work

#

but it's not really the most satisfying code to look at or the most efficient

slate swan
# potent spear want to know your issue? 🙂

fairly sure this is a error where i just did something dumb but this is my error and how the code looks:
2023-06-16 211206 ERROR discord.client Ignoring exception in on_raw_reaction_add
Traceback (most recent call last):
File "C:\Users\Pablo\PycharmProjects\teknikbot\venv\Lib\site-packages\discord\client.py", line 441, in _run_event
await coro(*args, **kwargs)
File "C:\Users\Pablo\PycharmProjects\teknikbot\test2.py", line 57, in on_raw_reaction_add
await payload.member.add_roles(role)
File "C:\Users\Pablo\PycharmProjects\teknikbot\venv\Lib\site-packages\discord\member.py", line 1044, in add_roles
await req(guild_id, user_id, role.id, reason=reason)
File "C:\Users\Pablo\PycharmProjects\teknikbot\venv\Lib\site-packages\discord\http.py", line 738, in request
raise Forbidden(response, data)
discord.errors.Forbidden: 403 Forbidden (error code: 50001): Missing Access
code:https://hastebin.skyra.pw/kocivoraye.py

potent spear
#

you're most likely editing permissions while your bot doesn't even have the correct roles for it

slate swan
#

hmm

potent spear
#

if your bot has default roles, don't expect it to give you a role he doesn't have

quick gust
potent spear
#

bot it's a permissions issue either way

slate swan
#

because i am pretty sure it has administrator

quick gust
#

yeah doesnt hurt to try to give it admin

#

oh...

slate swan
potent spear
slate swan
#

i am trying again

#

wait\

slate swan
slate swan
potent spear
slate swan
#

Why do you even need identify scope

#

You know what it is?

#

When generating oauth2 link if you dont know what it does choose only bot and application commands

#

If its for the bot only

slate swan
#

If you know what you are doing and what redirect is you can choose rest

slate swan
#

thank you guys i appreciete it:)))

#
Traceback (most recent call last):
  File "/home/runner/DevHood/venv/lib/python3.10/site-packages/discord/ext/commands/converter.py", line 1233, in _actual_conversion
    return converter(argument)
TypeError: 'module' object is not callable

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/runner/DevHood/venv/lib/python3.10/site-packages/discord/ext/commands/bot.py", line 1350, in invoke
    await ctx.command.invoke(ctx)
  File "/home/runner/DevHood/venv/lib/python3.10/site-packages/discord/ext/commands/core.py", line 1015, in invoke
    await self.prepare(ctx)
  File "/home/runner/DevHood/venv/lib/python3.10/site-packages/discord/ext/commands/core.py", line 932, in prepare
    await self._parse_arguments(ctx)
  File "/home/runner/DevHood/venv/lib/python3.10/site-packages/discord/ext/commands/core.py", line 839, in _parse_arguments
    transformed = await self.transform(ctx, param, attachments)
  File "/home/runner/DevHood/venv/lib/python3.10/site-packages/discord/ext/commands/core.py", line 709, in transform
    return await run_converters(ctx, converter, argument, param)  # type: ignore
  File "/home/runner/DevHood/venv/lib/python3.10/site-packages/discord/ext/commands/converter.py", line 1342, in run_converters
    return await _actual_conversion(ctx, converter, argument, param)
  File "/home/runner/DevHood/venv/lib/python3.10/site-packages/discord/ext/commands/converter.py", line 1242, in _actual_conversion
    raise BadArgument(f'Converting to "{name}" failed for parameter "{param.name}".') from exc
discord.ext.commands.errors.BadArgument: Converting to "discord.member" failed for parameter "member".
#

I Made a ban system

#

and i got this error

potent spear
#

discord.Member

slate swan
#

Lemme try it

slate swan
#

anyone know why interaction fails when im using embeds to respond to a button interaction?

#
class Confirm(nextcord.ui.View):
    def __init__(self):
        super().__init__()
        self.value = None

    @nextcord.ui.button(label="Confirm", style=nextcord.ButtonStyle.danger)
    async def confirm(self, button: nextcord.ui.Button, interaction: nextcord.Interaction):
        await interaction.response.send_message("Confirming", ephemeral=True)
        self.value = True
        self.stop()

    @nextcord.ui.button(label="About Moon", style=nextcord.ButtonStyle.blurple)
    async def cancel(self, button: nextcord.ui.Button, interaction: nextcord.Interaction):
        embed = nextcord.Embed(title="About Moon", description="This server is completely based around the Discord bot 'Moon' as a support server for all of the users around the world.")
        embed.add_field(name="Quick Links", value="![rules](https://cdn.discordapp.com/emojis/1119353944838246410.webp?size=128 "rules") (Documentation)[https://moon-10.gitbook.io/moon/]")
        await interaction.response.send_message(embed=embed, ephemeral=True)
        self.value = False
        self.stop()

@client.command()
async def ask(ctx):
    view = Confirm()
    await ctx.send("Do you want to confirm somthing.", view=view)

    await view.wait()

    if not view.value == None:
        print("Timed Out")
    if view.value == True:
        print("Comfirmed")
    if view.value == False:
        print("Cancelled")```
sick birch
slate swan
shrewd vapor
#

Hi

#

You can help me please for create command for get number member join with all invite create by one member and check if all member have join is already on the server or if he have leave

slate swan
#

how do i have text in the same line with the spaces

sick birch
slate swan
#
                embed.add_field(name = 'Moderator', value= f'@Soul#9346', inline = True)
                embed.add_field(name = 'Reason', value= f'Bad Word Usage', inline = True)```
#

what am i doing wrong 😭

naive briar
#

What's even wrong

slate swan
# naive briar What's even wrong
                await message.channel.send(f"{message.author.mention}, Please refrain from using those words. Please use appropriate language.")```


Traceback (most recent call last):
  File "C:\Users\chain\AppData\Local\Programs\Python\Python311\Lib\site-packages\discord\client.py", line 343, in _run_event
    await coro(*args, **kwargs)
  File "C:\Users\chain\Desktop\Recover_Cord (1)\Recover Cord\PRIVATE BOTS\MEE6 (Blacklist Words + Links)\blocker.py", line 52, in on_message
    await message.delete()
  File "C:\Users\chain\AppData\Local\Programs\Python\Python311\Lib\site-packages\discord\message.py", line 1023, in delete
    await self._state.http.delete_message(self.channel.id, self.id)
  File "C:\Users\chain\AppData\Local\Programs\Python\Python311\Lib\site-packages\discord\http.py", line 250, in request
    raise NotFound(r, data)
discord.errors.NotFound: 404 Not Found (error code: 10008): Unknown Message
naive briar
#

Show the full code

#

What? They're trying to send a message to the deleted message's channel

twilit grotto
wanton saddle
#

Can you point me to an online resource that explains how to make discord bot in python

west juniper
#

Hey, I am trying to create slash commands the code is fully okay with no errors or anything but the slash commands are not registering event at guild level

west juniper
west juniper
#

Not Showing Slash Cmd Even after this command

mighty sundial
#

Hi, i need help with discord intents

#

Error Code : AttributeError: 'Intents' object has no attribute 'message_content'

#

My Code : import discord
from discord.ext import commands
import requests

intents = discord.Intents.default()
intents.message_content = True

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

turbid condor
#

Like assign it as a variable then print(f"{len(variable_name)} commands have been synced")

turbid condor
mighty sundial
#

i think i have an old discord py version

#

intents came with v2.0

turbid condor
#

Try doing pip freeze

mighty sundial
#

Okay i will

turbid condor
#

And check dpy version

sweet minnow
#

How to make my mysql db never timeout? im using python to make my discord bot.. but it stops working every 8 hours (if no one uses the commands)

slate swan
sweet minnow
slate swan
#

what library

sweet minnow
#

mysql.connector

slate swan
#

in discord bot everything must be asynchronous

sweet minnow
#

ok

#

and how to fix this issue

slate swan
#

!pypi aiomysql

unkempt canyonBOT
slate swan
#

this looks promising

slate swan
turbid condor
#

guys any library that can translate text

naive briar
#

Translate language or what

turbid condor
#

language

#

probably indonesian to eng

north kiln
#

might want to look for some apis (if not all of them are paid anyway)

turbid condor
#

so no lib for it?

naive briar
#

There's something called search engine

#

!pip googletrans

unkempt canyonBOT
turbid condor
slate swan
#

There's aiogoogletrans too

slate swan
#

im jw if u can help

so when i made this bot last night just as a small bot for the server i am using for the bot thats being made, How comes whenever i first started last night is fine, as soon as my pc goes off, it stops working and if my pc comes back on and i laucnh to bot again it doenst work, it doesnt respond to any commands or nothing but before that everything is working fine before i went off with 0 error messages this was last night

slate swan
#

no like

#

i came back on and it isnt working after restarting the cmd if ygm

#

like i turn off my pc, come back on, and then launch the bot and it just comes online and nothing else

#

no idea what you mean

#

before i turnt my pc off, it was fine

i come back online today and it isnt working after starting the bot again

#

do you get any errors in terminal?

#

no nothing

#

code?

#

yeye 2 secs

glad cradle
#

!paste use this

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.

slate swan
slate swan
glad cradle
#

mhm something something weird

slate swan
#

the only commands that work are the / commands, anything else doesnt owkr

#

and i havent tocuehd the code since i went off

potent spear
#

one sec, I'll link you the fix

glad cradle
#

switch to @client.listen()

slate swan
#

for on_message

potent spear
#

just read the link, you'll get it

glad cradle
slate swan
#

read the docs link i sent

slate swan
slate swan
#

why would that stop it working if my bot goes offline?

slate swan
glad cradle
#

mhm probably you updated the code adding that event handler yesterday whitout restarting the bot so you're seeing the consequences only today

slate swan
#

ohh okay

#

am sorta new to the discord side of .py im a .js .lua dev my b ty for the help

#

and why is because in the background it just catches every message in on_message and if it matches any of your commands and starts with your prefix it calls this command

#

and by creating on_message event by your own you kinda override it

potent spear
#

in short, on_msg gets called first, so you were "eating" your command handlers

slate swan
#

ohh okay

#

my b ty for the help!

glad cradle
#

that is if you use @client.event coz it overrides the default on_message implementation

slate swan
#

👍

slate swan
#

@client.listen i belive you can create multiple and they are called one after another

#

ah okay

slate swan
#

but client.listen is just faster i belive

glad cradle
glad cradle
autumn granite
#

hey

unkempt canyonBOT
unique lichen
#

ImportError: cannot import name 'Intents' from 'discord'

sick birch
unique lichen
turbid condor
unkempt canyonBOT
#

class discord.Intents(value=0, **kwargs)```
Wraps up a Discord gateway intent flag.

Similar to [`Permissions`](https://discordpy.readthedocs.io/en/latest/api.html#discord.Permissions "discord.Permissions"), the properties provided are two way. You can set and retrieve individual bits using the properties as if they were regular bools.

To construct an object you can pass keyword arguments denoting the flags to enable or disable.

This is used to disable certain gateway features that are unnecessary to run your bot. To make use of this, it is passed to the `intents` keyword argument of [`Client`](https://discordpy.readthedocs.io/en/latest/api.html#discord.Client "discord.Client").

New in version 1.5.
unique lichen
#

why this particular code got a problem?

#

for context i just made this code

turbid condor
#

Can u tell us how are you trying to import it

slate swan
#

Either because you have a file named 'discord.py' or because you're using some old discord.py version

unique lichen
slate swan
#

It's Intents

unique lichen
#

yea its correct case

unique lichen
#

i actually copy pasted the code from my other git were its working fine

#

just not in my vsc

turbid condor
#

Try using a variable directly

#

Like intent =discord.Intents

#

Or just check your dpy version

#

That might be old

#

If I am correct intents were introduced in v2.0

slate swan
#

yup

unique lichen
#

okay i deleted the github from python lib

slate swan
#

though if they have a file named discord.py in their folder, intents won't help

turbid condor
unique lichen
slate swan
turbid condor
slate swan
#

the file is overwriting the import

unique lichen
turbid condor
#

Then no need for from discord import Intents

#

It will work without that line too

slate swan
#

is there a way to get user id of person who iis running cmd in my discordbot

turbid condor
slate swan
#

alright thanks

polar thistle
unkempt canyonBOT
#
class discord.ext.commands.Context(*, message, bot, view, args=..., kwargs=..., prefix=None, command=None, invoked_with=None, invoked_parents=..., invoked_subcommand=None, ...)```
Represents the context in which a command is being invoked under.

This class contains a lot of meta data to help you understand more about the invocation context. This class is not created manually and is instead passed around to commands as the first parameter.

This class implements the [`Messageable`](https://discordpy.readthedocs.io/en/latest/api.html#discord.abc.Messageable "discord.abc.Messageable") ABC.
polar thistle
#

if you need to learn more about ctx

slate swan
turbid condor
#

You are trying to restrict a command to someone??

slate swan
#

yea i forgot ==

turbid condor
#

And is the person u trying to restrict it to your self?

#

I mean the bot owner?

slate swan
turbid condor
#

U know to restrict it to the owner u could have just used @commands.is_owner()

#

This would have restricted the command so only u could use it

#

No need to write an if statement

slate swan
#

no no i will add alot of ppl to restrict form using

#

cuz i dont like them

turbid condor
#

Then can't you just make a role for the ppl who can use the commands and use the @commands.has_role() decorator??

polar thistle
sick coyote
#

in on_presence_update does status count to the profile bio?

slate swan
twilit grotto
slate swan
#

okay

#


@client.event
async def on_connect():
    print(f'Connected as {client.user}')
    await client.wait_until_ready()
    print("Bot is online")
    await client.change_presence(status=nextcord.Status.dnd, activity=nextcord.Game(name="placeholder", emoji="💻"))
    
    guild_id = 1119244868326260776  
    tos = 1119261246177423413  
    info = 1119250090645790751
    help = 1119693456210665573
    
    
    
    guild = client.get_guild(guild_id)
    tos = guild.get_channel(tos)
    info = guild.get_channel(info)
    help = guild.get_channel(help)
    
    await tos.send(">tos")
    await info.send(">ask")
    await help.send(">helpchannel")
    
    ```
slate swan
#

is there no way for that to be allowed in py?

#

or would i need to do that every time the bot restarts

#

what are you trying to do exactly when the bot restarts

#

send a message?

#

so due to the bot restarting the buttons wont work, so im asking the bot once it is connected to client
it will do its own command therefor refreshing the buttons every time it restarts to ensure they are working

#

also instead of using on_connect and then waiting until bot is ready you can just use on_ready

slate swan
#

are you trying to make a message with buttons that work always?

#

not only for the time bot is ran

#

and when restarted they wont work

#

there is a thing for that its called persistent view

#

so on my help embed i have 2 buttons, if i restart my bot those buttons work work

#

would that be

#

(timeout=None) or no

#

yes but you need to register it as persistent

#

see example

#

view=PersistenView

#

oooo ok ty

#

yesh

unkempt canyonBOT
#

examples/views/persistent.py lines 39 to 45

async def setup_hook(self) -> None:
    # Register the persistent view for listening here.
    # Note that this does not send the view to any message.
    # In order to do this you need to first send a message with the View, which is shown below.
    # If you have the message_id you can also pass it as a keyword argument, but for this example
    # we don't have one.
    self.add_view(PersistentView())```
slate swan
#

yeah sumn like this?

class Helping(nextcord.ui.View):
    def __init__(self):
        super().__init__()
        self.value = None

    async def interaction_check(self, interaction: nextcord.Interaction) -> bool:
        return interaction.user.id == self.ctx.author.id  # Only allow the original command invoker to interact with the view

    @nextcord.ui.button(label="Community Commands", style=nextcord.ButtonStyle.green, emoji=":bot~1:")
    async def confirm(self, button: nextcord.ui.Button, interaction: nextcord.Interaction):
        emm = nextcord.Embed(title="Community Commands", description="These are all the commands that anyone in the server may use!")
        emm.add_field(name="Ping", value="This will show the bot's current latency in ms form \n Aliases: 'Pong' 'latency' \n Usage: `ping`", inline=False)
        await interaction.response.send_message(embed=emm, ephemeral=True)
        self.value = True

    @nextcord.ui.button(label="Support Team Commands", style=nextcord.ButtonStyle.green, emoji=":moderation:")
    async def cancel(self, button: nextcord.ui.Button, interaction: nextcord.Interaction):
        embed = nextcord.Embed(title="Support Commands", description="These are commands for our Support/Payment team")
        embed.add_field(name="Sale", value="This command is used to DM all members with a role to let them know about an active sale! \n Usage: `sale <@role>`", inline=False)
        embed.add_field(name="TOS", value="Post all of the TOS in the used channel \n Usage: `tos`", inline=False)
        embed.add_field(name="Reminder", value="Sends a reminder to a mentioned user's DM reminding them about their open ticket! \n Usage: `reminder <@user>`")
        await interaction.response.send_message(embed=embed, ephemeral=True)
        self.value = False

@client.command()
async def help(ctx):
    view = Helping()
    em = nextcord.Embed(title="Help Centre", description="Welcome to the help command of our Discord bot! This command is designed to provide you with comprehensive assistance and guidance on how to effectively utilize the features and functionalities of our bot. Whether you're a new user or a seasoned veteran, this command will help you navigate through the vast array of commands and make the most out of your Discord experience.", color=nextcord.Color.green())

    message = await ctx.send(embed=em, view=view)
    await view.wait()

    # Use the value property of the view to determine which button was clicked
    if view.value is True:
        await message.edit(content="Community Commands selected.")
    elif view.value is False:
        await message.edit(content="Support Team Commands selected.")
    else:
        await message.edit(content="No button selected.")``` 
im guessing
#

?

slate swan
#

All right so, maybe you want to delete that link and reset your bot token first

#

The point of os.getenv is to have a KEY=value and you use os.getenv("KEY")

#

It's not to put your bot's token in there

#

!paste can you use this instead? it has syntax highlighting and is verified website

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.

slate swan
#

Then I'd be awesome to use a non scammy-looking website for sharing your code indeed

worldly sandal
#

guys does the discord python still work?

#

because when i try run my code none of the commands work

slate swan
worldly sandal
#
import discord
from discord.ext import commands
import time
import datetime
from colorama import Fore
import pymongo

intents = discord.Intents.default()
intents.members = True
token = ""
client = commands.Bot(command_prefix=".", intents=intents)
client.remove_command('help')

@client.event
async def on_ready():
    global startTime
    startTime = time.time()
    print('''------''')
    print('''Bot Online: ''' + str(datetime.datetime.now()))
    print('''Logged in as: ''' + client.user.name)
    print('''------''')

@client.command()
async def add_account(ctx, username, password, account_type, balance):
    user = username
    passy = password
    acc_type = account_type
    bal = int(balance)
    client = pymongo.Mongoclient("")
    db = client['Haliflex']
    col = db['Accounts']
    a = col.find_one({"username":user})
    if a:
        ctx.send("User already taken")
    else:
        b = col.insert_one({"Username": user, "password": passy, "account_type":acc_type, "balance":bal})
        if b:
            ctx.send("User created")
        else:
            ctx.send("Error somewhere")
slate swan
#

you need message_content intent enabled

worldly sandal
#

it is

slate swan
#

!d discord.Intents.message_content

unkempt canyonBOT
#

Whether message content, attachments, embeds and components will be available in messages which do not meet the following criteria:

• The message was sent by the client

• The message was sent in direct messages

• The message mentions the client

This applies to the following events...

slate swan
worldly sandal
slate swan
#

you need to enable it in code too

worldly sandal
#

how tf

#

i didnt know that

slate swan
#

like you did to others?

#

intents.message_content = True

worldly sandal
#

thank you

formal basin
#

just your host connecting

#

is there a if statement for an on_message event error

vast totem
#

Oke oke

formal basin
#

because they havent got a channel id in the db

#

pls someone quick

#

error spam

#

plssss

#

someone

#

too many errors

#

help

formal basin
#

is there an if statement for that?

slate swan
#

Just use try except to handle it...

formal basin
#

oh

#

ok

formal basin
#

the error is still printing

#

oh wait nvm

twilit grotto
formal basin
slate swan
#

okay guys, i have a question

#

if i use purge(after=message) will it also erase the message included in after=?

slate swan
#

i see, i wonder how do i test without using my own bot

#

i don't want to it get messy

naive briar
#

!d discord.TextChannel.purge

unkempt canyonBOT
#

await purge(*, limit=100, check=..., before=None, after=None, around=None, oldest_first=None, bulk=True, reason=None)```
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 [`manage_messages`](https://discordpy.readthedocs.io/en/latest/api.html#discord.Permissions.manage_messages "discord.Permissions.manage_messages") to delete messages even if they are your own. Having [`read_message_history`](https://discordpy.readthedocs.io/en/latest/api.html#discord.Permissions.read_message_history "discord.Permissions.read_message_history") is also needed to retrieve message history.

Changed in version 2.0: The `reason` keyword-only parameter was added.

Examples

Deleting bot’s messages...
graceful basin
#

hey! So i run a command for my discord bot, and it runs twice..anyone know why?

naive briar
#

Do you happen to be calling the process_commands twice?

#

Or calling it in a listener

sick birch
#

Or you have two instances of your bot open and you didn't realize

vale wing
#

I once had 2 running and couldn't figure out why tf that happens, turned out while I was migrating from one VPS to another I just stopped the docker container, but it had restart:always policy, so when I rebooted the original VPS it started 💀

glad cradle
#

we can't even see the full error

#

and code

#

you need a tab at line 246

#

yes

#

await self.isJoinhub(...)

#

do you know python's OOP?

#

self is the class object itself that is being auto-filled by python

#

idk your code

#

if you share the affected part maybe i can help you

vocal snow
#

bot isn't an attribute of View, so you can't use self.bot

#

you can use interaction.client in the callback, or take the bot instance in the _init_ and set the bot attribute yourself

pseudo flicker
#

does anyone know why im getting an AttributeError for a Select object?

versed raptor
#
Aa
pseudo flicker
slate swan
#

show LangSelect class

#

oh you provided code my bad

#

the problem is that for the view you create instance of your Select and not actual View

#

in this line await interaction.response.send_message("Select a language to translate to:", view = LangSelect(), ephemeral = True)

#

you create LangSelect and not LangSelectView

#

@pseudo flicker ^

pseudo flicker
#

ooooh

#

ok now the error is now another attributeerror

#

but its choices

#

oh its for self.choices[0]

#

ok mb it should be values

autumn granite
vocal snow
#

pip install tls-client is not python code

#

It's a command you are supposed to run in a shell/terminal

vale wing
#

Replit? No pip install, poetry add instead

#

As wise sarth once said

slate swan
#

is there any examples of a queue system that can be adapted to users instead of music?

vocal snow
#

What do you mean by that?

slate swan
#

when running this, it doesnt detect users.json in my directory

sick coyote
#

what event is called when a user boosts a server? is it on_guild_update?

slate swan
#

or wtv

sick coyote
#

or i could just detect if the default booster role got added

#

and then do sum

west juniper
#

hey how can i make my bot send a message when someone boots the server. what is the event?

sick coyote
#

i found something

#

you could check in the on_message event if the messag type is "premium_guild_subscription"

maiden fable
# vale wing

Rip. He will never be alive in all our memories

maiden fable
#

Oh fu-

glad cradle
#

external reference

slate swan
#
Traceback (most recent call last):
  File "C:\Users\thill\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\discord\ui\view.py", line 427, in _scheduled_task
    await item.callback(interaction)
  File "c:\Users\thill\Desktop\py\bot.py", line 70, in tos
    await interaction.response.send_message(embed=tosembed)
AttributeError: 'Button' object has no attribute 'response'
#
class Menu(discord.ui.View):
    def __init__(self):
        super().__init__(timeout=None)
        self.value=None
        
    
    @discord.ui.button(label="TOS", style=discord.ButtonStyle.red)
    async def tos(self, button: discord.ui.Button, interaction: discord.Interaction):
        tosembed = discord.Embed(title="Moon Terms Of Service")
        tosembed.add_field(name="The official TOS for all official Moon Discord Servers \n Please follow all of these to avoid recieving punishment", value="** **", inline=False)
        tosembed.add_field(name="** **", value="** **", inline=False)
        tosembed.add_field(name="**[1] Refunds**", value="All purchases are final, and you **Can not** recieve a refund. The only reason you may recieve a refund is if the issue is caused by us!", inline=False)
        tosembed.add_field(name="** **", value="** **", inline=False)
        tosembed.add_field(name="**[2] Respect**", value="Treat everyone with respect. Absolutely no harassment,  sexism, racism, or hate speech will be tolerated.", inline=False)
        tosembed.add_field(name="** **", value="** **", inline=False)
        tosembed.add_field(name="**[3] Spam**", value="No spam or self-promotion (server invites, advertisements, etc) without permission from a staff member. This includes DMing fellow members.", inline=False)
        tosembed.add_field(name="** **", value="** **", inline=False)
        tosembed.add_field(name="**[4] NSFW**", value="No age-restricted or obscene content. This includes name, images, or links featuring nudity, sex, hard violence, or other graphically disturbing content.", inline=False)
        tosembed.add_field(name="** **", value="** **", inline=False)
        tosembed.add_field(name="**[5] Support**", value="The moderation team includes all @Support members. The Support team holds the final say in all matters involving this server", inline=False)
        tosembed.add_field(name="** **", value="** **", inline=False)
        tosembed.add_field(name="**[6] Respect**", value="Treat everyone with respect. Absolutely no harassment,  sexism, racism, or hate speech will be tolerated.", inline=False)
        await interaction.response.send_message(embed=tosembed)

        
        

        
@bot.command()
async def menu(ctx):
    view = Menu()
    await ctx.reply(view=view)
naive briar
#

It says there in the error

#

And the interaction parameter should always be in front of the item

#

So, just move the interaction parameter in front of button

slate swan
#

igy

#

that worked thank you

autumn granite
#

How do i solve this

upbeat otter
#

and better do poetry add [package], unless you want to install the libs every time

calm timber
#

Hello i made a bot and the bot is connecting to the channel but after this line the code break.
PS: The bot connect to the channel its just the code that not pass through.

self.voice_client = await ctx.author.voice.channel.connect()
Piece of code:
@commands.command()
    async def play(self, ctx, *, query):
        if ctx.author.voice is None or ctx.author.voice.channel is None:
            await ctx.send("Você precisa estar conectado a um canal de voz.")
            return
        print(self.voice_client)
        if self.voice_client is None or not self.voice_client.is_connected():
            print("aqui")
            self.voice_client = await ctx.author.voice.channel.connect()
            print('passou')
            await ctx.send(f"Conectado ao canal de voz: {self.voice_client.channel}")

Thank you!!

thin raft
#

!d discord.Member.voice

unkempt canyonBOT
thin raft
#

don't use self.voice_client

#

you should use voice client per guild

slate swan
#

is there any examples for adding buttons after a button is pressed

#

so like i press the "click me" button and an embed will appear with buttons attached to that?

slate swan
#

so like

interaction.response.send_message(embed=embed, view=view) or wtv?

slate swan
# slate swan yeah

for the class, would i create the class inside the original classes indent or just like a normal class?

calm timber
slate swan
calm timber
slate swan
#

i was just having issues but i forgot parentheses

thin raft
#

instead of making a variable yourself

calm timber
#

okay

elfin mauve
#

Hey guys, does youtube-dl
lib, working?

#

Or maybe u can advise other lib for that, I want to make smth kinda music bot

calm timber
#

the youtube-dl is with problems

#

let me give you a fix

#

is giving me KeyError: QV

elfin mauve
#

I mean how to use that fix

unkempt canyonBOT
#

4. Use English to the best of your ability. Be polite if someone speaks English imperfectly.

thin raft
#

!rule 5 *

unkempt canyonBOT
#

5. Do not provide or request help on projects that may violate terms of service, or that may be deemed inappropriate, malicious, or illegal.

elfin mauve
thin raft
#

yeah

#

youtube dl is against youtube's tos

#

kinda sad tbh

elfin mauve
#

I see, sorry then, i didnt know

thin raft
#

np

slate swan
#

hey so can anyone tell me how to make it so if my bot sends a dm to a user it prints out like the userid of the person the bot dmed

#
await user.send("stuff")
print(user.id)
slate swan
unkempt canyonBOT
#
Our youtube-dl, or equivalents, policy

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)
drifting arrow
slate swan
#

ImportError: cannot import name 'Option' from 'discord' (C:\Users\chain\AppData\Local\Programs\Python\Python311\Lib\site-packages\discord_init_.py)

#

fix?

potent spear
slate swan
potent spear
frigid estuary
#

I need help
My discord bot is currently running and online, but when I try to use a command that I coded like !help it doesn't work
D:

#

@nova summits

potent spear
slate swan
#

so i have
import discord
from discord.ext import commands

intents = discord.Intents.default()
intents.invites = True
intents.message_content = True

bot = commands.Bot(command_prefix='!', intents=intents)
client = discord.Client(intents=intents)

@client.event
async def on_ready():
does domething

@bot.event
async def on_ready():
print bot is ready

@bot.command()
async def return_input(ctx, *, message):
await ctx.send(message, allowed_mentions=discord.AllowedMentions.none())
print("Command ran.")

so i cant do

bot.run(token)
clinet.run(token)

and basically upon running the bot i want the client event to continously happen but only the command when called upon
anyone know how to go about doing this?

naive briar
#

Why do you have both client and bot

potent spear
#

that's your first issue

#

remove the client

#

the bot is basically a client on steroids
=> it has all client functionality + the commands on top

slate swan
#

oh right so i can just put whatever i had under client event inisde bot event?

potent spear
#

just remove everything client related and only use your bot variable...

#

know that your client was never running in the first place... because that bot.run() line is blocking...

slate swan
#

yeah i had client originally and looked at some tutorials and thought i spefically needed another "bot.event" on top of my client to do commands

naive briar
#

Tutorials, huh

potent spear
#

no, in most "tutorials" they use commands.Bot, because they also want commands...

slate swan
#

ok thanks for the help

frigid estuary
#

22222222222222222222222222222222222222222222222222222222

#

My keyboad is being a bitch

#

the 2 key keeps triggering itself

#

and wont die

waxen notch
#

I need help

vocal snow
waxen notch
#

Okay, tysm

#

I have a problem with my Discord.py bot code. I'm trying to get the bot to play music, but I haven't been able to.

vocal snow
#

Are you getting an error?

waxen notch
#

no

vocal snow
waxen notch
#

Voice support? what is it?

vocal snow
#

pip install -U discord.py[voice]

#

support for playing audio

waxen notch
#

oh, yeah. I install voiche support

#

Excuseme, I really speak Spanish

vocal snow
#

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

vocal snow
#

If you can send it here we can take a look

waxen notch
#

My idea was to make the bot able to play music based on Youtube results.

#

I have my code in Replit. Can I pass it on?

vocal snow
#

!ytdl

unkempt canyonBOT
#
Our youtube-dl, or equivalents, policy

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)
waxen notch
vocal snow
#

Don't think there is a legal way of doing it besides buying the copyrights to the music you want to play

waxen notch
vocal snow
#

youtube doesn't provide an API for obtaining audio/video from it

#

it has an API for searching for videos

#

but it doesn't give the video's content

waxen notch
#

So isn't there a legal way with any program to do that?

vocal snow
#

right

vocal snow
# unkempt canyon

some popular bots like groovy and rythm were taken down by youtube because of this, btw ^

waxen notch
#

Oh, it´s okay. Tysm

snow coral
#

how would i make a check so only a certain role can use a command?

vocal snow
#

!d discord.ext.commands.has_role

unkempt canyonBOT
#

@discord.ext.commands.has_role(item)```
A [`check()`](https://discordpy.readthedocs.io/en/latest/ext/commands/api.html#discord.ext.commands.check "discord.ext.commands.check") that is added that checks if the member invoking the command has the role specified via the name or ID specified.

If a string is specified, you must give the exact name of the role, including caps and spelling.

If an integer is specified, you must give the exact snowflake ID of the role.

If the message is invoked in a private message context then the check will return `False`.

This check raises one of two special exceptions, [`MissingRole`](https://discordpy.readthedocs.io/en/latest/ext/commands/api.html#discord.ext.commands.MissingRole "discord.ext.commands.MissingRole") if the user is missing a role, or [`NoPrivateMessage`](https://discordpy.readthedocs.io/en/latest/ext/commands/api.html#discord.ext.commands.NoPrivateMessage "discord.ext.commands.NoPrivateMessage") if it is used in a private message. Both inherit from [`CheckFailure`](https://discordpy.readthedocs.io/en/latest/ext/commands/api.html#discord.ext.commands.CheckFailure "discord.ext.commands.CheckFailure").

Changed in version 1.1: Raise [`MissingRole`](https://discordpy.readthedocs.io/en/latest/ext/commands/api.html#discord.ext.commands.MissingRole "discord.ext.commands.MissingRole") or [`NoPrivateMessage`](https://discordpy.readthedocs.io/en/latest/ext/commands/api.html#discord.ext.commands.NoPrivateMessage "discord.ext.commands.NoPrivateMessage") instead of generic [`CheckFailure`](https://discordpy.readthedocs.io/en/latest/ext/commands/api.html#discord.ext.commands.CheckFailure "discord.ext.commands.CheckFailure")...
flat haven
#

yall know any free programs to host a python discord bot?

#

Like

#

free not cheap... free

naive briar
#

None

unkempt canyonBOT
#
Discord Bot Hosting

Using free hosting options like repl.it or Heroku for continuous 24/7 bot hosting is strongly discouraged.
Instead, opt for a virtual private server (VPS) or use your own spare hardware if you'd rather not pay for hosting.

See our Discord Bot Hosting Guide on our website that compares many hosting providers, both free and paid.

You may also use #965291480992321536 to discuss different discord bot hosting options.

#
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

snow coral
#

and uh, how can i get my bot to edit its message

versed raptor
#

@snow coral what u mean?

snow coral
#

like if my bot says "hi" if i react with something it could change to "hello" or something

rigid harness
#

bro i keep getting some goofy error when i use the page buttons:

@tree.command(name='help', description='Show available commands and their descriptions')
async def help_command(interaction: discord.Interaction, page: int = 1):
    commands_per_page = 5

    all_commands = list(tree.walk_commands())

    total_pages = (len(all_commands) - 1) // commands_per_page + 1

    if page <= 0 or page > total_pages:
        await interaction.response.send_message("Invalid page number.")
        return

    start_index = (page - 1) * commands_per_page
    end_index = start_index + commands_per_page

    commands = all_commands[start_index:end_index]

    embed = discord.Embed(title='Bot Commands', color=0x141414)

    for command in commands:
        command_name = f"`{command.name}`"
        command_description = command.description
        embed.add_field(name=command_name, value=command_description, inline=False)

    embed.set_footer(text=f"Page {page}/{total_pages}")

    class HelpView(discord.ui.View):
        def __init__(self, page):
            super().__init__()
            self.page = page

        async def update_page(self, interaction2: discord.Interaction, new_page: int):
            await interaction.edit_original_message(embed=embed)
            self.page = new_page

        @discord.ui.button(label="Last Page", style=discord.ButtonStyle.gray)
        async def go_previous(self, button: discord.ui.Button, interaction2: discord.Interaction):
            new_page = self.page - 1
            await self.update_page(interaction, new_page)

        @discord.ui.button(label="Next Page", style=discord.ButtonStyle.gray)
        async def go_next(self, button: discord.ui.Button, interaction2: discord.Interaction):
            new_page = self.page + 1
            await self.update_page(interaction, new_page)

    view = HelpView(page)

    message = await interaction.response.send_message(embed=embed, view=view)

    view.message = message```
#
AttributeError: 'Interaction' object has no attribute 'edit_original_message'
sick birch
rigid harness
#

ohh

#

bro it edits the embed

#

but doesn't really do anything lmao

naive briar
#

What?

wispy pasture
#

my bot is not mentioning users... though the ode states

message = f"**Hey** {ctx.author.mention}**,** **here's the final result!**"
    if prompt_enhancement is not None and prompt_enhancement.value == 'True':
        embed_info.add_field(name="Orignial prompt: ", value=f"> {original_prompt}", inline=False)
    embed_info.add_field(name="Prompt used for Image Generation: ", value=f"> {prompt}", inline=False)
    embed_info.add_field(name="Visual Setting: ", value=f"> {style.name}", inline=True)
    embed_info.add_field(name="Proportion: ", value=f"> {ratio.name}", inline=True)```

the bot should be mentioning the user but its not
naive briar
#

How is it not

wispy pasture
#

lke @naive briar

#

u got a notification

naive briar
#

You used the slash command, why would you need a mention to notice that you used it

wispy pasture
naive briar
#

Can you show the code where you send the response

wispy pasture
#

1 sec plz

naive briar
#

Idk at this point, maybe you can't mention on a response to an interaction?

#

Try mentioning someone in other ways

wispy pasture
naive briar
#

I meant mention with a ping

slate swan
#

Are you deferring the response

wispy pasture
naive briar
#

🤷

wispy pasture
naive briar
#

Then why wouldn't it work

slate swan
#

Add the allowed_mentions kwarg

wispy pasture
wispy pasture
naive briar
#

!d discord.ext.commands.Context.send

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

Sends a message to the destination with the content given.

This works similarly to [`send()`](https://discordpy.readthedocs.io/en/latest/api.html#discord.abc.Messageable.send "discord.abc.Messageable.send") for non-interaction contexts.

For interaction based contexts this does one of the following...
slate swan
#

When using .send()

wispy pasture
#

i see... alright i can try that

slate swan
#

Specify the allowed_mentions kwarg

#

!d discord.AllowedMentions.users

unkempt canyonBOT
#

Controls the users being mentioned. If True (the default) then users are mentioned based on the message content. If False then users are not mentioned at all. If a list of abc.Snowflake is given then only the users provided will be mentioned, provided those users are in the message content.

wispy pasture
#

whats kwarg though?

slate swan
#

keyword argument

wispy pasture
#

ohhhh

slate swan
#

allowed_mentions=...

wispy pasture
#

so i do allowed_mentions=True?

slate swan
wispy pasture
#

ohohoh okokokokok

slate swan
#

allowed_mentions=discord.AllowedMentions(users=True)

wispy pasture
#

ahh.... makes sense

wispy pasture
slate swan
#

Then dunno, you're most likely doing something that shouldn't be done

wispy pasture
#

:/

tidal folio
#

What problem?

#

How install? Disnake?

slate swan
#

pip install disnake ?

tidal folio
#

Waite let me test

#

Where?

slate swan
#

in the command line

tidal folio
#

This is app python

slate swan
#

i always program on a laptop or pc so dont have issues like that

#

i told you already its command to run in command line

#

not in python script

twilit grotto
#

you scribbled out your token, yet the comment on the top is a token

tidal folio
#

Bro this is app python

#

Ohh you right

slate swan
#

why would you code on a phone

tidal folio
#

I have only mobile

tidal folio
#

Use python?

slate swan
tidal folio
slate swan
#

i dont know any website that lets you run python scripts using 3rd party libraries

swift edge
#

who can code a button for me pls

from discord.ext import commands

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

@bot.event
async def on_ready():
    print("Bot is online")

@bot.command()
async def ping(ctx):
    await ctx.send("pong")

@bot.command()
async def info(ctx, member:discord.Member = None):
    if member == None:
        member = ctx.author
        embed = discord.Embed(title="!info - Help Command", description="This is for people who have trouble remembering commands.")
        embed.add_field(name="!ping", value="Simple command, You play the !ping command, the bot responds with pong.")
        embed.add_field(name="!info", value="Help command.", inline=False)
        embed.set_footer(text="Visit for updates.")
    await ctx.send(embed=embed)```
slate swan
#

how does one get a button to open a modal/

#

Combine that with the example above with buttons and magic happens

slate swan
bright lake
#

who can help me to use Cogs?
I tried to read the related documents and follow, but no success

slate swan
#

You get any errors?

bright lake
bright lake
slate swan
slate swan
bright lake
#

ok let me try again

bright lake
#

as old error

slate swan
#

Show other error then

bright lake
slate swan
#

What error

bright lake
#

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

slate swan
#

No others?

#

What library are you using?

bright lake
slate swan
#

Yes i can see but i'm asking for library for discord you are using

#

?

bright lake
slate swan
#

what version?

#

pip show discord.py in console

#

And send output

bright lake
#

ver: 2.4.0a4858+gdc4ed438

slate swan
#

Full output

bright lake
slate swan
#

okay theb

#

I belive you need to await that load extension and add cog calls

#

!d discord.ext.commands.Bot.load_extension

unkempt canyonBOT
#

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

Loads an extension.

An extension is a python module that contains commands, cogs, or listeners.

An extension must have a global function, `setup` defined as the entry point on what to do when the extension is loaded. This entry point must have a single argument, the `bot`.

Changed in version 2.0: This method is now a [coroutine](https://docs.python.org/3/glossary.html#term-coroutine "(in Python v3.11)").
slate swan
#

Yep its awaitable

#

!d discord.ext.commands.Bot.add_cog

unkempt canyonBOT
#

await add_cog(cog, /, *, override=False, guild=..., guilds=...)```
This function is a [*coroutine*](https://docs.python.org/3/library/asyncio-task.html#coroutine).

Adds a “cog” to the bot.

A cog is a class that has its own event listeners and commands.

If the cog is a [`app_commands.Group`](https://discordpy.readthedocs.io/en/latest/interactions/api.html#discord.app_commands.Group "discord.app_commands.Group") then it is added to the bot’s [`CommandTree`](https://discordpy.readthedocs.io/en/latest/interactions/api.html#discord.app_commands.CommandTree "discord.app_commands.CommandTree") as well.

Note

Exceptions raised inside a [`Cog`](https://discordpy.readthedocs.io/en/latest/ext/commands/api.html#discord.ext.commands.Cog "discord.ext.commands.Cog")’s [`cog_load()`](https://discordpy.readthedocs.io/en/latest/ext/commands/api.html#discord.ext.commands.Cog.cog_load "discord.ext.commands.Cog.cog_load") method will be propagated to the caller...
slate swan
#

Its awaitable as well

potent spear
tidal folio
#

Who can create the prefix command in python?

#

I can't find it on google and youtube

#

@slate swan

slate swan
#

You want to create a custom prefix for each guild?

slate swan
#

Well this is doable but i cant help you rn im not at home

tidal folio
tidal folio
slate swan
#

They way you do it is that you store those prefixes in database and then for the command_prefix you specify function that will fetch database and return desired prefix to use

#

You can for sure find it on the YouTube

slate swan
#

Look up custom prefix discord py

#

This part should be similar to disnake if not the same

tidal folio
slate swan
#

!d disnake.ext.commands.Context

unkempt canyonBOT
#
class disnake.ext.commands.Context(*, message, bot, view, args=..., kwargs=..., prefix=None, command=None, invoked_with=None, invoked_parents=..., invoked_subcommand=None, ...)```
Represents the context in which a command is being invoked under.

This class contains a lot of meta data to help you understand more about the invocation context. This class is not created manually and is instead passed around to commands as the first parameter.

This class implements the [`abc.Messageable`](https://docs.disnake.dev/en/latest/api/abc.html#disnake.abc.Messageable "disnake.abc.Messageable") ABC.
tidal folio
slate swan
#

there's a small difference between disnake.Context and disnake.ext.commands.Context

tidal folio
#

Idk why err?

slate swan
#

Dude can you read?

slate swan
#

Let me rephrase.

You have disnake.Context

You must have disnake.ext.commands.Context

slate swan
#

Insane the magic that happens when we read

graceful ermine
#

Hey how could I fix this issue?

#
Exception has occurred: ImportError
cannot import name 'AppCommandOptionType' from 'discord.enums' (C:\Users\berka\AppData\Local\Programs\Python\Python311\Lib\site-packages\discord\enums.py)
  File "C:\Users\berka\Desktop\Ticket bot\main.py", line 3, in <module>
    from discord import app_commands
ImportError: cannot import name 'AppCommandOptionType' from 'discord.enums' (C:\Users\berka\AppData\Local\Programs\Python\Python311\Lib\site-packages\discord\enums.py)```
#
import discord, os
from datetime import datetime
from discord import app_commands
from discord import utils
from discord.ext import commands
from config import token
from discord import ui
from discord.ext import tasks
import random
slate swan
graceful ermine
hazy dune
#

Is there a way to set a time limit for tasks in a discord bot? Every 15min I call another script (server request) via async and at some times, it just won't respond. Therefore I cannot really change the called script and kinda have to rely on the discord bot, to just cancel the task after 30s.

unkempt canyonBOT
fiery jetty
#

if i follow the tutorial of freecodingcamp org for discord bot the only diff being that i do it on vs code instead of replit the bot should still be able to run 24/7 right since the uptime robot pings it on the web page rather than pinging the code itself

slate swan
#

VS Code is a development environment, not a hosting provider

thin raft
#

for the bot to be up your pc needs to be on 24/7

slate swan
#

Replit is a website development environment and pseudo-hosting. Neither are made for hosting a bot

#

Get a cheap VPS to run your bot 24/7 as it should be done and use VS Code to code the bot and test it

fiery jetty
thin raft
#

they're 2 different things

fiery jetty
torpid frigate
#

hey guys, so discord changed the way usernames work and now some commands I wrote for a private server bot dont work

#

anyone else facing this issue?

slate swan
#

That's what happens when you rely on usernames and not user IDs

torpid frigate
slate swan
#

Sooo?

torpid frigate
#

instead of $command Krypton testCommand

#

ive done it that way tho

slate swan
#

So?

torpid frigate
#

using userID

slate swan
#

You should be relying on the user ID and type hint the command argument as a user

#

That way you can do
$command 562359123086409729 blah
$command @slate swan blah

or whatever and you will have access to a user object in your command

torpid frigate
#

hmm alright Ill give it a shot using that method.

lethal drift
#

Anyone know where to find the type hint for Application context in d.py?

slate swan
#

Hybrid command?

lethal drift
#

Not aware of that naming..

#

Slash commands lol

slate swan
#

So you don't do @bot.hybrid_command()

lethal drift
#

@bot.tree.command()

slate swan
#

Then you don't have a context but an interaction

#

!d discord.Interaction

unkempt canyonBOT
#

class discord.Interaction```
Represents a Discord interaction.

An interaction happens when a user does an action that needs to be notified. Current examples are slash commands and components.

New in version 2.0.
lethal drift
#

Ah okay! Thx!

dusk pumice
#

How can I get member's avartar url?

slate swan
#

!d discord.Member.avatar

unkempt canyonBOT
#

property avatar```
Equivalent to [`User.avatar`](https://discordpy.readthedocs.io/en/latest/api.html#discord.User.avatar "discord.User.avatar")
slate swan
#

!d discord.Member.guild_avatar

unkempt canyonBOT
#

property guild_avatar```
Returns an [`Asset`](https://discordpy.readthedocs.io/en/latest/api.html#discord.Asset "discord.Asset") for the guild avatar the member has. If unavailable, `None` is returned.

New in version 2.0.
dusk pumice
#

Thank you soo much

cedar oxide
#

I need help with a command

#

When im using json.dump its returning a long error with the key words being “Extra data line 2 column 1”

cerulean shale
#

how to get server icon url? i tried ctx.guild.icon_url but it isnt working

vocal snow
#

!d discord.Guild.icon

unkempt canyonBOT
cerulean shale
#

thx

alpine oar
#

yea anyone here good with discord bot? i am trying to add an ticket command but i got some errors idk how to solve them

sick birch
alpine oar
#

my whole code?

slate swan
#

the code you need help with

alpine oar
#

Traceback (most recent call last):
File "C:\Users\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\ext\commands\core.py", line 229, in wrapped
ret = await coro(*args, **kwargs)
File "c:\Users\OneDrive\Dokument\Discord Bots\import discord.py", line 144, in ticket
Button = Button(label="📥 Create Ticket", style=discord.ButtonStyle.green)
UnboundLocalError: local variable 'Button' referenced before assignment

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "C:\Users\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\ext\commands\bot.py", line 1350, in invoke
await ctx.command.invoke(ctx)
File "C:\Users\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\ext\commands\core.py", line 1023, in invoke
await injected(*ctx.args, **ctx.kwargs) # type: ignore
File "C:\Users\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\ext\commands\core.py", line 238, in wrapped
raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: UnboundLocalError: local variable 'Button' referenced before assignment

slate swan
#

show code

alpine oar
#

how do i send it if its too long

slate swan
#

!paste

unkempt canyonBOT
#
Pasting large amounts of code

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

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

alpine oar
slate swan
#

you are overriding Button class since you named the varriable the same

#

replace it with button or other cool name

alpine oar
#

whhich line

slate swan
#

the line where you create a button

alpine oar
#

right there right?

slate swan
#

yes

alpine oar
#

the button = button

#

ima do it to Button = button

#

what do you think?

slate swan
#

i think that it wont work

alpine oar
#

F

#

whyyy