Discord.py Bot 将文件发送到 Discord 频道

Posted

技术标签:

【中文标题】Discord.py Bot 将文件发送到 Discord 频道【英文标题】:Discord.py Bot sending file to Discord Channel 【发布时间】:2018-11-24 09:40:33 【问题描述】:

我正在尝试让我的 discord 机器人向我的 discord 服务器发送一个 jpg 文件,但我不断收到一个错误,这似乎很罕见,因为我在互联网上找不到任何解决方案...

错误是... discord.ext.commands.errors.CommandInvokeError:命令引发异常:ClientRequestError:无法为https://discordapp.com/api/v6/channels/454374995758678029/messages写入请求正文

我的进口是

import time

import discord
from discord.ext import commands
from discord.ext.commands import Bot
import asyncio

我将提取的与错误相关的代码是

@bot.command(pass_context = True)

async def image(ctx):

        await bot.send_file(ctx.message.channel, open('halogen.jpg'))

我只是缺少导入还是我的代码存在实际问题?

谢谢大家

【问题讨论】:

旁注:将open(...) 传递给函数通常是一个坏主意,因为该图像可能永远不会关闭,因此如果多次运行此命令,您可能会泄漏文件句柄并最终使您的机器人崩溃. 乔希,你是对的......我摆脱了开放,我的代码立即工作......总是小事 您应该以'rb' 模式打开您的对象。您也可以只传递文件的路径而不是文件对象。见send_file documentation 【参考方案1】:

我正在研究同样的事情,我发现这很有效:

    await ctx.send(file=discord.File(r'c:\location\of\the_file_to\send.png'))

这是我找到它的地方:link

【讨论】:

【参考方案2】:

尝试这样做。

@bot.command(pass_context=True)
async def send(ctx):
    area=ctx.message.channel
    await bot.send_file(area, r"c:\location\of\the_file_to\send.png",filename="Hello",content="Message test")

您可以在此处参考不和谐文档link

【讨论】:

【参考方案3】:

不用ctx也可以发送:

async def timer():

    await client.wait_until_ready()
    channel = client.get_channel(number_of_channel)
    while True:
        await channel.send('Working!', file=discord.File("file.txt"))
        await asyncio.sleep(10)#seconds

【讨论】:

以上是关于Discord.py Bot 将文件发送到 Discord 频道的主要内容,如果未能解决你的问题,请参考以下文章

如何让 discord.py bot 发送到它被调用的服务器?

Discord Bot 响应短语(Discord.py 重写)

使用 discord.py 将已经存在的 json 文件作为嵌入发送

在 Discord (discord.py bot) 中仅从 1 个频道发送消息

discord.py Bot 并不总是删除消息

Discord.py bot - 如何让机器人在 DM 中向我发送用户的消息?