猫史档案馆


组织管理系统代码v0.01

用户:全能代码师全能代码师查看:892 回复:16 评论:10 创建时间:2022-07-30T13:55:12


console.clear()
//屑全能熬夜打代码不容易,给个关注或者给个评论行不行啊行不行)
var owner = '芜能bug师';//填写你的名字,将会成为创建组织的唯一标识!非常重要!而且注意加上id=npc的模型!!!
async function createTable(entity = new Box3Entity) {/* 
    说一下,owner的格式:[创建人,管喵1,管喵2...],创建人格式:[name,userKey,joinTime(变成创建人/管喵时间,new Date())],array[[],[],[]...]
introduce=该组织的介绍等等,TEXT
checkList=审核列表,格式:[name,userKey,new Date],[[],[],[],[]]
settings=设置,里面有设置比如是否需要审核等等,


members=成员列表,里面有每个成员的信息,包括创建人和管喵[[name,userKey,joinTime(加入本组织时间,new Date()),
成员里的introduce(个人的简介),pos(分工,默认【成员】,只有创建人和管喵(可设置管喵不能任命)可以动)]]
log是日志文件,可以清除,在聊天输入$table.log = ''就行,不过这个可以帮助您记录事件!
*/
    world.say(`${entity.player.name}创建了一个新的集体!`)
    await db.sql`CREATE TABLE IF NOT EXISTS members (
        "id" PRIMARY KEY UNIQUE DEFAULT '逊',
        "name" TEXT DEFAULT '请填写组织名字',
        "owner" TEXT DEFAULT '',
        "introduce" TEXT DEFAULT '这个组织很懒,什么都没写哦~',
        "checkList" TEXT DEFAULT '',
        "settings" TEXT DEFAULT '',
        "members" TEXT DEFAULT '',
        "log" TEXT DEFAULT ''
    )`;
    table = {}
    table.owner = [[entity.player.name, entity.player.userKey, new Date()]]
    table.members = [[entity.player.name, entity.player.userKey, new Date(), '这个人很懒,啥都没写', '创建者']]
    table.checkList = []
    table.settings = { '加入需要审核': true, '管喵可以任命': true }
    table.name = '请填写组织名字'
    table.introduce = '这个组织很懒,什么都没有写哦~'
    table.log = `组织于${new Date()}由${entity.player.name}创建 \n`
    await saveTable()
    table = await getTableData()
};

async function saveTable() {
    try {
        if (table.name) {
            await db.sql`
        INSERT INTO "members" (
            "id",
            "name",
            "owner",
            "introduce",
            "checkList",
            "settings",
            "members",
            "log"
        ) VALUES (
            ${`逊`},
            ${table.name},
            ${JSON.stringify(table.owner)},
            ${table.introduce},
            ${JSON.stringify(table.checkList)},
            ${JSON.stringify(table.settings)},
            ${JSON.stringify(table.members)},
            ${table.log}
        )
        ON CONFLICT("id")
        DO UPDATE SET
        "name"=excluded."name",
        "owner"=excluded."owner",
        "introduce"=excluded."introduce",    
        "checkList"=excluded."checkList",
        "settings"=excluded."settings",
        "members"=excluded."members",
        "log"=excluded."log"
    `
        }
    } catch (e) {
        world.say(`表保存错误${e}`)
    }
}
async function dropTable() {
    await db.sql`DROP TABLE "members"`;
}

async function getTableData() {
    try {
        var members = await db.sql`SELECT * FROM members`
        members = members[0]
        try {
            members.owner = JSON.parse(members.owner);
            members.checkList = JSON.parse(members.checkList);
            members.settings = JSON.parse(members.settings);
            members.members = JSON.parse(members.members)
        } catch (e) {

        }
        return members
    } catch (e) {
        if (e.message.includes('no such table')) {
            console.log(`暂时不存在存档,等待创建人${owner}创建存档~`)
        } else {
            console.log(e)
        }
        return {}
    }

}
let table = {};
(async function () {
    table = await getTableData();
})();
global.table = table
setInterval(() => {
    if (table.name) {
        world.say('自动保存中');
        saveTable();
    }
}, 120000)/*每2分钟自动保存一次表 */
/*以上是全部的sql操作语句内容,下面是服务内容*/



