首页 文章

试图用discord.py制作Discord bot,收到错误

提问于
浏览
0

我试图让机器人每隔几秒从一组预定义的消息发送一条消息 .

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

1 回答

  • 0

    我通过编写一个辅助函数来解决这个问题,从客户端获取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')
    

相关问题