我正在为我和我的朋友创建一个不和谐的bot,并希望能够将该bot作为命令保存图像URL。然后,每当调用该命令时,它将调用显示该图像的已保存图像URL。基本上,如果我们发现一个模因或有趣的图片,我们希望能够使用我们可以记住的名称来对其进行回忆。
示例:
$save dog (image url to dog pic)
Image saved as $dog
$dog
Bot Posts: (image url to dog pic)
我对python有点陌生,我认为制作此机器人将是一种有趣的学习方式。
我已经尝试了一些代码来保存URL,并且可以正常工作,但是我不确定它将代码保存在哪里。我还需要能够删除所有不起作用的链接,或者要替换已经命名的图像URL。我正在使用discord.py重写版本。
感谢您提供的任何帮助!
@bot.command(name='save')
async def save_url(ctx, name, *, link):
await ctx.send('Saved as: $' + name)
@bot.command(name=name)
async def send_url(img):
await img.send(name)
await img.send(link)
@bot.command(name=remove)
async def get_rid(ctx, rid):
if rid == name:
name = None
await ctx.send("Imaged removed")
elif rid != name:
await ctx.send("Image could not be found.")
编辑:
我想我已经找到了一个解决方案,这要感谢@Patrick Haugh,我将图像URL添加到json文件中,并以此方式保存了它们,并更改了图像调用的方式。
现在由$ img(图像URL名称)代替$(图像URL名称) 这是任何其他discord.py人员的代码,请告诉我是否可以做得更好,或有任何批评意见!
def write_json(title, img):
with open('urls.json') as jfile:
urldict = json.load(jfile)
urldict[title] = img
with open('urls.json', 'w') as jfile:
json.dump(urldict, jfile, sort_keys=True, indent=4)
def delete_json(delete):
try:
with open('urls.json') as jfile:
data = json.loads(jfile.read())
del data[delete]
with open('urls.json', 'w') as f:
json.dump(data, f, sort_keys=True)
y = 'Image' + delete + 'is removed.'
return y
except KeyError:
e = 'Image ' + delete + ' not found!'
return e
def read_json(title):
try:
with open('urls.json') as jfile:
get_url = json.load(jfile)
pic = get_url[title]
return pic
except KeyError:
e = 'Image ' + title + ' not found!'
return e
def read_json_names():
with open('urls.json') as jfile:
get_url = json.load(jfile)
pic = str(get_url.keys())
if pic == 'dict_keys([])':
return 'No images saved!'
else:
pic = pic.lstrip('dict_keys([')
pic = pic.rstrip('])')
return pic
## bot commands ##########################################
@bot.command(name='save')
async def save_url(ctx, name, *, link):
write_json(name, link)
await ctx.send('Saved as: $' + name)
@bot.command(name='remove')
async def remove_url(ctx, thing):
k = delete_json(thing)
await ctx.send(k)
@bot.command(name='img')
async def call_url(ctx, call):
p = read_json(call)
await ctx.send(p)
@bot.command(name='listimg')
async def call_all_urls(ctx):
m = read_json_names()
await ctx.send(m)