尝试使用 discord.py 制作 Discord 机器人,出现错误

Trying to make a Discord bot with discord.py, getting errors

我正在尝试让机器人每隔几秒从一组预定义的消息中发送一条消息。

import discord
import asyncio
import random

client = discord.Client()

async def background_loop():
    await client.wait_until_ready()
    while not client.is_closed:
        channel = client.get_channel("channel id here")
        messages = ["Hello!", "How are you doing?", "Howdy!"]
        await client.send_message(channel, random.choice(messages))
        await asyncio.sleep(120)

client.loop.create_task(background_loop())
client.run("discord token here")

但是当我也尝试 运行 它时,我在控制台中收到此错误并且没有消息发送到聊天中。

/usr/bin/python3.5 /root/PycharmProjects/untitled/Loop.py
Task exception was never retrieved
future: <Task finished coro=<background_loop() done, defined at /root/PycharmProjects/untitled/Loop.py:8> exception=InvalidArgument('Destination must be Channel, PrivateChannel, User, or Object. Received NoneType',)>
Traceback (most recent call last):
  File "/usr/lib/python3.5/asyncio/tasks.py", line 239, in _step
    result = coro.send(None)
  File "/root/PycharmProjects/untitled/Loop.py", line 13, in background_loop
    await client.send_message(channel, random.choice(messages))
  File "/usr/local/lib/python3.5/dist-packages/discord/client.py", line 1145, in send_message
    channel_id, guild_id = yield from self._resolve_destination(destination)
  File "/usr/local/lib/python3.5/dist-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

我通过编写辅助函数从客户端获取 Channel 对象来修复此问题

def get_channel(channels, channel_name):
    for channel in client.get_all_channels():
        print(channel)
        if channel.name == channel_name:
            return channel
    return None

client = discord.Client()
general_channel = get_channel(client.get_all_channels(), 'general')
await client.send_message(general_channel, 'test msg')