网页截图增加配置项,可设为仅超级用户可用

This commit is contained in:
CMHopeSunshine 2022-09-25 18:05:57 +08:00
parent b4fb8d0441
commit 742f29a6e8
2 changed files with 29 additions and 16 deletions

View File

@ -69,3 +69,5 @@ class Config(BaseModel):
auto_add_friend: bool = Field(False, alias='自动接受好友请求') auto_add_friend: bool = Field(False, alias='自动接受好友请求')
auto_add_group: bool = Field(False, alias='自动接受群邀请') auto_add_group: bool = Field(False, alias='自动接受群邀请')
notice_event: bool = Field(True, alias='启用好友和群欢迎消息') notice_event: bool = Field(True, alias='启用好友和群欢迎消息')
screenshot_enable: bool = Field(True, alias='启用网页截图权限')

View File

@ -1,10 +1,19 @@
from nonebot import on_command from nonebot import on_command
from nonebot.params import CommandArg from nonebot.params import CommandArg
from nonebot.rule import Rule
from nonebot.adapters.onebot.v11 import Message, MessageEvent, MessageSegment from nonebot.adapters.onebot.v11 import Message, MessageEvent, MessageSegment
from nonebot.plugin import PluginMetadata from nonebot.plugin import PluginMetadata
from LittlePaimon import SUPERUSERS
from LittlePaimon.manager.plugin_manager import plugin_manager as pm
from LittlePaimon.utils.brower import get_browser from LittlePaimon.utils.brower import get_browser
async def permission_check(event: MessageEvent) -> bool:
if pm.config.screenshot_enable:
return True
return event.user_id not in SUPERUSERS and event.sender.role not in ['admin', 'owner']
__plugin_meta__ = PluginMetadata( __plugin_meta__ = PluginMetadata(
name='实用工具', name='实用工具',
description='一些实用的工具插件', description='一些实用的工具插件',
@ -16,7 +25,7 @@ __plugin_meta__ = PluginMetadata(
} }
) )
screenshot_cmd = on_command('网页截图', priority=10, block=True, state={ screenshot_cmd = on_command('网页截图', priority=10, block=True, rule=Rule(permission_check), state={
'pm_name': '网页截图', 'pm_name': '网页截图',
'pm_description': '对指定链接页面进行截图【网页截图www.baidu.com】', 'pm_description': '对指定链接页面进行截图【网页截图www.baidu.com】',
'pm_usage': '网页截图<链接>', 'pm_usage': '网页截图<链接>',
@ -35,25 +44,27 @@ baidu_cmd = on_command('百度一下', priority=10, block=True, state={
async def _(event: MessageEvent, msg: Message = CommandArg()): async def _(event: MessageEvent, msg: Message = CommandArg()):
await screenshot_cmd.send('正在尝试截图,请稍等...') await screenshot_cmd.send('正在尝试截图,请稍等...')
url = msg.extract_plain_text().split(' ')[0] url = msg.extract_plain_text().split(' ')[0]
brower = await get_browser() try:
page = await brower.new_page() brower = await get_browser()
await page.goto(url, wait_until='networkidle') page = await brower.new_page()
if page is None: await page.goto(url, wait_until='networkidle')
await screenshot_cmd.finish('截图失败,无法访问该网页') img = await page.screenshot(full_page=True)
img = await page.screenshot(full_page=True) await screenshot_cmd.send(MessageSegment.image(img))
await screenshot_cmd.finish(MessageSegment.image(img)) except Exception:
await screenshot_cmd.finish('截图失败,无法访问该网页,请稍后再试')
@baidu_cmd.handle() @baidu_cmd.handle()
async def _(event: MessageEvent, msg: Message = CommandArg()): async def _(event: MessageEvent, msg: Message = CommandArg()):
await baidu_cmd.send('正在为你百度,请稍等...') await baidu_cmd.send('正在为你百度,请稍等...')
keyword = msg.extract_plain_text() keyword = msg.extract_plain_text()
brower = await get_browser() try:
page = await brower.new_page() brower = await get_browser()
await page.goto(f'https://www.baidu.com/s?wd={keyword}', wait_until='networkidle', timeout=10000) page = await brower.new_page()
if page is None: await page.goto(f'https://www.baidu.com/s?wd={keyword}', wait_until='networkidle', timeout=15000)
context = await page.query_selector('#content_left')
img = await context.screenshot()
await baidu_cmd.send(MessageSegment.image(img))
except Exception:
await baidu_cmd.finish('百度失败,请稍后再试') await baidu_cmd.finish('百度失败,请稍后再试')
context = await page.query_selector('#content_left')
img = await context.screenshot()
await baidu_cmd.finish(MessageSegment.image(img))