python中的不和谐机器人
Posted
技术标签:
【中文标题】python中的不和谐机器人【英文标题】:Discord bot in python 【发布时间】:2021-02-28 03:43:53 【问题描述】:我正在尝试制作一个不和谐的机器人,当用户键入!goat 时,它会发送山羊的随机图像(位于文件夹中)。但我无法到达那里,也找不到像我这样的案例。
这是我的代码:
import discord
import random
import os
class MyClient(discord.Client):
async def on_ready(self):
print('Logged in as')
print(self.user.name)
print(self.user.id)
print('------')
async def on_message(self, message):
# we do not want the bot to reply to itself
if message.author.id == self.user.id:
return
if message.content.startswith('!goat'):
with open(random.choice(os.listdir("/home/leo/Bureau/bot-discord/image")), 'rb') as f:
picture = discord.File(f)
await channel.send(channel, picture)
感谢您的回答。
【问题讨论】:
listdir
返回文件名,而不是完整路径。
哦,好吧,这是个问题,哈哈。你有什么我可以使用的方法吗?
@LéoCarrez 为什么不将路径存储在变量中,然后将路径和文件名连接起来?
看看glob.glob
。我认为这正是您正在寻找的。span>
因为我的代码有效,他在我的文件夹中随机拍摄了一张图片,但他没有发送不和谐的图片,他返回如下错误:FileNotFoundError: [Errno 2] No such file or directory: '图片的名称。
【参考方案1】:
我认为您可以使用glob.glob
解决您的问题:
import glob
from pprint import pprint
from random import choice
goats = glob.glob("P:/Goats/*.png")
pprint(goats)
print(choice(goats), "is the chosen one!")
输出:
['P:/Goats\\Goat0.png',
'P:/Goats\\Goat1.png',
'P:/Goats\\Goat2.png',
'P:/Goats\\Goat3.png',
'P:/Goats\\Goat4.png',
'P:/Goats\\Goat5.png',
'P:/Goats\\Goat6.png',
'P:/Goats\\Goat7.png',
'P:/Goats\\Goat8.png',
'P:/Goats\\Goat9.png']
P:/Goats\Goat2.png is the chosen one!
【讨论】:
感谢您的代码有效,但我不知道如何在频道 discord 上发送图片 使用discord.File
:channel.send(file=discord.File(fp="path/to/file.png", filename="image.png"))
。
@LéoCarrez 您必须定位发送消息的渠道。我不是 100%,但您应该能够在原始代码中通过 message.channel
访问通道对象。
你知道我该怎么做吗,因为我试图在 discord.py 文档上找到它,但我不明白它是如何工作的。【参考方案2】:
我终于在几个论坛和文档上找到了答案。所以我的代码是:
import discord
import glob
from pprint import pprint
from random import choice
class MyClient(discord.Client):
async def on_ready(self):
print('Logged in as')
print(self.user.name)
print(self.user.id)
print('------')
async def on_message(self, message):
# we do not want the bot to reply to itself
if message.author.id == self.user.id:
return
if message.content.startswith('!goat'):
goat = glob.glob("/home/leo/Bureau/bot-discord/image/*.jpeg")
pprint(goat)
image = choice(goat)
await message.channel.send(file=discord.File(image))
感谢大家的回答。祝你有美好的一天。
【讨论】:
以上是关于python中的不和谐机器人的主要内容,如果未能解决你的问题,请参考以下文章
如何阻止不和谐机器人响应自身/所有其他机器人 [Python 3.6 中的不和谐机器人]
我的基于 python 的不和谐机器人没有响应输入的任何命令,并且初始方法没有打印任何内容
如何使用 youtubedl 的搜索功能而不是 url 让我的不和谐机器人播放音乐? (Python)