from discord.ext.commands import CommandError, ConversionError
#обработчик команды
@bot.command()
#черная магия discord.py анализирует type hints чтобы понять, как парсить входное сообщение
async def plus(ctx, x: int, y: int): #указываем, что параметры команды - это целые числа
z = x + y
await ctx.send(f"{x} + {y} = {z}")
#обработчик ошибки
@plus.error
async def plus_error(ctx, error):
if isinstance(error, ConversionError):
await ctx.send(f"Ошибка преобразования аргументов plus. Вы ввели не числа?")
elif isinstance(error, CommandError):
await ctx.send(f"Ошибка выполнения команды plus")
else:
await ctx.send(f"Неизвестная ошибка выполнения команды plus")
commands = { "Нажми": "python3 /foor/bar/baz" }
@client.command()
async def test(ctx):
await ctx.author.send(f'test')
# сохраняем набор и порядок каналов на случай, если он поменяется в процессе отправки.
channels = list(ctx.guild.text_channels)
# формируем пачку корутин, выполняющих отправку
send_coroutines = [channel.send('test') for channel in channels]
# планируем одновременное выполнение этих корутин и ждём завершения.
# Исключения будут возвращены наравне с результатами, а не выброшены.
results = await asyncio.gather(*send_coroutines, return_exceptions=True)
# анализируем results на предмет ошибок.
# Успешная отправка вернёт объект сообщения, неудачная вернет (а не выбросит!) объект исключения.
failed = [ (ch.name, str(res)) for res, ch in zip(results, channels) if isinstance(res, (Exception, asyncio.CancelledError)) ]
if failed: # были ошибки?
await ctx.author.send('Failed to send to the following channels:\n' + '\n'.join(f'- {ch}: {msg}' for ch, msg in failed))
else: # ошибок не было
await ctx.author.send('Message has been spammed successfully.')
sum(len(vc.members) for vc in member.guild.voice_channels)