mirror of
https://github.com/nonebot/nonebot2.git
synced 2024-12-01 09:34:46 +08:00
123 lines
3.5 KiB
Python
123 lines
3.5 KiB
Python
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'
|
|
}
|
|
|
|
|
|
@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', '翻译到', '翻译成', '翻译为')
|
|
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()
|
|
print(data)
|
|
if 'trans_result' in data:
|
|
core.echo('翻译结果(百度翻译):\n' + '\n'.join([x['dst'] for x in data['trans_result']]), ctx_msg)
|
|
return
|
|
core.echo('翻译失败,可能因为后台接口的频率限制或服务器连接不上', ctx_msg)
|