我对自己的编程能力没有信心,并且一直在高低寻找答案。我已经检查了discord api服务器,并且还在此处开了2天Google搜索,然后在这里寻求帮助。
我想添加一个命令,让我从计算机上指定的文件夹中发布随机图片。 目前,我有这个代码:
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
我可以寻求一些帮助,让这个机器人成功地从我的电脑上发布图片吗? 非常感谢您的回复。
答案 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)