用户:
全能代码师查看:10 回复: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;
}
}
})
还是那个小橙子丫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
评论