world.onPlayerJoin(async ({ entity }) => {
    if (owner == entity.player.name && !table.name) {
        var result = await entity.player.dialog({
            type: Box3DialogType.SELECT,
            title: '创建表',
            content: `你想拥有一个属于自己的集体的管理系统吗?想要的话,就点击下方按钮吧!`,
            options: ['立即创建一个属于自己的表']
        });
        if (!result || result == null) {

        } else {
            createTable(entity)
            entity.player.directMessage(`
            很好,你已经创建了一个属于自己的管理系统,接下来就去npc那里进行操作吧,比如填写,审核,任命等操作~
            `)
        }
    }
    await sleep(1000);
    for (let i in table.members) {
        if (table.members[i][1] == entity.player.userKey) {
            table.members[i][0] = entity.player.name
        }
    }
    for (let i in table.owner) {
        if (table.owner[i][1] == entity.player.userKey) {
            table.owner[i][0] = entity.player.name
        }
    }
    for (let i in table.checkList) {
        if (table.checkList[i][1] == entity.player.userKey) {
            table.owner[i][0] = entity.player.name
        }
    }
})
async function selectDialog(entity = new Box3Entity, title = '', content = '', options = []) {
    return await entity.player.dialog({ type: Box3DialogType.SELECT, title: title, content: content, options: options })
}
world.onChat(({ entity, message }) => {
    if (entity.player.name == owner) {
        if (message.startsWith('$')) {
            try {
                world.say(`~>${eval(message.slice(1))}`)
            } catch (e) {
                world.say(e)
            }
        }
    }
})
let npc = world.querySelector('#npc')
npc.enableInteract = true;
npc.interactRadius = 5;
npc.interactHint = 'npc'
npc.onInteract(async ({ entity }) => {
    if (!table.name) return entity.player.directMessage(`${owner}暂时没有创建表~(owner可以更改在代码前几行~)`)
    var options = ['成员查看/管理']
    for (let i of table.members) {
        if (i[1] == entity.player.userKey) {/*在这个组织里 */
            for (let i of table.owner) {
                if (i[1] == entity.player.userKey) { /*是这个组织管理者*/
                    options.push('管理组织操作...')
                }
            }
            options.push('退出/解散组织')
            options.push('更改自己的个性签名')
        } else {
        }
    }
    if (options.length == 1) {
        options.push('申请加入组织')
    }
    options.push('取消')
    var result = await selectDialog(entity, `npc`, `
    组织${table.name}的简介:${table.introduce}`, options)
    if (!result || result == null) {
        return;
    }
    if (result.value == '更改自己的个性签名') {
        var result = await entity.player.dialog({ type: Box3DialogType.INPUT, title: '更改个性签名', content: '请输入个性签名,最多50字', confirmText: '确认' })
        if (!result || result == null) {
            return;
        }
        if (result.length > 50) {
            return entity.player.directMessage('超过了50字!');
        }
        for (let i in table.members) {
            if (table.members[i][1] == entity.player.userKey) {
                table.members[i][3] = result
            }
        }
        entity.player.directMessage('更改成功!')
    }

    if (result.value == '成员查看/管理') {
        var members = table.members
        for (let i = 0; i < 100; i++) {
            var nameList = []
            for (let i of table.members) {
                nameList.push(i[0])
            }
            var result = await selectDialog(entity, '成员查看/管理', '请选择成员', nameList);
            if (!result || result == null) {
                return;
            }
            if (table.members != members) {
                return entity.player.directMessage('列表内成员被改动!')
            }
            var player = table.members[result.index]
            var options = []
            for (let i in table.owner) {
                if (table.owner[i][1] == entity.player.userKey) {
                    if (i == 0) {
                        options = ['踢出组织', '任命管喵', '个性化任命']
                    } else {
                        options = ['踢出组织']
                        if (settings['管喵可以任命'] == true) {
                            options.push('个性化任命')
                        }
                    }
                }
            }
            for (let i = 0; i < 100; i++) {
                var result1 = await selectDialog(entity, '成员查看/管理', `
            名字:${player[0]},
            userKey(唯一识别码):${player[1]},
            加入时间:${player[2]},
            个性签名:${player[3]},
            职位:${player[4]},
            `, options);
                if (options.length <= 0) break;
                if (!result1 || result1 == null) break;
                if (table.members != members) { entity.player.directMessage('成员列表被改动!'); return; }
                if (result1.value == '踢出组织') {
                    var level = 0;/*设成员等级为0 */
                    var myLevel = 0;
                    for (let i in table.owner) {
                        if (table.owner[i][1] == player[1]) {
                            if (i == 0) {
                                level = 2;
                            } else {
                                level = 1;
                            }
                        }
                        if (table.owner[i][1] == entity.player.userKey) {
                            if (i == 0) {
                                myLevel = 2;
                            } else {
                                myLevel = 1;
                            }
                        }
                    }
                    if (myLevel == 1 && level == 0) {

                    } else if (myLevel == 2 && level < 2) {

                    } else {
                        entity.player.directMessage('你无权踢出此人!');
                        continue;
                    }
                    let membersList = []
                    for (let i of table.members) {
                        if (i[1] != player[1]) {
                            membersList.push(i)
                        }
                    }
                    table.members = membersList
                    let ownerList = []
                    for (let i of table.owner) {
                        if (i[1] != player[1]) {
                            ownerList.push(i)
                        }
                    }
                    table.owner = ownerList
                    table.log += `${entity.player.name}于${new Date()}从组织中踢出了${player[0]}`
                    world.say(`${entity.player.name}从组织中踢出了${player[0]}!`)
                    await saveTable()
                    /*管理可以踢出任意普通成员,创建者可以踢出管理和普通成员 */
                } else if (result1.value == '任命管喵') {
                    var a = 0;
                    for (let i of table.owner) {
                        if (i[1] == player[1]) {
                            a = 1;
                            break;
                        }
                    }
                    if (a == 1) {
                        return entity.player.directMessage('此人已经是管理者!');
                    }
                    table.owner.push(player[0], player[1], new Date())
                    world.say(`恭喜${player[0]}成为管喵!`)
                    table.log += `${player[0]}于${new Date()}成为管喵 \n`
                    await saveTable()
                } else if (result1.value == '个性化任命') {
                    var rm = await entity.player.dialog({
                        type: Box3DialogType.INPUT,
                        title: '个性化任命',
                        content: '请输入个性化任命(族长,军长都可以用(别违规!))',
                        confirmText: '确定',
                    })
                    if (members != table.members) return entity.player.directMessage('成员列表被改动!')
                    if (!rm || rm == null) {
                        continue;
                    }
                    members[result.index][4] = rm
                    await saveTable()
                    world.say(`${entity.player.name}给${player[0]}任命为${rm}!`)
                }
            }
        }
    }

    if (result.value == '管理组织操作...') {
        var options = []
        var num = 0;
        for (let i of table.owner) {
            if (i[1] == entity.player.userKey) {
                options.push('审核成员')
                if (num == 0) {/*创建者在第一个,否则都排在后面 */
                    options.push('编辑组织简介');
                    options.push('编辑组织名字');
                    options.push('查看日志文件')
                    options.push('开/关审核加入');
                    options.push('开/关管喵可以任命');
                    options.push('把创建人职位转让给管喵,自己变成管喵')
                }
            }
            num++
        }
        var result = await selectDialog(entity, `管理组织的操作`, `
        这里是管理组织的操作,可以进行一些创建者/管喵特有的权利~
        `, options)
        if (options.length <= 0) return;
        if (!result || result == null) {
            return;
        }
        if (result.value.includes('创建人职位转让给管喵')) {
            var nameList = []
            for (let i of ownerList) {
                nameList.push(i[0]);
            }
            nameList.shift()
            var result = await selectDialog(entity, '转让创建人', '请选转让对象~', nameList);
            if (nameList.length <= 0) {
                return;
            }
            if (!result || result == null) {
                return;
            }
            var player = ownerList[result.index]
            if (player[0] != result.value) {
                return entity.player.directMessage('转让出现bug!请重试!');
            }
            table.owner.shift()
            table.owner = [[player[0], player[1], new Date()]].concat(table.owner)
            table.owner.push([entity.player.name, entity.player.userKey, new Date()])
            world.say(`${entity.player.name}把创建人席位移交给了${player[0]}!`)
            table.log += `${entity.player.name}于${new Date()}把创建人席位移交给了${player[0]}!\n`
        }
        if (result.value == '开/关审核加入') {
            table.settings['加入需要审核'] = !table.settings['加入需要审核']
            entity.player.directMessage(`需要审核:${table.settings['加入需要审核']}`)
        }
        if (result.value == '开/关管喵可以任命') {
            table.settings['管喵可以任命'] = !table.settings['管喵可以任命']
            entity.player.directMessage(`管喵可以任命:${table.settings['管喵可以任命']}`)
        }
        if (result.value == '查看日志文件') {
            selectDialog(entity, '查看日志文件', table.log)
        }
        if (result.value == '编辑组织简介') {
            var result = await entity.player.dialog({
                type: Box3DialogType.INPUT,
                title: '编辑组织简介',
                content: '请输入组织简介(最好别超过100字)',
                confirmText: '确定',
            })
            if (!result || result == null) {
                return;
            }
            table.introduce = result
            table.log += `${entity.player.name}于${new Date()}编辑了组织简介为${result}\n`
        }
        if (result.value == '编辑组织名字') {
            var result = await entity.player.dialog({
                type: Box3DialogType.INPUT,
                title: '编辑组织名字',
                content: '请输入组织名字(最好别超过10字)',
                confirmText: '确定'
            })
            if (!result || result == null) {
                return;
            }
            table.name = result
            table.log += `${entity.player.name}于${new Date()}编辑了组织名字为${result}\n`
        }
        if (result.value == '审核成员') {
            for (let i = 0; i < 100; i++) {
                var members = table.checkList
                var nameList = []
                for (let i of table.checkList) {
                    nameList.push(i[0])
                }
                var result = await selectDialog(entity, '审核成员', '以下是申请列表', nameList)
                if (!result || result == null) {
                    return;
                }
                if (nameList.length <= 0) return;
                if (members != table.checkList) return entity.player.directMessage('审核成员列表被改动!')

                var player = table.checkList[result.index];
                world.say(`${entity.player.name}同意了来自${player[0]}的审核!ta的提交审核时间:${player[2]}!欢迎新成员!`)
                table.log += `${entity.player.name}于${new Date()}审核通过${player[0]}的审核,其提交审核时间${player[2]} \n`
                var checkList = []
                for (let i of table.checkList) {
                    if (i[1] != player[1]) {
                        checkList.push(i)
                    }
                }
                table.checkList = checkList;
                table.members.push([player[0], player[1], new Date(), '这个人很懒,什么都没有写哦~', '成员'])
                saveTable()
            }
            saveTable()
        }
        return;
    }
    if (result.value == '退出/解散组织') {
        var myLevel = 0;
        for (let i in table.owner) {
            if (table.owner[i][1] == entity.player.userKey) {
                if (i == 0) {
                    myLevel = 2;
                } else {
                    myLevel = 1;
                }
            }
        }
        var result = await selectDialog(entity, '退出/解散组织', `
        请问您是否真的想好要退出这个组织?
        ${myLevel == 1 ? '你在这个组织担任管喵,退出后管喵就会不复存在!' : ''}
        ${myLevel == 2 ? '你在这个组织担任创建人!退出后将会解散组织!!!!!请慎重考虑!!!可以考虑转让创建人后再退出!' : ''}
        `, ['是', '否']);
        if (!result || result == null) {
            return;
        }
        if (result.index == 1) return;
        var ownerList = []
        for (let i of table.owner) {
            if (i[1] != entity.player.userKey) {
                ownerList.push(i)
            }
        }
        table.owner = ownerList;
        var membersList = []
        for (let i of table.members) {
            if (i[1] != entity.player.userKey) {
                membersList.push(i)
            }
        }
        table.members = membersList
        if (myLevel == 2) {
            dropTable()
            world.say('组织解散了!')
            table.log += `${entity.player.name}于${new Date()}解散了组织`
            world.say(`日志文件:${table.log}请收好`)
            await sleep(500)
            eval('for(;;){}')
        }
        return;
    }
    if (result.value) {
        if (result.value.includes('申请加入组织')) {
            if (table.settings['加入需要审核'] == true) {
                for (let i of table.checkList) {
                    if (i[1] == entity.player.userKey) {
                        return entity.player.directMessage(`请勿重复提交审核!`)
                    }
                }
                table.checkList.push([entity.player.name, entity.player.userKey, new Date()])
                entity.player.directMessage('审核内容已提交!')
                table.log += `${entity.player.name}于${new Date()}提交了审核申请`
                await saveTable()
            } else {
                table.members.push([entity.player.name, entity.player.userKey, new Date(), '这个人很懒,什么都没有写哦~', '成员'])
                world.say(`${entity.player.name}加入组织成功!`)
                table.log += `${entity.player.name}于${new Date()}加入了组织 \n`
                await saveTable()
            }
            return;
        }
    }
})



