Skip to main content

轻量级恶魔轮盘插件

Project description

NoneBotPluginLogo

NoneBotPluginText

nonebot_plugin_emlp_Lightweight

✨ NoneBot 插件描述 ✨

这是一个轻量级的恶魔轮盘插件,没有平台适配限制,插件只提供基础交互逻辑,指令,反馈这些的交给用户自己去编写

📖 介绍

在原版恶魔轮盘的基础上加入了一些自己加入的道具

每回合开局3道具,后续4道具

三回合,前两回合3血,最后一回合4血(1血无法使用回复道具)

每次补充子弹,4~8颗,随机虚实子弹

道具说明

道具 出现的概率 作用
小刀 10.52% 实弹加1子弹伤害
华子 10.52% 回复1滴血
饮料 10.52% 退掉当前的子弹
手机 10.52% 得知从当前开始第n颗子弹的类型
骰子 5.26% 打乱剩余子弹的顺序
手铐 10.52% 禁止对手行动1回合
偷偷 10.52% 偷走对方指定道具并立即使用
过期药 10.52% 50%回复2滴血,50%扣除1滴血
放大镜 10.52% 得知当前的子弹的类型
逆转器 10.52% 反转当前子弹类型

💿 安装

使用 nb-cli 安装 在 nonebot2 项目的根目录下打开命令行, 输入以下指令即可安装
nb plugin install nonebot_plugin_emlp_Lightweight
使用包管理器安装 在 nonebot2 项目的插件目录下, 打开命令行, 根据你使用的包管理器, 输入相应的安装命令
pip
pip install nonebot_plugin_emlp_Lightweight

打开 nonebot2 项目根目录下的 pyproject.toml 文件, 在 [tool.nonebot] 部分追加写入

plugins = ["nonebot_plugin_emlp_Lightweight"]

示例代码

from nonebot import require
require("nonebot_plugin_emlp_Lightweight")
from nonebot_plugin_emlp_Lightweight import (
    game_run,
    game_action,
    game_info,
    end_game
)
from nonebot.adapters.onebot.v11 import MessageSegment,GroupMessageEvent,Event, PrivateMessageEvent,Message,Bot,FriendRequestEvent
from nonebot import on_command,on_request
from nonebot.params import CommandArg

async def check_user_QQ(uid1, uid2):
    (bot,) = nonebot.get_bots().values()
    try:
        await bot.send_private_msg(user_id=uid1, message='这是一条验证是否为好友的消息,无需在意')
        data1 = True
    except nonebot.adapters.onebot.v11.exception.ActionFailed:
        data1 = False
    try:
        await bot.send_private_msg(user_id=uid2, message='这是一条验证是否为好友的消息,无需在意')
        data2 = True
    except nonebot.adapters.onebot.v11.exception.ActionFailed:
        data2 = False
    return data1 , data2

game_run_gb = on_command("创建对局")
game_user_action_shoot = on_command("开枪")
game_user_action_use_props_toutou = on_command("使用偷偷",block=True)
game_user_action_use_props = on_command("使用")
game_user_info = on_command("信息")
game_end = on_command("结束对局")

def friend_event(event: Event):
    return isinstance(event, FriendRequestEvent)

friend_add_event=on_request(rule=friend_event)
@friend_add_event.handle()
async def friend_request_handle(bot: Bot, event: FriendRequestEvent):
    await bot.set_friend_add_request(flag=event.flag, approve=True)
    await bot.send_private_msg(user_id=event.user_id, message='已自动通过你的好友申请')


@game_run_gb.handle()
async def _(event: GroupMessageEvent):
    if len(at := event.original_message.include("at")) > 0:
        id = int(at[0].data["qq"])
        data1,data2 = await check_user_QQ(event.user_id,id)
        if data1 and data2:
            data = await game_run(event.user_id,id)
            if data.type:
                ##这边就是创建对局成功之后的反馈
            else:
                await game_run_gb.finish(data.msg) ###这个是创建对局请求被驳回之后的反馈
        else:
            if data1 == False and data2 == False:
                await game_run_gb.send(MessageSegment.at(event.user_id)+"和"+MessageSegment.at(id)+"请加我为好友再创建对局,否则将无法进行正常对局(因为非好友状态使用手机道具会失效)")
            elif data1 == False:
                await game_run_gb.send(MessageSegment.at(event.user_id)+"请加我为好友再创建对局,否则将无法进行正常对局(因为非好友状态使用手机道具会失效)")
            elif data2 == False:
                await game_run_gb.send(MessageSegment.at(id)+"请加我为好友再创建对局,否则将无法进行正常对局(因为非好友状态使用手机道具会失效)")

@game_user_action_shoot.handle()
async def _(event: GroupMessageEvent,args: Message = CommandArg()):
    if args.extract_plain_text() == '对己' or args.extract_plain_text() == 'me':
        target = 'self'
    elif args.extract_plain_text() == '对敌' or args.extract_plain_text() == 'enemy':
        target = 'opponent'   ##这边将射击的操作转为对应的目标参数
    emlp = await game_action(event.user_id,'shoot',target)   ##这边的'shoot'为行动类型
    if emlp.type:
        ##开枪事件结束后的反馈
        if emlp.status_up:
            ##这代表你要更新局内双方的状态版了
    else:
        await game_user_action_shoot.finish(str(emlp.msg))

