MusicBot - 添加命令从PC发布图片

时间:2017-05-26 02:22:24

标签: python discord

我对自己的编程能力没有信心,并且一直在高低寻找答案。我已经检查了discord api服务器,并且还在此处开了2天Google搜索,然后在这里寻求帮助。

我使用MusicBot作为个人机器人的基础。

我想添加一个命令,让我从计算机上指定的文件夹中发布随机图片。 目前,我有这个代码:

def cmd_lood (self, channel):
        my_path = r"C:\My Pictures\Saved Pictures\Pixiv Dump" 
        choice = os.path.join(my_path, random.choice(os.listdir(my_path))) 
        return self.send_file('choice','Channel')

在Discord中启动命令后,我在CMD中收到错误说明: InvalidArgument:Destination必须是Channel,Privatechannel,User或Object。收到str

我可以寻求一些帮助,让这个机器人成功地从我的电脑上发布图片吗? 非常感谢您的回复。

1 个答案:

答案 0 :(得分:0)

send_file(destination, fp, *, filename=None, content=None, tts=False)

因此,channel必须是第一个参数,并且必须是discord.Channel object或discord.PrivateChannel object。文件路径或文件类对象必须是第二个arg。您可以使用discord.utils.get按名称获取频道。

你使用了字符串“choice”,而不是变量

因此,正确的代码必须如下所示:

    def cmd_lood (self, channel):
        my_path = r"C:\My Pictures\Saved Pictures\Pixiv Dump" 
        channel = discord.utils.get(self.get_all_channels(), name=channel)
        choice = os.path.join(my_path, random.choice(os.listdir(my_path))) 
        return self.send_file(channel, choice)

我还建议使用命令扩展来获取命令的上下文,因为如果bot可以访问具有此名称的多个通道,那么获取self.get_all_channels()通道的方式可能会返回错误的通道。

使用命令扩展名,此代码如下所示:

import discord
from discord.ext import commands

...

bot = commands.Bot()

...

@bot.command(pass_context=True)
async def cmd_lood (ctx, channel):
     my_path = r"C:\My Pictures\Saved Pictures\Pixiv Dump" 
     channel = discord.utils.get(ctx.server.channels, name=channel)
     choice = os.path.join(my_path, random.choice(os.listdir(my_path))) 
     await bot.send_file(channel, choice)