回复

上一页第 1 页 / 共 1 页下一页
DebugDynamoDebugDynamo

沙发*114514

 

点赞0


评论

这么臭的沙发有必要存在吗?()


DebugDynamoDebugDynamo

——————————

沙发占领卡————()

()——————

可凭借此卡强制占领沙发|

无需作者认证————|||

————————————

点赞0


评论


全能代码师全能代码师

喵d

点赞1


评论


AlcalaAlcala

qpzc

点赞0


评论


屑sun屑sun

龙椅!

点赞0


评论


全能代码师全能代码师

喵d

点赞0


评论


IaeaIaea

dddd

点赞0


评论


还是那个小橙子丫还是那个小橙子丫

imgsrc="https://static.cod喵/emoji/codemao/%E7%BC%96%E7%A8%8B%E7%8C%AB_%E7%82%B9%E8%B5%9E.gif"alt="emotion_编程猫_点赞"

点赞0


评论


全能代码师全能代码师

d d d

点赞0


评论


芜湖咸鱼芜湖咸鱼

所以说有什么用呢(

点赞0


评论

我可以做地图有用()我少许改一改就是多组织管理()


神岛的天下我有神岛的天下我有

报错了!!!!

点赞0


评论


DDguanDDguan

可以做像江湖那样的门派系统吗()()

点赞0


评论


GZ006GZ006

所以只能有一个组织?

点赞0


评论

是的

az 我还以为可以有很多个……


屑怪盗屑怪盗

喵d

点赞0


评论


145a145a

时隔0.8年,依然nb

点赞0


评论

emm现在版本还做了那个

就是加分制度

芜能,能帮忙么

可以(以后有事情直接说明白就行了()否则还要再花个时间看哈)

啥事a

进一下


暗夜极光暗夜极光

顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶emotion_编程猫_加油emotion_编程猫_嗨起来emotion_编程猫_厉害了emotion_星能猫_yeemotion_雷电猴_围观

点赞0


评论