@game_user_action_use_props_toutou.handle()
async def _(event: GroupMessageEvent,bot:Bot, args:Message =  CommandArg()):
    target = args.extract_plain_text()
    emlp = await game_action(event.user_id,'use_steal',target) ##这边的'use_steal'为行动类型,指代使用特殊道具偷偷 ,target为道具名称
    if emlp.type:
        if emlp.private_type:  ##判断是否需要私聊发送
            await bot.send_private_msg(user_id=event.user_id,message=MessageSegment.text('道具:'+target+'\n'+emlp.msg))
        else:
            await game_user_action_use_props.send(MessageSegment.text('道具:'+target+'\n'+emlp.msg))
        if emlp.status_up:
            ##这代表你要更新局内双方的状态版了
    else:
        await game_user_action_use_props.send(emlp.msg)

@game_user_action_use_props.handle()
async def _(event: GroupMessageEvent,bot:Bot, args:Message =  CommandArg()):
    target = args.extract_plain_text()
    emlp = await game_action(event.user_id,'use',target)
    if emlp.type:
        if emlp.private_type:
            await bot.send_private_msg(user_id=event.user_id,message=MessageSegment.text('道具:'+target+'\n'+emlp.msg ))
        else:
                await game_user_action_use_props.send(MessageSegment.text('道具:'+target+'\n'+emlp.msg))
        if emlp.status_up:
            ##这代表你要更新局内双方的状态版了
    else:
        await game_user_action_use_props.send(emlp.msg)

        
@game_user_info.handle()
async def _(event: GroupMessageEvent):
    emlp = await game_info(event.user_id)
    if emlp.type:
        ## 这里是获取双方信息的
    else:
        await game_user_info.send(emlp.msg)

@game_end.handle()
async def _(event: GroupMessageEvent):
    if len(at := event.original_message.include("at")) > 0:
        id = int(at[0].data["qq"])
        await end_game(event.user_id,id)
        await game_end.send(MessageSegment.text("游戏结束"))

具体的返回数据的类型

    user: list
    """事件参与者们的唯一标识(例如:参与者的QQ号)\n
    [int, int]
    """
    msg: str = None
    """触发该事件的结果的描述(慎用,通常无法作为判断使用,仅有反馈文本的用途,因为内容不统一)"""
    thebullet: str = None
    """事件中涉及的子弹类型,例如开枪,使用饮料,放大镜等"""
    first_change: int = None
    """在事件结束后先手者的唯一标识(例如:参与者的QQ号)"""
    hurt: int = None
    """
    事件中造成的伤害
        - 开枪事件 : 为扣血伤害
        - 治疗道具事件 : 正数为治疗伤害,负数为毒药伤害
    """
    props: dict = None
    """
    事件参与者们的道具信息\n
    {str(uid1) : [str(props1), props2, ...], str(uid2) : [str(props1), props2, ...]}
    """
    bullet: dict = None
    """
    事件参与者们的子弹信息\n
    {str(uid1) : [str(bullet1), bullet2, ...], str(uid2) : [bullet1, bullet2, ...]}
    """
    round: int = None
    """当前的回合"""
    first : int = None
    """当前回合先手者的唯一标识(例如:参与者的QQ号)"""
    type: bool = True
    """事件类型
        - False : 该事件请求驳回
        - True : 该事件请求通过
    """
    blood: dict = None
    """
    事件结束后参与者们的血量信息\n
    {str(uid1) : int(blood1), str(uid2) : int(blood2)}
    """
    status_up:bool = False
    """
    事件结束后是否需要重新更新子弹,道具等状态版
        - True : 需要更新
        - False : 不需要更新
    """
    use_phone: int = None
    """使用手机道具事件中,得知的第几颗子弹的子弹类型"""
    private_type: bool = False
    """
    事件结果是否为需要私聊反馈
        - True : 需要私聊反馈
        - False : 不需要私聊反馈
    """

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nonebot_plugin_emlp_lightweight-0.1.0.tar.gz (13.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nonebot_plugin_emlp_lightweight-0.1.0-py3-none-any.whl (15.9 kB view details)

Uploaded Python 3

File details

Details for the file nonebot_plugin_emlp_lightweight-0.1.0.tar.gz.

File metadata

File hashes

Hashes for nonebot_plugin_emlp_lightweight-0.1.0.tar.gz
Algorithm Hash digest
SHA256 73bee631b0561d36824a8b68d8e2733dceacbf1001d770d072f4bf2f728a2bee
MD5 f6633c09e9912efc439536dabd95fb20
BLAKE2b-256 4a3a205694ba56ebe8adf8c17d7053f0836f7342528c81bbc646e5a589d5bb81

See more details on using hashes here.

File details

Details for the file nonebot_plugin_emlp_lightweight-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for nonebot_plugin_emlp_lightweight-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 871ea447300aa274436decbfba1fb3dcdebc21b83ad6039e76450eb685d9c2a2
MD5 7d2288e0160f9dd67fb17cdfc043ee87
BLAKE2b-256 ff170640711b715b075cceff7f3b8ff30e6b4dd8a6dccd510b2c86c461c0ba1d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page