【发布时间】:2018-08-08 20:31:34
【问题描述】:
import asyncio
import random
import discord
memes = {
'r/dank_memes': {'imgur_url':'https://imgur.com/r/dankmemes/', 'trigger': 'get dank', 'memes':['get dank meme', 'sample meme']},
'r/cats': {'imgur_url':'https://imgur.com/r/cats/', 'trigger': 'meow', 'memes':['cat meme', 'i love cats']},
}
@client.event
async def on_message(message):
message.content = message.content.lower()
for name, trigger in memes.items():
if trigger['trigger'] in message.content:
#print(random.choice(memes[name]['memes'])) # This works fine
await client.send_message(message.channel, random.choice(memes[name]['memes']))
我正在制作一个不和谐的机器人,它会在我的频道中说出某个关键字时发布我在网上抓取的随机模因。
我的问题是,当我在 discord 中输入“get dank”时,机器人会发送大量表情包:
get dank meme
get dank meme
dank 2
get dank meme
但是当我输入“meow”或 memes 字典中的任何最后一个值时,它可以正常工作并且只发送一个图像。
我发现这与来自 asyncio 的 await 有关,因为当我使用 print() 时,它只会将其发送一次到控制台。看来await 是必需的,因为没有它,脚本不会做任何事情。在 for 循环中使用 break 也无济于事。
有没有办法让循环在找到关键字后停止,或者只发送一张图片并使用await。
【问题讨论】:
标签: loops dictionary python-3.6 python-asyncio discord