Exception raised when parsing a command and a parameter that is required is not encountered
[p]spam
выдаст данную ошибку, [p]spam 12
- не выдаст.typing.Optional
.@bot.command()
async def cmd(ctx, m: int = 5):
...
bot.listen
bot.add_listener
pass_context
не существует в текущей версии библиотекиint
вручную, вы передаете в эту функцию строку, а не число, коими ID серверов и являются в текущей версии библиотекиdiscord.Client.create_invite
так же не существует на текущей версии библиотеки, вместо этого необходимый метод находится в объекте канала@Client.command()
async def link(ctx, guild_id: int): # https://discordpy.readthedocs.io/en/stable/ext/commands/commands.html#converters
server = Client.get_guild(guild_id)
channel = server.channels[0]
link = await channel.create_invite(max_uses=2)
await ctx.send(link)
command
у класса, а не у объекта.from discord.ext.commands import Bot
@Bot.command()
async def cmd(...):
...
from discord.ext.commands import Bot
bot = Bot(...)
@bot.command()
async def cmd(...)
...
guild.members
содержит всех участников сервера, в том числе и вашего бота, который, в отличии от других участников сервера определен на основе объекта "клиента" бота и не имеет метода create_dm
.This should be rarely called, as this is done transparently for most people.
User.bot
:guild.roles[-1]
[2021-01-29 06:41:47] [WARNING] discord.http: We are being rate limited. Retrying in 599.79 seconds. Handled under the bucket "549861560378589194:None:/channels/{channel_id}"
import typing
...
@commands.command()
async def ban(self, ctx, member: typing.Union[discord.Member, int], *, reason=None):
# https://discordpy.readthedocs.io/en/stable/ext/commands/commands.html#typing-union
if isinstance(member, int):
member = discord.Object(member)
try:
await ctx.guild.ban(member, reason=reason) # https://discordpy.readthedocs.io/en/stable/api.html#discord.Guild.ban
except NotFound:
await ctx.send(f"Не найдено пользователя с ID {member.id}")
@commands.command()
async def cmd(ctx):
if ctx.message.reference and isinstance(ctx.message.reference.resolved, discord.Message):
await ctx.send(ctx.message.reference.resolved.content)
else:
await ctx.send("You need to reply to message")
@commands.cooldown(rate, per, type=<BucketType.default: 0>)
@client.command()
@commands.cooldown(1, 60, commands.BucketType.user) # Один раз в 60 секунд на пользователя (глобально)
async def cmd(ctx, ...):
...
@client.listen("on_command_error")
async def cooldown_message(ctx, error):
if isinstance(error, commands.CommandOnCooldown):
await ctx.send(f"{ctx.command.qualified_name} можно использовать только {error.cooldown.rate} раз в {error.cooldown.per} секунд. Попробуйте через {error.retry_after} секунд.")
discord
, а не в discord.ext.commands
: https://discordpy.readthedocs.io/en/stable/api.htm...import discord # скорее всего такой импорт у вас уже есть
@command.error
async def command_error(ctx, error):
if isinstance(error, commands.MissingRequiredArgument):
await ctx.send(f'Отсутствует требуемый аргумент: {error.param}')
if isinstance(error, commands.MissingPermissions):
await ctx.send(f'Недостаточно прав: {error.missing_perms}')
if isinstance(error, discord.HTTPException):
await ctx.send(f'Произошла ошибка при запросе: {error.status} ({error.text})')
ctx.channel.create_webhook