@wetwixs

Ошибка при отправке сообщения в личные сообщения?

Здравствуйте. Столкнулся с такой проблемой, что бот не отправляет в ЛС нужные сообщения, в моем случаи это же уведомление о муте. Как я понял из-за того, что у человека попросту закрыто ЛС.

Код:
@client.command()
@commands.has_any_role( 703596629894365209, 703596629894365210, 703596629894365211, 703596629923725334, 703596629911142433 )
async def mute( ctx, member:discord.Member,time:int, * ,reason ):
	logchannel = client.get_channel( 703596630892478505 )
	chatmoder = client.get_channel( 703596630892478509 )
	generalchat = client.get_channel( 703596631060381711 ) 
	muterole = discord.utils.get( ctx.guild.roles,id=718822379190747226 )
	emb = discord.Embed( title="Выдача заглушки пользователю",color=0xff0000 )
	emb.add_field(name='Модератор', value=ctx.message.author.mention)
	emb.add_field(name='Нарушитель', value=member.mention)
	emb.add_field(name='Причина', value=reason, inline = False)
	emb.add_field(name='Время',value=time, inline = False)
	await member.send(f'{member.name},`Вы были заглушены модератором` {ctx.author.name} `по причине` - {reason}. `Время мута` - {time} `минут`\n`Если не согласны с вердиктом - Вы в праве написать жалобу` - https://forum.robo-hamster.ru/forums/114/')
	await member.add_roles(muterole)
	await logchannel.send(embed = emb)
	await chatmoder.send(f'`Мут нарушителю` - {member.mention} `был успешно выдан на` - {time} `минут`')
	await generalchat.send(f'{member.mention}, `Вы были заглушены модератором` {ctx.author.name} `по причине` - {reason} `на` {time} минут')
	await asyncio.sleep(time * 60)
	await member.remove_roles(muterole)


Ошибка:
Ignoring exception in command mute:
Traceback (most recent call last):
  File "C:\Users\Wetwi\AppData\Local\Programs\Python\Python37\lib\site-packages\discord\ext\commands\core.py", line 83, in wrapped
    ret = await coro(*args, **kwargs)
  File "bot.py", line 50, in mute
    await member.send(f'{member.name},`Вы были заглушены модератором` {ctx.author.name} `по причине` - {reason}. `Время мута` - {time} `минут`\n`Если не согласны с вердиктом - Вы в праве написать жалобу` - https://forum.robo-hamster.ru/forums/114/')
  File "C:\Users\Wetwi\AppData\Local\Programs\Python\Python37\lib\site-packages\discord\abc.py", line 856, in send
    data = await state.http.send_message(channel.id, content, tts=tts, embed=embed, nonce=nonce)
  File "C:\Users\Wetwi\AppData\Local\Programs\Python\Python37\lib\site-packages\discord\http.py", line 221, in request
    raise Forbidden(r, data)
discord.errors.Forbidden: 403 Forbidden (error code: 50007): Cannot send messages to this user

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

Traceback (most recent call last):
  File "C:\Users\Wetwi\AppData\Local\Programs\Python\Python37\lib\site-packages\discord\ext\commands\bot.py", line 892, in invoke
    await ctx.command.invoke(ctx)
  File "C:\Users\Wetwi\AppData\Local\Programs\Python\Python37\lib\site-packages\discord\ext\commands\core.py", line 797, in invoke
    await injected(*ctx.args, **ctx.kwargs)
  File "C:\Users\Wetwi\AppData\Local\Programs\Python\Python37\lib\site-packages\discord\ext\commands\core.py", line 92, in wrapped
    raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: Forbidden: 403 Forbidden (error code: 50007): Cannot send messages to this user


Как я понял, мне нужно сделать проверку, если у человека закрыто ЛС, то собственно бот бы просто пропускал пункт с await member.send, и продолжал код, но вот как это сделать, я не понял.
  • Вопрос задан
  • 68 просмотров
Решения вопроса 2
@Kactus
Не знаю как через await, но можешь попробовать через try и except
Ответ написан
hottabxp
@hottabxp Куратор тега Python
Эксперт по BeautifulSoup(но это не точно!)
Можно использовать конструкцию try...except. Насколько правильно это - не скажу, так как с дискордом не работал.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@wetwixs Автор вопроса
Проблема исправлена. Да, нужно было через try и except.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы