2017-03-03 22 views
0

我试图让机器人每隔几秒钟发送一条消息从一组预定义的消息。试图做一个不和谐的机器人与discord.py,获取错误

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 
+0

获得信道对象解决了这个'discord.errors.InvalidArgument:目标必须是通道,PrivateChannel,用户或对象。收到NoneType' 检查您要将您的请求发送到哪里 - 确保您拥有正确的频道ID? – CynePhoba12

+0

你似乎是正确的,问题是我认为频道ID指的是频道的名称。现在全部修好了。 – Museman

回答

-1

我写一个辅助函数从客户端

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') 
+0

仍然返回一个NoneType – mast3rd3mon

相关问题