добро пожаловать / прощай, используя discord.py - PullRequest
0 голосов
/ 04 сентября 2018

Я пытаюсь создать бота, который встречает пользователя, который присоединяется к серверу. Но сделайте так, чтобы этого человека приветствовали на самом сервере, а не в качестве ДМ (что большинство учебных пособий, которые я обнаружил, научит вас, как это сделать).

Это то, что я до сих пор придумал.

@bot.event
async def on_member_join(member):
    channel = bot.get_channel("channel id")
    await bot.send_message(channel,"welcome") 

но, это не работает и вместо этого выдает эту ошибку.

Ignoring exception in on_member_join
Traceback (most recent call last):
File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python36\lib\site- 
packages\discord\client.py", line 307, in _run_event
yield from getattr(self, event)(*args, **kwargs)
File "C:\Users\Lenovo\Documents\first bot\bot.py", line 26, in 
on_member_join
await bot.send_message(channel,"welcome")
File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python36\lib\site- 
packages\discord\client.py", line 1145, in send_message
channel_id, guild_id = yield from self._resolve_destination(destination)
File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python36\lib\site- 
packages\discord\client.py", line 289, in _resolve_destination
raise InvalidArgument(fmt.format(destination))
discord.errors.InvalidArgument: Destination must be Channel, PrivateChannel, 
User, or Object. Received NoneType

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Ответ Патрика Хоу, вероятно, является лучшим выбором, но вот несколько вещей, о которых следует помнить.

Объект Member содержит гильдию (сервер) и текстовые каналы, которые содержит сервер. Используя member.guild.text_channels, вы можете гарантировать, что канал будет существовать, даже если на сервере нет «общего» чата.

@bot.event
async def on_member_join(member):
    channel = member.guild.text_channels[0]
    await channel.send('Welcome!')
0 голосов
/ 04 сентября 2018

Вы не передаете правильный идентификатор на get_channel, поэтому он возвращает None. Быстрый способ получить это - вызвать команду

from discord.ext import commands

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

@bot.command(pass_context=True)
async def get_id(ctx):
    await bot.say("Channel id: {}".format(ctx.message.channel.id))

bot.run("TOKEN")

Вы также можете изменить свою команду, чтобы всегда публиковать в канале с определенным именем на сервере, к которому Member присоединился

from discord.utils import get

@bot.event
async def on_member_join(member):
    channel = get(member.server.channels, name="general")
    await bot.send_message(channel,"welcome") 
...