@Kenity

Как отправить сообщение в чат?

Я пытаюсь отправить сообщение в чат, но выдает ошибку AttributeError: 'NoneType' object has no attribute 'send'
@commands.Cog.listener()
	async def on_member_update(member, before, after):
		if before.roles != after.roles:
			channel = bot.get_channel(int(930793530102779974))
			emb = discord.Embed(description = f'**Обновление ролей - {before.mention}**', colour = discord.Color.red())
			emb.add_field(name = '**Роли до**', value = ", ".join([r.mention for r in before.roles]))
			emb.add_field(name = '**Роли после**', value = ", ".join([r.mention for r in after.roles]))
			async for event in before.guild.audit_logs(limit = 1, action = discord.AuditLogAction.member_role_update):
				if getattr(event.target, "id", None) != before.id:
					continue
				print(after.roles, event.user)
				emb.add_field(name = "Изменённые рои", value = ",".join([getattr(r, "mention", r.id) for r in event.before.roles or event.after.roles]))
				emb.add_field(name = "Модератор", value = event.user)
				break
			await channel.send(embed = emb)


Я не могу понять, что я делаю не так, у бота есть доступ к каналу, имеет права администратора на сервере.
  • Вопрос задан
  • 71 просмотр
Пригласить эксперта
Ответы на вопрос 2
fenrir1121
@fenrir1121 Куратор тега discord.py
Начни с документации
Исходя из ошибки не найден канал.
Проверьте id, а лучше для получения канала используйте стандартный utils.get
Ответ написан
creat1vv
@creat1vv
nodejs developer
Во первых ваш event в когах, по этому нужно ставить self. Исправил ваш код, попробуйте.
должно работать.
@commands.Cog.listener()
  async def on_member_update(self, member, before, after):
    if before.roles != after.roles:
      channel = self.bot.get_channel(930793530102779974)
      emb = discord.Embed(description = f'**Обновление ролей - {before.mention}**', colour = discord.Color.red())
      emb.add_field(name = '**Роли до**', value = ", ".join([r.mention for r in before.roles]))
      emb.add_field(name = '**Роли после**', value = ", ".join([r.mention for r in after.roles]))
      async for event in before.guild.audit_logs(limit = 1, action = discord.AuditLogAction.member_role_update):
        if getattr(event.target, "id", None) != before.id:
          continue
        print(after.roles, event.user)
        emb.add_field(name = "Изменённые рои", value = ",".join([getattr(r, "mention", r.id) for r in event.before.roles or event.after.roles]))
        emb.add_field(name = "Модератор", value = event.user)
        break
      await channel.send(embed = emb)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы