Скажите, send_message и send, не работают в событии @bot, что делать? discord.py

1

Здравствуйте, перечитайте всю документацию на discord.py и, к сожалению, не нашли простую вещь, такую как событие on_member_join в чате, отправить сообщение?

Я использую нестандартную конструкцию, и такой клиент строительства = discord.Client(), но поскольку я понял новый bot = commands.Bot(command_prefix = '!')

import discord
from discord.ext import commands

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

@bot.event
async def on_ready():
    print('Logged in as')
    print(bot.user.name)
    print(bot.user.id)
    print('------')

@bot.event
async def on_member_join(member):
   print(member.name)   
   bot.send(member.name);

Распечатайте() вывод на консоль правильно, но отправить его в чат раздора, к сожалению, не работает (

Я также пробовал:

  1. bot.say(member.name);
  2. bot.send_message (member.name)
  3. bot.send(member.name)

Но все время выдается ошибка. Объект "Bot" не имеет атрибута "say"

Скажите, пожалуйста, что я не так?

Теги:
discord
discord.py

1 ответ

0
Лучший ответ

Версия discord.py которую вы используете, изменит способ отправки сообщений.

discord.py 0.16, ветвь async - это текущая стабильная версия. Он имеет два способа отправки сообщений. (В приведенном ниже примечании обратите внимание, что Bot является подклассом Client, поэтому каждый Bot также имеет доступ ко всем методам Client)

  1. Использование Client.send_message(target, message). Это то, что вы бы использовали в on_message(message)

    await bot.send_message(message.channel, "I am responding to your message")     
    
  2. Использование Bot.say(message). Это простой способ отправки сообщений на канал, к которому была вызвана команда. Она работает только в командах.

    await bot.say("I am responding to your command")
    

discord.py 1.0, ветвь "переписать" - это самая последняя ветвь. Он считал экспериментальным все же, но вполне применим. Одним из многих изменений является то, как работает отправка сообщений.

Теперь вместо того, чтобы на клиенте отправлять методы для отправки сообщений, у нас есть методы на вещах, которые получают сообщения для отправки им сообщения. Все они реализуют абстрактный базовый класс Messageable и имеют метод send. В вашем on_message это будет выглядеть так:

await message.channel.send("I am responding to your message")

Я считаю, что вы используете версию 1.0

  • 0
    Большое спасибо за такой подробный ответ, я пытался отправить сообщение не с события on_message. И из события on_member_join я решил эту проблему, оказалось, что при установке discrod.py половина библиотек, включая send_message (), не были установлены. Было решено, что я сделал virtualenv и обновил все пакеты. Ваш ответ помог мне с bot.say (), потому что очень давно пришло сообщение об ошибке "ctx" - это был пример, большое спасибо еще раз!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню