nonebot2/commands/translate.py

122 lines
3.5 KiB
Python
Raw Normal View History

2016-12-30 22:01:50 +08:00
import os
import hashlib
from datetime import datetime
import requests
from command import CommandRegistry
from commands import core
__registry__ = cr = CommandRegistry()
_app_id = os.environ.get('BAIDU_FANYI_APP_ID')
_api_key = os.environ.get('BAIDU_FANYI_API_KEY')
_lang_map = {
'中文': 'zh',
'繁体中文': 'cht',
'英语': 'en',
'粤语': 'yue',
'文言文': 'wyw',
'日语': 'jp',
'韩语': 'kor',
'法语': 'fra',
'西班牙语': 'spa',
'阿拉伯语': 'ara',
'俄语': 'ru',
'葡萄牙语': 'pt',
'德语': 'de',
'意大利语': 'it',
'希腊语': 'el',
'荷兰语': 'nl',
'波兰语': 'pl',
'保加利亚语': 'bul',
'爱沙尼亚语': 'est',
'丹麦语': 'dan',
'芬兰语': 'fin',
'捷克语': 'cs',
'罗马尼亚语': 'rom',
'斯洛文尼亚语': 'slo',
'瑞典语': 'swe',
'匈牙利语': 'hu',
'越南语': 'vie'
}
_lang_alias_map = {
'简体中文': 'zh',
'汉语': 'zh',
'英文': 'en',
'日文': 'jp',
'韩文': 'kor',
'法文': 'fra',
'西班牙文': 'spa',
'阿拉伯文': 'ara',
'俄文': 'ru',
'葡萄牙文': 'pt',
'德文': 'de',
'意大利文': 'it',
'希腊文': 'el',
'荷兰文': 'nl',
'波兰文': 'pl',
'保加利亚文': 'bul',
'爱沙尼亚文': 'est',
'丹麦文': 'dan',
'芬兰文': 'fin',
'捷克文': 'cs',
'罗马尼亚文': 'rom',
'斯洛文尼亚文': 'slo',
'瑞典文': 'swe',
'匈牙利文': 'hu',
'越南文': 'vie'
2016-12-30 22:01:50 +08:00
}
@cr.register('translate', '翻译', '翻訳')
def translate(args_text, ctx_msg):
query = args_text.strip()
if not query:
core.echo('请在命令后加上要翻译的内容哦~(命令和要翻译的内容用空格或逗号隔开)', ctx_msg)
return
cmd = ctx_msg.get('command')
if cmd == 'translate':
return translate_to('英语 ' + args_text, ctx_msg)
elif cmd == '翻訳':
return translate_to('日语 ' + args_text, ctx_msg)
else:
return translate_to('简体中文 ' + args_text, ctx_msg)
@cr.register('translate_to', 'translate-to', '翻译到', '翻译成', '翻译为')
2016-12-30 22:01:50 +08:00
def translate_to(args_text, ctx_msg):
args = args_text.strip().split(' ', 1)
if len(args) < 2 or (args[0] not in _lang_map and args[0] not in _lang_alias_map):
core.echo(
'请指定目标语言和要翻译的内容哦~(命令、目标语言、要翻译的内容之间用空格或逗号隔开\n目前支持的语言:'
+ ''.join(_lang_map.keys()),
ctx_msg
)
return
core.echo('正在翻译,请稍等……', ctx_msg)
to_lang = _lang_map.get(args[0]) or _lang_alias_map.get(args[0])
query = args[1]
api_url = 'https://fanyi-api.baidu.com/api/trans/vip/translate'
salt = str(int(datetime.now().timestamp()))
sign = hashlib.md5((_app_id + query + salt + _api_key).encode('utf-8')).hexdigest()
resp = requests.post(api_url, data={
'q': query,
'from': 'auto',
'to': to_lang,
'appid': _app_id,
'salt': salt,
'sign': sign
})
if resp.status_code == 200:
data = resp.json()
if 'trans_result' in data:
2017-01-01 23:16:34 +08:00
core.echo('翻译结果(百度翻译):\n' + '\n'.join([x['dst'] for x in data['trans_result']]), ctx_msg)
2016-12-30 22:01:50 +08:00
return
core.echo('翻译失败,可能因为后台接口的频率限制或服务器连接不上', ctx_msg)