Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9f3f79f51d | |||
| 92048aeff7 | |||
| 81aac10665 |
34
konabot/common/nb/wzq_conflict.py
Normal file
34
konabot/common/nb/wzq_conflict.py
Normal file
@ -0,0 +1,34 @@
|
||||
from typing import cast
|
||||
from nonebot import get_bot, get_plugin_config, logger
|
||||
from nonebot.adapters import Event as BaseEvent
|
||||
from nonebot.adapters.onebot.v11.event import GroupMessageEvent
|
||||
from nonebot.adapters.onebot.v11.bot import Bot as OnebotBot
|
||||
from nonebot.rule import Rule
|
||||
from pydantic import BaseModel
|
||||
|
||||
|
||||
class WZQConflictConfig(BaseModel):
|
||||
wzq_bot_qq: int = 0
|
||||
|
||||
config = get_plugin_config(WZQConflictConfig)
|
||||
|
||||
|
||||
async def no_wzqbot(evt: BaseEvent):
|
||||
if config.wzq_bot_qq <= 0:
|
||||
return True
|
||||
if not isinstance(evt, GroupMessageEvent):
|
||||
return True
|
||||
gid = evt.group_id
|
||||
sid = evt.self_id
|
||||
bot = cast(OnebotBot, get_bot(str(sid)))
|
||||
|
||||
members = await bot.get_group_member_list(group_id=gid)
|
||||
|
||||
members = set((m.get("user_id", -1) for m in members))
|
||||
if config.wzq_bot_qq in members:
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
no_wzqbot_rule = Rule(no_wzqbot)
|
||||
|
||||
20
konabot/docs/user/卵总展示.txt
Normal file
20
konabot/docs/user/卵总展示.txt
Normal file
@ -0,0 +1,20 @@
|
||||
指令介绍
|
||||
卵总展示 - 让卵总举起你的图片
|
||||
|
||||
格式
|
||||
<引用图片> 卵总展示 [选项]
|
||||
卵总展示 [选项] <图片>
|
||||
|
||||
选项
|
||||
`--whiteness <number>` 白度
|
||||
将原图进行指数变换,以调整它的白的程度,默认为 0.0
|
||||
|
||||
`--black-level <number>` 黑色等级
|
||||
将原图减淡,数值越大越淡,范围 0.0-1.0,默认 0.2
|
||||
|
||||
`--opacity <number>` 不透明度
|
||||
将你的图片叠放在图片上的不透明度,默认为 0.8
|
||||
|
||||
`--saturation <number>` 饱和度
|
||||
调整原图的饱和度,应该要大于 0.0,默认为 0.85
|
||||
|
||||
25
konabot/plugins/auto_accept.py
Normal file
25
konabot/plugins/auto_accept.py
Normal file
@ -0,0 +1,25 @@
|
||||
import asyncio
|
||||
import random
|
||||
from typing import cast
|
||||
|
||||
from loguru import logger
|
||||
from nonebot import get_bot, on_request
|
||||
from nonebot.adapters.onebot.v11.event import FriendRequestEvent
|
||||
from nonebot.adapters.onebot.v11.bot import Bot as OnebotBot
|
||||
|
||||
from konabot.common.nb.is_admin import cfg as adminConfig
|
||||
|
||||
add_request = on_request()
|
||||
|
||||
@add_request.handle()
|
||||
async def _(req: FriendRequestEvent):
|
||||
bot = cast(OnebotBot, get_bot(str(req.self_id)))
|
||||
ok_member_ls: set[int] = set()
|
||||
for group in adminConfig.admin_qq_group:
|
||||
members = await bot.get_group_member_list(group_id=group)
|
||||
ok_member_ls |= cast(set[int], set((m.get("user_id") for m in members)))
|
||||
if req.user_id in ok_member_ls:
|
||||
await asyncio.sleep(random.randint(5, 10))
|
||||
await req.approve(bot)
|
||||
logger.info(f"已经自动同意 {req.user_id} 的好友请求")
|
||||
|
||||
@ -8,6 +8,8 @@ from nonebot_plugin_alconna import (Alconna, Args, Field, MultiVar, UniMessage,
|
||||
on_alconna)
|
||||
from nonebot_plugin_alconna.uniseg import UniMsg, At, Reply
|
||||
|
||||
from konabot.common.nb.wzq_conflict import no_wzqbot_rule
|
||||
|
||||
async def download_img(url):
|
||||
resp = requests.get(url.replace("https://multimedia.nt.qq","http://multimedia.nt.qq")) # bim获取QQ的图片时避免SSLv3报错
|
||||
img_bytes = BytesIO()
|
||||
@ -42,7 +44,7 @@ gqrc = on_alconna(Alconna(
|
||||
missing_tips=lambda: "请输入你要转换为二维码的文字!"
|
||||
)],
|
||||
# UniMessage[]
|
||||
), use_cmd_start=True, use_cmd_sep=False, skip_for_unmatch=False, aliases={"生成二维码","genqrcode"})
|
||||
), use_cmd_start=True, use_cmd_sep=False, skip_for_unmatch=False, aliases={"生成二维码","genqrcode"}, rule=no_wzqbot_rule)
|
||||
|
||||
@gqrc.handle()
|
||||
async def _(saying: list):
|
||||
@ -66,4 +68,4 @@ async def _(saying: list):
|
||||
else:
|
||||
"""
|
||||
# genqr("\n".join(saying))
|
||||
await gqrc.send(await UniMessage().image(raw=genqr("\n".join(saying))).export())
|
||||
await gqrc.send(await UniMessage().image(raw=genqr("\n".join(saying))).export())
|
||||
|
||||
@ -2,7 +2,7 @@ from io import BytesIO
|
||||
from typing import Iterable, cast
|
||||
|
||||
from nonebot import on_message
|
||||
from nonebot_plugin_alconna import (Alconna, Args, Field, Image, MultiVar, Text,
|
||||
from nonebot_plugin_alconna import (Alconna, Args, Field, Image, MultiVar, Option, Text,
|
||||
UniMessage, UniMsg, on_alconna)
|
||||
|
||||
from konabot.common.nb.extract_image import PIL_Image, extract_image_from_message
|
||||
@ -143,12 +143,19 @@ async def _(msg: UniMsg, evt: Event, bot: Bot):
|
||||
|
||||
snaur_display_cmd = on_alconna(Alconna(
|
||||
"卵总展示",
|
||||
Option("--whiteness", Args["whiteness", float], alias=["-w"]),
|
||||
Option("--black-level", Args["black_level", float], alias=["-b"]),
|
||||
Option("--opacity", Args["opacity", float], alias=["-o"]),
|
||||
Option("--saturation", Args["saturation", float], alias=["-s"]),
|
||||
Args["image", Image | None],
|
||||
))
|
||||
|
||||
@snaur_display_cmd.handle()
|
||||
async def _(img: PIL_Image):
|
||||
img_processed = await draw_snaur_display(img)
|
||||
async def _(img: PIL_Image, whiteness: float = 0.0, black_level: float = 0.2,
|
||||
opacity: float = 0.8, saturation: float = 0.85):
|
||||
img_processed = await draw_snaur_display(
|
||||
img, whiteness, black_level, opacity, saturation,
|
||||
)
|
||||
img_data = BytesIO()
|
||||
img_processed.save(img_data, "PNG")
|
||||
await snaur_display_cmd.send(await UniMessage().image(raw=img_data).export())
|
||||
|
||||
@ -57,8 +57,14 @@ async def draw_cao_display(image: PIL.Image.Image):
|
||||
return await asyncio.to_thread(_draw_cao_display, image)
|
||||
|
||||
|
||||
def _draw_snaur_display(image: PIL.Image.Image):
|
||||
src = np.array(image.convert("RGB"))
|
||||
def _draw_snaur_display(
|
||||
image : PIL.Image.Image,
|
||||
whiteness : float = 0.0 ,
|
||||
black_level: float = 0.2 ,
|
||||
opacity : float = 0.8 ,
|
||||
saturation : float = 0.85 ,
|
||||
):
|
||||
src = np.array(image.convert("RGBA"))
|
||||
_h, _w = src.shape[:2]
|
||||
|
||||
if _w / _h < SNAUR_RATIO:
|
||||
@ -98,25 +104,38 @@ def _draw_snaur_display(image: PIL.Image.Image):
|
||||
borderValue=(0, 0, 0)
|
||||
)
|
||||
|
||||
result = PIL.Image.fromarray(warped, 'RGB').convert('RGBA')
|
||||
result = PIL.ImageChops.multiply(result, snaur_image_base)
|
||||
result = PIL.Image.fromarray(warped, 'RGBA')
|
||||
|
||||
r, g, b, a = result.split()
|
||||
a = a.point(lambda p: int(p * 0.8))
|
||||
f2 = lambda p: int(p * 0.8 + 0.2)
|
||||
a = a.point(lambda p: int(p * opacity))
|
||||
f2 = lambda p: int(
|
||||
((p / 255) ** (2 ** whiteness)) * 255 * (1 - black_level)
|
||||
+ 255 * black_level
|
||||
)
|
||||
r = r.point(f2)
|
||||
g = g.point(f2)
|
||||
b = b.point(f2)
|
||||
result = PIL.Image.merge('RGBA', (r, g, b, a))
|
||||
result = PIL.Image.alpha_composite(snaur_image_base, result)
|
||||
|
||||
enhancer = PIL.ImageEnhance.Color(result)
|
||||
result = enhancer.enhance(0.85)
|
||||
result = enhancer.enhance(saturation)
|
||||
|
||||
result = PIL.ImageChops.multiply(result, snaur_image_base)
|
||||
|
||||
result = PIL.Image.alpha_composite(snaur_image_base, result)
|
||||
result = PIL.Image.alpha_composite(result, snaur_image_top)
|
||||
return result
|
||||
|
||||
|
||||
async def draw_snaur_display(image: PIL.Image.Image) -> PIL.Image.Image:
|
||||
return await asyncio.to_thread(_draw_snaur_display, image)
|
||||
async def draw_snaur_display(
|
||||
image : PIL.Image.Image,
|
||||
whiteness : float = 0.0 ,
|
||||
black_level: float = 0.2 ,
|
||||
opacity : float = 0.8 ,
|
||||
saturation : float = 0.85 ,
|
||||
) -> PIL.Image.Image:
|
||||
return await asyncio.to_thread(
|
||||
_draw_snaur_display, image, whiteness, black_level,
|
||||
opacity, saturation,
|
||||
)
|
||||
|
||||
|
||||
@ -1,8 +1,10 @@
|
||||
import json, time
|
||||
|
||||
from nonebot.rule import Rule
|
||||
from nonebot_plugin_alconna import Alconna, Args, Field, MultiVar, on_alconna
|
||||
from nonebot.adapters.onebot.v11 import Event
|
||||
|
||||
from konabot.common.nb.wzq_conflict import no_wzqbot_rule
|
||||
from konabot.common.path import ASSETS_PATH, DATA_PATH
|
||||
|
||||
|
||||
@ -66,7 +68,7 @@ poll = on_alconna(Alconna(
|
||||
Args["saying", MultiVar(str, '+'), Field(
|
||||
missing_tips=lambda: "参数错误。用法:发起投票 <投票标题> <选项1> <选项2> ..."
|
||||
)],
|
||||
), use_cmd_start=True, use_cmd_sep=False, skip_for_unmatch=False, aliases={"发起投票","createpoll"})
|
||||
), use_cmd_start=True, use_cmd_sep=False, skip_for_unmatch=False, aliases={"发起投票","createpoll"}, rule=no_wzqbot_rule)
|
||||
@poll.handle()
|
||||
async def _(saying: list, event: Event):
|
||||
if (len(saying) < 3):
|
||||
@ -88,7 +90,7 @@ viewpoll = on_alconna(Alconna(
|
||||
Args["saying", MultiVar(str, '+'), Field(
|
||||
missing_tips=lambda: "请指定投票ID或标题!。用法:查看投票 <投票ID或标题>"
|
||||
)],
|
||||
), use_cmd_start=True, use_cmd_sep=False, skip_for_unmatch=False, aliases={"查看投票"})
|
||||
), use_cmd_start=True, use_cmd_sep=False, skip_for_unmatch=False, aliases={"查看投票"}, rule=no_wzqbot_rule)
|
||||
@viewpoll.handle()
|
||||
async def _(saying: list):
|
||||
# 参数,投票ID或者标题
|
||||
@ -130,7 +132,7 @@ vote = on_alconna(Alconna(
|
||||
Args["saying", MultiVar(str, '+'), Field(
|
||||
missing_tips=lambda: "参数错误。用法:投票 <投票ID/标题> <选项文本>"
|
||||
)],
|
||||
), use_cmd_start=True, use_cmd_sep=False, skip_for_unmatch=False, aliases={"投票","参与投票"})
|
||||
), use_cmd_start=True, use_cmd_sep=False, skip_for_unmatch=False, aliases={"投票","参与投票"}, rule=no_wzqbot_rule)
|
||||
@vote.handle()
|
||||
async def _(saying: list, event: Event):
|
||||
if (len(saying) < 2):
|
||||
|
||||
Reference in New Issue
Block a user