这是在选择特定语言的表情符号标志后,discordbot使用谷歌翻译API翻译语言,反应是翻译成该语言,例如美国标志将文本翻译成英语。
用于导入带有表情符号名称和值的json文件的代码:
import json
with open('emoji_flags.json', 'r') as file:
data = json.load(file)
这是我在使用if和elif之前使用的代码,但我被告知这将是一个需要更改的问题。我如何更改代码以访问json文件,找到正确的语言名称/值,然后在选择正确的语言的基础上翻译正确的语言。我对这一切都是新手,所以我需要学习更多的python,以便能够理解哪些代码适用于此,但任何帮助都将不胜感激:
@client.event
async def on_reaction_add(reaction, user):
channel = reaction.message.channel
if reaction.emoji == '🇺🇸':
translation = translate_text('en', reaction.message.content)
json文件中的数据,我从英语开始,以确保在添加其他语言之前它能正确工作:
{
":flag_us:" : "en"
}
要读取json文件,您首先必须使用file = open()
打开该文件,然后可以使用data = json.load(file)
将该文件读取到dict中,最后必须再次使用file.close()
关闭该文件。为了简化关闭文件的过程,您确实正确地使用了with
关键字,但您需要缩进应该为其打开文件的代码:
with open(emoji_flags.json) as json_file:
data = json.load(json_file)
现在数据是一个字典,以后可以从中提取数据。但首先我们想得到表情符号:
emoji = payload.emoji.name
此外,您应该使用on_raw_reaction_add
,因为on_reaction_add
只适用于缓存的消息。
由于目前无法以不一致的方式获得表情符号名称(:flag_us:
(,您必须更改json文件的结构,以将表情符号作为键:
{
"🇺🇸" : "en"
}
请注意,表情符号在不同的平台和应用程序中看起来不一样,即使是一样的。
然后您可以使用访问语言代码
try: #use try except if it's a different emoji
language_code = data[emoji]
except KeyError:
pass
这一切加在一起就是
@bot.event
async def on_raw_reaction_add(payload):
with open(emoji_flags.json) as json_file:
data = json.load(json_file)
emoji = payload.emoji.name
try: #use try except if it's a different emoji
language_code = data[emoji]
channel = await bot.fetch_channel(payload.channel_id)
message = await channel.fetch_message(payload.message_id)
translation = translate_text(language_code, message.content)
except KeyError:
pass
参考文献:
- 党派表情符号
- on_raw_reaction_add
- RawReactionActionEvent