У меня есть этот usercript (см. Ниже), для http://multiplayerpiano.com.
В консоли сценарий работает как ожидалось, но при использовании в качестве скрипта для Tampermonkey он просто не делает этого.
Я не знаю почему. Команды работают нормально, но функция запрета между строками 21 и 30 ничего не делает. Ошибок не выдают, даже в подробном режиме. Помощь будет высоко оценена.
Имеет ли это отношение к window.pass1
в инструкции if, которая может быть просто pass1
без window
?
// ==UserScript==
// @name Josh MPP Room Locker
// @description Lock an MPP room and only allow entrance if the name is set to the passphrase
// @namespace Copyright 2018 SYZYGY-DEV333; licensed under Apache v2
// @version 0.1
// @author Josh (SYZYGY-DEV333)
// @match http://www.multiplayerpiano.com/*
// @match https://www.multiplayerpiano.com/*
// @match http://ourworldofpixels.com/piano/*
// @grant none
// ==/UserScript==
var pass = "passphrase";
var locked = "false";
function kickban(id, ms) {
MPP.client.sendArray([{m: "kickban", _id: id, ms: ms}]);
}
MPP.client.on("participant added", function(pp) {
if (locked == "true") {
if (MPP.client.channel.crown.userId == MPP.client.getOwnParticipant()._id) {
if (pp.name == window.pass) {
} else {
kickban(pp._id, 10000);
}
}
}
});
MPP.client.on('a', function(m) {
if (m.a == '-lock') {
if (m.p._id == MPP.client.getOwnParticipant()._id) {
window.locked = "true";
MPP.chat.send("Room Locked.");
}
} else if (m.a == '-unlock') {
if (m.p._id == MPP.client.getOwnParticipant()._id) {
window.locked = "false";
MPP.chat.send("Room Unlocked.");
}
} else if (m.a.startsWith('-setpass')) {
if (m.p._id == MPP.client.getOwnParticipant()._id) {
window.pass = m.a.slice(9);
MPP.chat.send("Passphrase set to: "+m.a.slice(9));
}
} else if (m.a == '-help') {
if (m.p._id == MPP.client.getOwnParticipant()._id) {
MPP.chat.send("[[ Josh MPP Room Locker v0.1 ]]");
MPP.chat.send("-lock -- Locks room.");
MPP.chat.send("-unlock -- Unlocks room.");
MPP.chat.send("-setpass [pass] -- sets a passphrase for entry.");
MPP.chat.send("All users must have this as their name when entering the room.");
MPP.chat.send("-help -- displays this help message.");
}
}
});
Три вещи:
window.pass
и window.locked
(всего 4 места) ошибочны. Вы устанавливаете их как vars в скрипте, а скрипт работает в другой области.MPP.client
определен/инициализирован.Таким образом, надежная задача - подождать, пока функции целевой страницы будут существовать до того, как будет запущен код, который зависит от них.
Вот ваш рефакторинг с вашими учетными записями, чтобы сделать все это:
// ==UserScript==
// @name Josh MPP Room Locker
// @description Lock an MPP room and only allow entrance if the name is set to the passphrase
// @namespace Copyright 2018 SYZYGY-DEV333; licensed under Apache v2
// @version 0.5
// @author Josh (SYZYGY-DEV333)
// @match http://www.multiplayerpiano.com/*
// @match https://www.multiplayerpiano.com/*
// @match http://ourworldofpixels.com/piano/*
// @grant none
// ==/UserScript==
var pass = "passphrase";
var locked = false;
var initTmr = setInterval ( () => {
if (typeof MPP === "object" && typeof MPP.client === "object") {
clearInterval (initTmr);
startMyCode ();
}
}, 200);
function kickban (id, ms) {
MPP.client.sendArray([{m: "kickban", _id: id, ms: ms}]);
}
function startMyCode () {
MPP.client.on("participant added", function(pp) {
if (locked === true) {
if (MPP.client.channel.crown.userId == MPP.client.getOwnParticipant()._id) {
if (pp.name == pass) {
} else {
kickban(pp._id, 10000);
}
}
}
});
MPP.client.on('a', function(m) {
if (m.a == '-lock') {
if (m.p._id == MPP.client.getOwnParticipant()._id) {
locked = true;
MPP.chat.send("Room Locked.");
}
} else if (m.a == '-unlock') {
if (m.p._id == MPP.client.getOwnParticipant()._id) {
locked = false;
MPP.chat.send("Room Unlocked.");
}
} else if (m.a.startsWith('-setpass')) {
if (m.p._id == MPP.client.getOwnParticipant()._id) {
pass = m.a.slice(9);
MPP.chat.send("Passphrase set to: "+m.a.slice(9));
}
} else if (m.a == '-help') {
if (m.p._id == MPP.client.getOwnParticipant()._id) {
MPP.chat.send("[[ Josh MPP Room Locker v0.1 ]]");
MPP.chat.send("-lock -- Locks room.");
MPP.chat.send("-unlock -- Unlocks room.");
MPP.chat.send("-setpass [pass] -- sets a passphrase for entry.");
MPP.chat.send("All users must have this as their name when entering the room.");
MPP.chat.send("-help -- displays this help message.");
}
}
});
}
pass
notpass1
- и еслиpass
ссылается наvar pass
в начале скрипта, то, возможно, вы пробовали? Ваш другой usercript работает нормально?window.locked
на только чтоlocked
... и (не важно, но лучше код) использоватьtrue
/false
вместо"true"
/"false"