2021-07-03 06:35:45 +00:00
|
|
|
|
import io
|
2021-07-13 07:16:31 +00:00
|
|
|
|
from redis.exceptions import ConnectionError
|
2021-01-16 13:13:21 +00:00
|
|
|
|
from requests import get
|
|
|
|
|
from os import remove
|
2021-07-03 06:35:45 +00:00
|
|
|
|
from telethon.tl.types import MessageMediaPhoto
|
2021-12-16 14:52:25 +00:00
|
|
|
|
from asyncio import TimeoutError
|
2021-07-09 03:40:02 +00:00
|
|
|
|
from pagermaid import bot, redis, redis_status
|
2020-11-14 12:38:20 +00:00
|
|
|
|
from pagermaid.listener import listener
|
2021-06-30 07:50:10 +00:00
|
|
|
|
from pagermaid.utils import obtain_message, alias_command
|
2020-11-14 12:38:20 +00:00
|
|
|
|
|
2021-07-09 04:18:15 +00:00
|
|
|
|
try:
|
|
|
|
|
import aiohttp, aiofiles
|
|
|
|
|
pixiv_import = True
|
|
|
|
|
except ImportError:
|
|
|
|
|
pixiv_import = False
|
2021-07-09 03:40:02 +00:00
|
|
|
|
p_headers = {
|
|
|
|
|
"Referer": 'https://www.pixiv.net',
|
|
|
|
|
'User-Agent':
|
|
|
|
|
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.113 '
|
|
|
|
|
'Safari/537.36',
|
|
|
|
|
}
|
2021-12-16 14:16:16 +00:00
|
|
|
|
p_original = ['i.pixiv.cat', 'i.pximg.net']
|
2021-07-09 03:40:02 +00:00
|
|
|
|
|
|
|
|
|
|
2021-06-30 07:50:10 +00:00
|
|
|
|
@listener(is_plugin=True, outgoing=True, command=alias_command("duckduckgo"),
|
|
|
|
|
description="Duckduckgo 搜索",
|
|
|
|
|
parameters="<query>")
|
|
|
|
|
async def baidu(context):
|
|
|
|
|
await context.edit("获取中 . . .")
|
|
|
|
|
try:
|
|
|
|
|
message = await obtain_message(context)
|
|
|
|
|
except ValueError:
|
|
|
|
|
await context.edit("出错了呜呜呜 ~ 无效的参数。")
|
|
|
|
|
return
|
|
|
|
|
async with bot.conversation('PagerMaid_Modify_bot') as conversation:
|
|
|
|
|
await conversation.send_message('/duckduckgo ' + message)
|
|
|
|
|
chat_response = await conversation.get_response()
|
|
|
|
|
await bot.send_read_acknowledge(conversation.chat_id)
|
|
|
|
|
duckduckgo_text = chat_response.text
|
|
|
|
|
await context.edit(duckduckgo_text)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@listener(is_plugin=True, outgoing=True, command=alias_command("baidu"),
|
2021-06-04 16:08:57 +00:00
|
|
|
|
description="百度搜索",
|
|
|
|
|
parameters="<query>")
|
|
|
|
|
async def baidu(context):
|
|
|
|
|
await context.edit("获取中 . . .")
|
|
|
|
|
try:
|
|
|
|
|
message = await obtain_message(context)
|
|
|
|
|
except ValueError:
|
|
|
|
|
await context.edit("出错了呜呜呜 ~ 无效的参数。")
|
|
|
|
|
return
|
|
|
|
|
async with bot.conversation('PagerMaid_Modify_bot') as conversation:
|
|
|
|
|
await conversation.send_message('/baidu ' + message)
|
|
|
|
|
chat_response = await conversation.get_response()
|
|
|
|
|
await bot.send_read_acknowledge(conversation.chat_id)
|
|
|
|
|
baidu_text = chat_response.text
|
|
|
|
|
await context.edit(baidu_text)
|
|
|
|
|
|
|
|
|
|
|
2021-06-30 07:50:10 +00:00
|
|
|
|
@listener(is_plugin=True, outgoing=True, command=alias_command("weather"),
|
2020-11-14 12:38:20 +00:00
|
|
|
|
description="使用彩云天气 api 查询国内实时天气。",
|
2021-07-22 09:24:00 +00:00
|
|
|
|
parameters="<位置>")
|
2020-11-14 12:38:20 +00:00
|
|
|
|
async def weather(context):
|
|
|
|
|
await context.edit("获取中 . . .")
|
|
|
|
|
try:
|
|
|
|
|
message = await obtain_message(context)
|
|
|
|
|
except ValueError:
|
|
|
|
|
await context.edit("出错了呜呜呜 ~ 无效的参数。")
|
|
|
|
|
return
|
|
|
|
|
async with bot.conversation('PagerMaid_Modify_bot') as conversation:
|
2021-05-15 13:35:10 +00:00
|
|
|
|
await conversation.send_message('/weather_api ' + message)
|
2020-11-14 12:38:20 +00:00
|
|
|
|
chat_response = await conversation.get_response()
|
|
|
|
|
await bot.send_read_acknowledge(conversation.chat_id)
|
|
|
|
|
weather_text = chat_response.text
|
|
|
|
|
await context.edit(weather_text)
|
2021-01-16 13:13:21 +00:00
|
|
|
|
|
|
|
|
|
|
2021-07-22 09:24:00 +00:00
|
|
|
|
@listener(is_plugin=True, outgoing=True, command=alias_command("weather_pic"),
|
|
|
|
|
description="使用彩云天气 api 查询国内实时天气。",
|
|
|
|
|
parameters="<位置>")
|
2021-11-20 13:49:22 +00:00
|
|
|
|
async def weather_pic(context):
|
2021-07-22 09:24:00 +00:00
|
|
|
|
await context.edit("获取中 . . .")
|
|
|
|
|
reply = await context.get_reply_message()
|
|
|
|
|
try:
|
|
|
|
|
message = await obtain_message(context)
|
|
|
|
|
except ValueError:
|
|
|
|
|
await context.edit("出错了呜呜呜 ~ 无效的参数。")
|
|
|
|
|
return
|
|
|
|
|
async with bot.conversation('PagerMaid_Modify_bot') as conversation:
|
|
|
|
|
await conversation.send_message('/weather ' + message)
|
|
|
|
|
chat_response = await conversation.get_response()
|
|
|
|
|
await bot.send_read_acknowledge(conversation.chat_id)
|
|
|
|
|
if reply:
|
|
|
|
|
await context.respond(chat_response, reply_to=reply)
|
|
|
|
|
else:
|
|
|
|
|
await context.respond(chat_response)
|
2021-11-20 13:49:22 +00:00
|
|
|
|
await context.delete()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@listener(is_plugin=True, outgoing=True, command=alias_command("weather_he"),
|
|
|
|
|
description="使用和风天气 api 查询国内省市实时天气。",
|
|
|
|
|
parameters="<位置>")
|
|
|
|
|
async def weather_he(context):
|
|
|
|
|
await context.edit("获取中 . . .")
|
|
|
|
|
reply = await context.get_reply_message()
|
|
|
|
|
try:
|
|
|
|
|
message = await obtain_message(context)
|
|
|
|
|
except ValueError:
|
|
|
|
|
await context.edit("出错了呜呜呜 ~ 无效的参数。")
|
|
|
|
|
return
|
|
|
|
|
async with bot.conversation('PagerMaid_Modify_bot') as conversation:
|
|
|
|
|
await conversation.send_message('/weather_he ' + message)
|
|
|
|
|
chat_response = await conversation.get_response()
|
|
|
|
|
await bot.send_read_acknowledge(conversation.chat_id)
|
|
|
|
|
if reply:
|
|
|
|
|
await context.respond(chat_response, reply_to=reply)
|
|
|
|
|
else:
|
|
|
|
|
await context.respond(chat_response)
|
2021-07-22 09:24:00 +00:00
|
|
|
|
await context.delete()
|
|
|
|
|
|
|
|
|
|
|
2021-06-30 07:50:10 +00:00
|
|
|
|
@listener(is_plugin=True, outgoing=True, command=alias_command("pixiv"),
|
2021-07-09 04:18:15 +00:00
|
|
|
|
description="查询插画信息 (或者回复一条消息)。使用 set [num] 更改镜像源,序号 2 为官方源, 3 为凯露自建源。异步下载需要依赖库 "
|
|
|
|
|
"aiohttp[speedups] 、 aiofiles",
|
2021-01-16 13:13:21 +00:00
|
|
|
|
parameters="[<图片链接>] <图片序号>")
|
|
|
|
|
async def pixiv(context):
|
|
|
|
|
await context.edit("获取中 . . .")
|
2021-07-09 03:40:02 +00:00
|
|
|
|
if len(context.parameter) == 2:
|
|
|
|
|
if context.parameter[0] == 'set':
|
2021-08-19 06:42:24 +00:00
|
|
|
|
if not redis_status():
|
2021-07-09 03:40:02 +00:00
|
|
|
|
await context.edit('redis 数据库离线 无法更改镜像源。')
|
|
|
|
|
return
|
|
|
|
|
else:
|
|
|
|
|
try:
|
|
|
|
|
num = int(context.parameter[1])
|
|
|
|
|
except ValueError:
|
|
|
|
|
await context.edit('镜像源序号错误。')
|
|
|
|
|
return
|
2021-07-09 04:18:15 +00:00
|
|
|
|
if 0 < num < 4:
|
2021-07-13 07:16:31 +00:00
|
|
|
|
try:
|
|
|
|
|
redis.set("pixiv_num", num)
|
|
|
|
|
except ConnectionError:
|
|
|
|
|
await context.edit('redis 数据库离线 无法更改镜像源。')
|
|
|
|
|
return
|
2021-07-09 03:40:02 +00:00
|
|
|
|
await context.edit('镜像源已更改。')
|
|
|
|
|
return
|
|
|
|
|
else:
|
|
|
|
|
await context.edit('镜像源序号错误。')
|
|
|
|
|
return
|
|
|
|
|
else:
|
|
|
|
|
pass
|
2021-08-19 06:42:24 +00:00
|
|
|
|
if not redis_status():
|
2021-07-13 07:16:31 +00:00
|
|
|
|
num = 3
|
2021-07-09 03:40:02 +00:00
|
|
|
|
else:
|
|
|
|
|
try:
|
|
|
|
|
num = int(redis.get("pixiv_num").decode())
|
|
|
|
|
except AttributeError:
|
2021-07-13 07:16:31 +00:00
|
|
|
|
num = 3
|
|
|
|
|
except ConnectionError:
|
|
|
|
|
num = 3
|
2021-01-16 13:13:21 +00:00
|
|
|
|
try:
|
|
|
|
|
message = await obtain_message(context)
|
|
|
|
|
except ValueError:
|
|
|
|
|
await context.edit("出错了呜呜呜 ~ 无效的参数。")
|
|
|
|
|
return
|
|
|
|
|
async with bot.conversation('PagerMaid_Modify_bot') as conversation:
|
|
|
|
|
await conversation.send_message('/pixiv_api ' + message)
|
|
|
|
|
chat_response = await conversation.get_response()
|
|
|
|
|
await bot.send_read_acknowledge(conversation.chat_id)
|
|
|
|
|
pixiv_text = chat_response.text
|
2021-07-09 04:18:15 +00:00
|
|
|
|
pixiv_text = pixiv_text.replace('i.pixiv.cat', p_original[num - 1])
|
2021-01-16 13:13:21 +00:00
|
|
|
|
pixiv_list = pixiv_text.split('|||||')
|
|
|
|
|
if len(pixiv_list) == 2:
|
|
|
|
|
pixiv_albums = pixiv_list[1].split('|||')
|
|
|
|
|
pixiv_album = []
|
2021-07-09 04:18:15 +00:00
|
|
|
|
if pixiv_import:
|
|
|
|
|
await context.edit("调用异步下载图片中 . . .")
|
|
|
|
|
else:
|
|
|
|
|
await context.edit("下载图片中 . . .")
|
2021-07-02 12:04:08 +00:00
|
|
|
|
if len(pixiv_albums) > 8:
|
|
|
|
|
await context.edit('获取的图片数大于 8 ,将只发送前8张图片,下载图片中 . . .')
|
|
|
|
|
for i in range(0, min(len(pixiv_albums), 8)):
|
2021-07-09 04:18:15 +00:00
|
|
|
|
if not pixiv_import:
|
|
|
|
|
r = get(pixiv_albums[i], headers=p_headers)
|
|
|
|
|
with open("pixiv." + str(i) + ".jpg", "wb") as code:
|
|
|
|
|
code.write(r.content)
|
|
|
|
|
else:
|
|
|
|
|
async with aiohttp.ClientSession(headers=p_headers) as session:
|
|
|
|
|
response = await session.get(pixiv_albums[i])
|
|
|
|
|
content = await response.read()
|
|
|
|
|
async with aiofiles.open("pixiv." + str(i) + ".jpg", mode='wb') as code:
|
|
|
|
|
await code.write(content)
|
|
|
|
|
await code.close()
|
2021-01-16 13:13:21 +00:00
|
|
|
|
pixiv_album.extend(["pixiv." + str(i) + ".jpg"])
|
|
|
|
|
await context.client.send_file(context.chat_id, pixiv_album,
|
2021-07-02 12:04:08 +00:00
|
|
|
|
caption=pixiv_list[0])
|
2021-01-16 13:13:21 +00:00
|
|
|
|
await context.delete()
|
|
|
|
|
for i in pixiv_album:
|
|
|
|
|
try:
|
|
|
|
|
remove(i)
|
|
|
|
|
except:
|
|
|
|
|
pass
|
|
|
|
|
else:
|
|
|
|
|
await context.edit(pixiv_text)
|
2021-07-03 06:35:45 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@listener(is_plugin=True, outgoing=True, command=alias_command("whatanime"),
|
|
|
|
|
description="通过图片查找相似动漫。(需要回复图片)")
|
|
|
|
|
async def whatanime(context):
|
|
|
|
|
reply = await context.get_reply_message()
|
|
|
|
|
if reply is not None:
|
|
|
|
|
if reply.media:
|
|
|
|
|
if not isinstance(reply.media, MessageMediaPhoto):
|
|
|
|
|
await context.edit("宁需要回复一张图片")
|
|
|
|
|
return
|
|
|
|
|
else:
|
|
|
|
|
await context.edit("宁需要回复一张图片")
|
|
|
|
|
return
|
|
|
|
|
else:
|
|
|
|
|
await context.edit("宁需要回复一张图片")
|
|
|
|
|
return
|
|
|
|
|
await context.edit("获取中。。。")
|
|
|
|
|
async with bot.conversation('PagerMaid_Modify_bot') as conversation:
|
|
|
|
|
await conversation.send_message(message='/whatanime_api', file=reply.photo)
|
|
|
|
|
chat_response = await conversation.get_response()
|
|
|
|
|
await bot.send_read_acknowledge(conversation.chat_id)
|
|
|
|
|
whatanime_text = chat_response.text
|
|
|
|
|
whatanime_list = whatanime_text.split('|||')
|
|
|
|
|
if len(whatanime_list) == 1:
|
|
|
|
|
await context.edit(whatanime_text)
|
|
|
|
|
return
|
|
|
|
|
link = whatanime_list[0]
|
|
|
|
|
name = whatanime_list[1]
|
|
|
|
|
native = whatanime_list[2]
|
|
|
|
|
episode = whatanime_list[3]
|
|
|
|
|
alias = whatanime_list[4]
|
|
|
|
|
r18 = whatanime_list[5]
|
|
|
|
|
percent = whatanime_list[6]
|
|
|
|
|
img = whatanime_list[7]
|
|
|
|
|
video = whatanime_list[8]
|
|
|
|
|
text = f'[{name}]({link}) (`{native}`)\n'
|
|
|
|
|
if bool(episode):
|
|
|
|
|
text += f'\n**集数:** `{episode}`'
|
|
|
|
|
if bool(alias):
|
|
|
|
|
text += f'\n**别名:** `{alias}`'
|
|
|
|
|
if bool(r18):
|
|
|
|
|
text += f'\n**R-18**'
|
|
|
|
|
text += f'\n**相似度:** `{percent}`'
|
|
|
|
|
|
|
|
|
|
r = get(img)
|
|
|
|
|
photo = io.BytesIO(r.content)
|
|
|
|
|
photo.name = f'{name}.png'
|
|
|
|
|
msg = await context.client.send_file(context.chat_id,
|
|
|
|
|
file=photo,
|
|
|
|
|
caption=text,
|
|
|
|
|
reply_to=reply.id)
|
|
|
|
|
|
|
|
|
|
if not video == '':
|
|
|
|
|
video_list = video.split('||')
|
|
|
|
|
video = video_list[0]
|
|
|
|
|
title = video_list[1]
|
|
|
|
|
start = video_list[2]
|
|
|
|
|
end = video_list[3]
|
|
|
|
|
text = f'`{title}`\n\n`{start}` - `{end}`'
|
|
|
|
|
await context.client.send_file(context.chat_id,
|
|
|
|
|
video,
|
|
|
|
|
caption=text,
|
|
|
|
|
reply_to=msg.id)
|
|
|
|
|
await context.delete()
|
2021-12-13 15:22:17 +00:00
|
|
|
|
|
|
|
|
|
|
2021-12-14 05:11:21 +00:00
|
|
|
|
@listener(is_plugin=True, outgoing=True, command=alias_command("tts_nan"),
|
|
|
|
|
description="通过 Azure 文本到语音 基于字符串生成 简体男声 语音消息。",
|
2021-12-13 15:22:17 +00:00
|
|
|
|
parameters="<字符串>")
|
2021-12-14 05:11:21 +00:00
|
|
|
|
async def az_tts_nan(context):
|
|
|
|
|
await az_tts(context, "")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@listener(is_plugin=True, outgoing=True, command=alias_command("tts_nv"),
|
|
|
|
|
description="通过 Azure 文本到语音 基于字符串生成 简体女声 语音消息。",
|
|
|
|
|
parameters="<字符串>")
|
|
|
|
|
async def az_tts_nv(context):
|
|
|
|
|
await az_tts(context, "nv")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@listener(is_plugin=True, outgoing=True, command=alias_command("tts_tw"),
|
|
|
|
|
description="通过 Azure 文本到语音 基于字符串生成 繁体男声 语音消息。",
|
|
|
|
|
parameters="<字符串>")
|
|
|
|
|
async def az_tts_tw(context):
|
|
|
|
|
await az_tts(context, "tw")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@listener(is_plugin=True, outgoing=True, command=alias_command("tts_ne"),
|
|
|
|
|
description="通过 Azure 文本到语音 基于字符串生成 简体新闻男声 语音消息。",
|
|
|
|
|
parameters="<字符串>")
|
|
|
|
|
async def az_tts_ne(context):
|
|
|
|
|
await az_tts(context, "ne")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@listener(is_plugin=True, outgoing=True, command=alias_command("tts_en"),
|
|
|
|
|
description="通过 Azure 文本到语音 基于字符串生成 英文男声 语音消息。",
|
|
|
|
|
parameters="<字符串>")
|
|
|
|
|
async def az_tts_en(context):
|
|
|
|
|
await az_tts(context, "en")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
async def az_tts(context, mode):
|
2021-12-13 15:22:17 +00:00
|
|
|
|
await context.edit("获取中 . . .")
|
|
|
|
|
reply = await context.get_reply_message()
|
|
|
|
|
try:
|
|
|
|
|
message = await obtain_message(context)
|
|
|
|
|
except ValueError:
|
|
|
|
|
await context.edit("出错了呜呜呜 ~ 无效的参数。")
|
|
|
|
|
return
|
|
|
|
|
async with bot.conversation('PagerMaid_Modify_bot') as conversation:
|
2021-12-14 05:11:21 +00:00
|
|
|
|
await conversation.send_message('/tts ' + message + mode)
|
2021-12-15 05:10:56 +00:00
|
|
|
|
try:
|
|
|
|
|
chat_response = await conversation.get_response()
|
|
|
|
|
except TimeoutError:
|
|
|
|
|
return await context.edit("未收到服务器回应。")
|
2021-12-13 15:22:17 +00:00
|
|
|
|
await bot.send_read_acknowledge(conversation.chat_id)
|
|
|
|
|
if reply:
|
|
|
|
|
await context.respond(chat_response, reply_to=reply)
|
|
|
|
|
else:
|
|
|
|
|
await context.respond(chat_response)
|
|
|
|
|
await context.delete()
|