Spaces:
Running
Running
; | |
/** | |
* The server port - the port to run Pokemon Showdown under | |
* | |
* @type {number} | |
*/ | |
exports.port = 7860; | |
/** | |
* The server address - the address at which Pokemon Showdown should be hosting | |
* This should be kept set to 0.0.0.0 unless you know what you're doing. | |
* | |
* @type {string} | |
*/ | |
exports.bindaddress = '0.0.0.0'; | |
/** | |
* workers - the number of networking child processes to spawn | |
* This should be no greater than the number of threads available on your | |
* server's CPU. If you're not sure how many you have, you can check from a | |
* terminal by running: | |
* | |
* $ node -e "console.log(require('os').cpus().length)" | |
* | |
* Using more workers than there are available threads will cause performance | |
* issues. Keeping a couple threads available for use for OS-related work and | |
* other PS processes will likely give you the best performance, if your | |
* server's CPU is capable of multithreading. If you don't know what any of | |
* this means or you are unfamiliar with PS' networking code, leave this set | |
* to 1. | |
*/ | |
exports.workers = 1; | |
/** | |
* wsdeflate - compresses WebSocket messages | |
* Toggles use of the Sec-WebSocket-Extension permessage-deflate extension. | |
* This compresses messages sent and received over a WebSocket connection | |
* using the zlib compression algorithm. As a caveat, message compression | |
* may make messages take longer to procress. | |
* @type {AnyObject?} | |
*/ | |
exports.wsdeflate = { | |
level: 5, | |
memLevel: 8, | |
strategy: 0, | |
noContextTakeover: true, | |
requestNoContextTakeover: true, | |
maxWindowBits: 15, | |
requestMaxWindowBits: 15, | |
}; | |
/** | |
* ssl - support WSS, allowing you to access through HTTPS | |
* The client requires port 443, so if you use a different port here, | |
* it will need to be forwarded to 443 through iptables rules or | |
* something. | |
* @type {{port: number, options: {key: string, cert: string}} | null} | |
*/ | |
// exports.ssl = { | |
// port: 443, | |
// options: { | |
// key: './config/ssl/privkey.pem', | |
// cert: './config/ssl/fullchain.pem', | |
// }, | |
// }; | |
/* | |
// example: | |
exports.ssl = { | |
port: 443, | |
options: { | |
key: './config/ssl/privkey.pem', | |
cert: './config/ssl/fullchain.pem', | |
}, | |
}; | |
*/ | |
/* | |
Main's SSL deploy script from Let's Encrypt looks like: | |
cp /etc/letsencrypt/live/sim.psim.us/privkey.pem ~user/Pokemon-Showdown/config/ssl/ | |
cp /etc/letsencrypt/live/sim.psim.us/fullchain.pem ~user/Pokemon-Showdown/config/ssl/ | |
chown user:user ~user/Pokemon-Showdown/config/ssl/privkey.pem | |
chown user:user ~user/Pokemon-Showdown/config/ssl/fullchain.pem | |
*/ | |
/** | |
* proxyip - proxy IPs with trusted X-Forwarded-For headers | |
* This can be either false (meaning not to trust any proxies) or an array | |
* of strings. Each string should be either an IP address or a subnet given | |
* in CIDR notation. You should usually leave this as `false` unless you | |
* know what you are doing | |
* @type {false | string[]}. | |
*/ | |
exports.proxyip = false; | |
exports.trustedDomains = [ | |
'localhost', | |
'pshowdown-pokemon-server.hf.space', | |
]; | |
exports.servedomain = "pshowdown-pokemon-server.hf.space"; | |
/** | |
* Various debug options | |
* | |
* ofe[something] | |
* ============================================================================ | |
* | |
* Write heapdumps if that processs run out of memory. | |
* | |
* If you wish to enable this, you will need to install node-oom-heapdump: | |
* | |
* $ npm install --no-save node-oom-heapdump | |
* | |
* We don't install it by default because it's super flaky and frequently | |
* crashes the installation process. | |
* | |
* You might also want to signal processes to put them in debug mode, for | |
* access to on-demand heapdumps. | |
* | |
* kill -s SIGUSR1 [pid] | |
* | |
* debug[something]processes | |
* ============================================================================ | |
* | |
* Attach a `debug` property to `ProcessWrapper`, allowing you to see the last | |
* message it received before it hit an infinite loop. | |
* | |
* For example: | |
* | |
* >> ProcessManager.processManagers[4].processes[0].debug | |
* << "{"tar":"spe=60,all,!lc,!nfe","cmd":"dexsearch","canAll":true,"message":"/ds spe=60,all,!lc,!nfe"}" | |
*/ | |
exports.ofemain = false; | |
exports.ofesockets = false; | |
exports.debugsimprocesses = true; | |
exports.debugvalidatorprocesses = true; | |
exports.debugdexsearchprocesses = true; | |
/** | |
* Pokemon of the Day - put a pokemon's name here to make it Pokemon of the Day | |
* The PotD will always be in the #2 slot (not #1 so it won't be a lead) | |
* in every Random Battle team. | |
* | |
* @type {ID} | |
*/ | |
exports.potd = ''; | |
/** | |
* crash guard - write errors to log file instead of crashing | |
* This is normally not recommended - if Node wants to crash, the | |
* server needs to be restarted | |
* However, most people want the server to stay online even if there is a | |
* crash, so this option is provided | |
*/ | |
exports.crashguard = true; | |
/** | |
* login server data - don't forget the http:// and the trailing slash | |
* This is the URL of the user database and ladder mentioned earlier. | |
* Don't change this setting - there aren't any other login servers right now | |
*/ | |
exports.loginserver = 'http://play.pokemonshowdown.com/'; | |
exports.loginserverkeyalgo = "RSA-SHA1"; | |
exports.loginserverpublickeyid = 4; | |
exports.loginserverpublickey = `-----BEGIN PUBLIC KEY----- | |
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzfWKQXg2k8c92aiTyN37 | |
dl76iW0aeAighgzeesdar4xZT1A9yzLpj2DgR8F8rh4R32/EVOPmX7DCf0bYWeh3 | |
QttP0HVKKKfsncJZ9DdNtKj1vWdUTklH8oeoIZKs54dwWgnEFKzb9gxqu+z+FJoQ | |
vPnvfjCRUPA84O4kqKSuZT2qiWMFMWNQPXl87v+8Atb+br/WXvZRyiLqIFSG+ySn | |
Nwx6V1C8CA1lYqcPcTfmQs+2b4SzUa8Qwkr9c1tZnXlWIWj8dVvdYtlo0sZZBfAm | |
X71Rsp2vwEleSFKV69jj+IzAfNHRRw+SADe3z6xONtrJOrp+uC/qnLNuuCfuOAgL | |
dnUVFLX2aGH0Wb7ZkriVvarRd+3otV33A8ilNPIoPb8XyFylImYEnoviIQuv+0VW | |
RMmQlQ6RMZNr6sf9pYMDhh2UjU11++8aUxBaso8zeSXC9hhp7mAa7OTxts1t3X57 | |
72LqtHHEzxoyLj/QDJAsIfDmUNAq0hpkiRaXb96wTh3IyfI/Lqh+XmyJuo+S5GSs | |
RhlSYTL4lXnj/eOa23yaqxRihS2MT9EZ7jNd3WVWlWgExIS2kVyZhL48VA6rXDqr | |
Ko0LaPAMhcfETxlFQFutoWBRcH415A/EMXJa4FqYa9oeXWABNtKkUW0zrQ194btg | |
Y929lRybWEiKUr+4Yw2O1W0CAwEAAQ== | |
-----END PUBLIC KEY----- | |
`; | |
/** | |
* routes - where Pokemon Showdown is hosted. | |
* Don't change this setting - there aren't any other options right now | |
*/ | |
exports.routes = { | |
root: 'pokemonshowdown.com', | |
client: 'play.pokemonshowdown.com', | |
dex: 'dex.pokemonshowdown.com', | |
replays: 'replay.pokemonshowdown.com', | |
}; | |
/** | |
* crashguardemail - if the server has been running for more than an hour | |
* and crashes, send an email using these settings, rather than locking down | |
* the server. Uncomment this definition if you want to use this feature; | |
* otherwise, all crashes will lock down the server. If you wish to enable | |
* this setting, you will need to install nodemailer, as it is not installed | |
* by default: | |
* $ npm install nodemailer | |
* @type {AnyObject?} | |
*/ | |
exports.crashguardemail = null; | |
/* exports.crashguardemail = { | |
options: { | |
host: 'mail.example.com', | |
port: 465, | |
secure: true, | |
auth: { | |
user: '[email protected]', | |
pass: 'password' | |
} | |
}, | |
from: '[email protected]', | |
to: '[email protected]', | |
subject: 'Pokemon Showdown has crashed!' | |
}; */ | |
/** | |
* basic name filter - removes characters used for impersonation | |
* The basic name filter removes Unicode characters that can be used for impersonation, | |
* like the upside-down exclamation mark (looks like an i), the Greek omicron (looks | |
* like an o), etc. Disable only if you need one of the alphabets it disables, such as | |
* Greek or Cyrillic. | |
*/ | |
exports.disablebasicnamefilter = false; | |
/** | |
* allowrequestingties - enables the use of `/offerdraw` and `/acceptdraw` | |
*/ | |
exports.allowrequestingties = true; | |
/** | |
* report joins and leaves - shows messages like "<USERNAME> joined" | |
* Join and leave messages are small and consolidated, so there will never | |
* be more than one line of messages. | |
* If this setting is set to `true`, it will override the client-side | |
* /hidejoins configuration for users. | |
* This feature can lag larger servers - turn this off if your server is | |
* getting more than 80 or so users. | |
*/ | |
exports.reportjoins = true; | |
/** | |
* report joins and leaves periodically - sends silent join and leave messages in batches | |
* This setting will only be effective if `reportjoins` is set to false, and users will | |
* only be able to see the messages if they have the /showjoins client-side setting enabled. | |
* Set this to a positive amount of milliseconds if you want to enable this feature. | |
*/ | |
exports.reportjoinsperiod = 0; | |
/** | |
* report battles - shows messages like "OU battle started" in the lobby | |
* This feature can lag larger servers - turn this off if your server is | |
* getting more than 160 or so users. | |
* @type {boolean | string[] | string} | |
*/ | |
exports.reportbattles = true; | |
/** | |
* report joins and leaves in battle - shows messages like "<USERNAME> joined" in battle | |
* Set this to false on large tournament servers where battles get a lot of joins and leaves. | |
* Note that the feature of turning this off is deprecated. | |
*/ | |
exports.reportbattlejoins = true; | |
/** | |
* notify staff when users have a certain amount of room punishments. | |
* Setting this to a number greater than zero will notify staff for everyone with | |
* the required amount of room punishments. | |
* Set this to 0 to turn the monitor off. | |
*/ | |
exports.monitorminpunishments = 3; | |
/** | |
* Turns off all time-based throttles - rename, challenges, laddering, etc. | |
*/ | |
exports.nothrottle = false; | |
/** | |
* Removes all ip-based alt checking. | |
*/ | |
exports.noipchecks = false; | |
/** | |
* controls the behavior of the /battlesearch command | |
* | |
* valid values are: | |
* - true: disables battlesearch entirely | |
* - false: enables the node.js /battlesearch | |
* (uses either node fs or ripgrep for searching) | |
* - 'psbattletools': defaults to the psbattletools /battlesearch (normally available as /alternatebattlesearch) | |
* (uses psbattletools, which must be installed, for searching) | |
* | |
* @type {boolean | 'psbattletools'} | |
*/ | |
exports.nobattlesearch = false; | |
/** | |
* allow punishmentmonitor to lock users with multiple roombans. | |
* When set to `true`, this feature will automatically lock any users with three or more | |
* active roombans, and notify the staff room. | |
* Note that this requires punishmentmonitor to be enabled, and therefore requires the `monitorminpunishments` | |
* option to be set to a number greater than zero. If `monitorminpunishments` is set to a value greater than 3, | |
* the autolock will only apply to people who pass this threshold. | |
*/ | |
exports.punishmentautolock = false; | |
/** | |
* restrict sending links to autoconfirmed users only. | |
* If this is set to `true`, only autoconfirmed users can send links to either chatrooms or other users, except for staff members. | |
* This option can be used if your server has trouble with spammers mass PMing links to users, or trolls sending malicious links. | |
*/ | |
exports.restrictLinks = false; | |
/** | |
* whitelist - prevent users below a certain group from doing things | |
* For the modchat settings, false will allow any user to participate, while a string | |
* with a group symbol will restrict it to that group and above. The string | |
* 'autoconfirmed' is also supported for chatmodchat and battlemodchat, to restrict | |
* chat to autoconfirmed users. | |
* This is usually intended to be used as a whitelist feature - set these to '+' and | |
* voice every user you want whitelisted on the server. | |
/** | |
* chat modchat - default minimum group for speaking in chatrooms; changeable with /modchat | |
* @type {false | string} | |
*/ | |
exports.chatmodchat = false; | |
/** | |
* battle modchat - default minimum group for speaking in battles; changeable with /modchat | |
* @type {false | AuthLevel} | |
*/ | |
exports.battlemodchat = false; | |
/** | |
* PM modchat - minimum group for sending private messages or challenges to other users | |
* @type {false | AuthLevel} | |
*/ | |
exports.pmmodchat = false; | |
/** | |
* ladder modchat - minimum group for laddering | |
* @type {false | GroupSymbol} | |
*/ | |
exports.laddermodchat = false; | |
/** | |
* forced timer - force the timer on for all battles | |
* Players will be unable to turn it off. | |
* This setting can also be turned on with the command /forcetimer. | |
* | |
* @type {boolean} | |
*/ | |
exports.forcetimer = false; | |
/** | |
* force register ELO - unregistered users cannot search for ladder battles | |
* in formats where their ELO is at or above this value. | |
* @type {false | number} | |
*/ | |
exports.forceregisterelo = false; | |
/** | |
* backdoor - allows Pokemon Showdown system operators to provide technical | |
* support for your server | |
* This backdoor gives system operators (such as Zarel) console admin | |
* access to your server, which allow them to provide tech support. This | |
* can be useful in a variety of situations: if an attacker attacks your | |
* server and you are not online, if you need help setting up your server, | |
* etc. If you do not trust Pokemon Showdown with admin access, you should | |
* disable this feature. | |
*/ | |
exports.backdoor = true; | |
/** | |
* List of IPs and user IDs with dev console (>> and >>>) access. | |
* The console is incredibly powerful because it allows the execution of | |
* arbitrary commands on the local computer (as the user running the | |
* server). If an account with the console permission were compromised, | |
* it could possibly be used to take over the server computer. As such, | |
* you should only specify a small range of trusted IPs and users here, | |
* or none at all. By default, only localhost can use the dev console. | |
* In addition to connecting from a valid IP, a user must *also* have | |
* the `console` permission in order to use the dev console. | |
* Setting this to an empty array ([]) will disable the dev console. | |
*/ | |
exports.consoleips = ['127.0.0.1']; | |
/** | |
* Whether to watch the config file for changes. If this is enabled, | |
* then the config.js file will be reloaded when it is changed. | |
* This can be used to change some settings using a text editor on | |
* the server. | |
*/ | |
exports.watchconfig = true; | |
/** | |
* logchat - whether to log chat rooms. | |
*/ | |
exports.logchat = false; | |
/** | |
* logchallenges - whether to log challenge battles. Useful for tournament servers. | |
*/ | |
exports.logchallenges = false; | |
/** | |
* loguserstats - how often (in milliseconds) to write user stats to the | |
* lobby log. This has no effect if `logchat` is disabled. | |
*/ | |
exports.loguserstats = 1000 * 60 * 10; // 10 minutes | |
/** | |
* validatorprocesses - the number of processes to use for validating teams | |
* simulatorprocesses - the number of processes to use for handling battles | |
* You should leave both of these at 1 unless your server has a very large | |
* amount of traffic (i.e. hundreds of concurrent battles). | |
*/ | |
exports.validatorprocesses = 1; | |
exports.simulatorprocesses = 1; | |
/** | |
* inactiveuserthreshold - how long a user must be inactive before being pruned | |
* from the `users` array. The default is 1 hour. | |
*/ | |
exports.inactiveuserthreshold = 1000 * 60 * 60; | |
/** | |
* autolockdown - whether or not to automatically kill the server when it is | |
* in lockdown mode and the final battle finishes. This is potentially useful | |
* to prevent forgetting to restart after a lockdown where battles are finished. | |
* | |
* @type {boolean} | |
*/ | |
exports.autolockdown = true; | |
/** | |
* noguestsecurity - purely for development servers: allows logging in without | |
* a signed token: simply send `/trn [USERNAME]`. This allows using PS without | |
* a login server. | |
* | |
* Logging in this way will make you considered an unregistered user and grant | |
* no authority. You cannot log into a trusted (g+/r%) user account this way. | |
*/ | |
exports.noguestsecurity = false; | |
/** | |
* tourroom - specify a room to receive tournament announcements (defaults to | |
* the room 'tournaments'). | |
* tourannouncements - announcements are only allowed in these rooms | |
* tourdefaultplayercap - a set cap of how many players can be in a tournament | |
* ratedtours - toggles tournaments being ladder rated (true) or not (false) | |
*/ | |
exports.tourroom = ''; | |
/** @type {string[]} */ | |
exports.tourannouncements = [/* roomids */]; | |
exports.tourdefaultplayercap = 0; | |
exports.ratedtours = false; | |
/** | |
* appealurl - specify a URL containing information on how users can appeal | |
* disciplinary actions on your section. You can also leave this blank, in | |
* which case users won't be given any information on how to appeal. | |
*/ | |
exports.appealurl = ''; | |
/** | |
* repl - whether repl sockets are enabled or not | |
* replsocketprefix - the prefix for the repl sockets to be listening on | |
* replsocketmode - the file mode bits to use for the repl sockets | |
*/ | |
exports.repl = true; | |
exports.replsocketprefix = './logs/repl/'; | |
exports.replsocketmode = 0o600; | |
/** | |
* disablehotpatchall - disables `/hotpatch all`. Generally speaking, there's a | |
* pretty big need for /hotpatch all - convenience. The only advantage any hotpatch | |
* forms other than all is lower RAM use (which is only a problem for Main because | |
* Main is huge), and to do pinpoint hotpatching (like /nohotpatch). | |
*/ | |
exports.disablehotpatchall = false; | |
/** | |
* forcedpublicprefixes - user ID prefixes which will be forced to battle publicly. | |
* Battles involving user IDs which begin with one of the prefixes configured here | |
* will be unaffected by various battle privacy commands such as /modjoin, /hideroom | |
* or /ionext. | |
* @type {string[] | undefined} | |
*/ | |
exports.forcedpublicprefixes = []; | |
/** | |
* startuphook - function to call when the server is fully initialized and ready | |
* to serve requests. | |
*/ | |
exports.startuphook = function () {}; | |
/** | |
* lastfmkey - the API key to let users use the last.fm commands from The Studio's | |
* chat plugin. | |
*/ | |
exports.lastfmkey = ''; | |
/** | |
* chatlogreader - the search method used for searching chatlogs. | |
* @type {'ripgrep' | 'fs'} | |
*/ | |
exports.chatlogreader = 'fs'; | |
/** | |
* permissions and groups: | |
* Each entry in `grouplist` is a seperate group. Some of the members are "special" | |
* while the rest is just a normal permission. | |
* The order of the groups determines their ranking. | |
* The special members are as follows: | |
* - symbol: Specifies the symbol of the group (as shown in front of the username) | |
* - id: Specifies an id for the group. | |
* - name: Specifies the human-readable name for the group. | |
* - root: If this is true, the group can do anything. | |
* - inherit: The group uses the group specified's permissions if it cannot | |
* find the permission in the current group. Never make the graph | |
* produced using this member have any cycles, or the server won't run. | |
* - jurisdiction: The default jurisdiction for targeted permissions where one isn't | |
* explictly specified. "Targeted permissions" are permissions | |
* that might affect another user, such as `ban' or `promote'. | |
* 's' is a special group where it means the user itself only | |
* and 'u' is another special group where it means all groups | |
* lower in rank than the current group. | |
* - roomonly: forces the group to be a per-room moderation rank only. | |
* - globalonly: forces the group to be a global rank only. | |
* All the possible permissions are as follows: | |
* - console: Developer console (>>). | |
* - lockdown: /lockdown and /endlockdown commands. | |
* - hotpatch: /hotpatch, /crashfixed and /savelearnsets commands. | |
* - ignorelimits: Ignore limits such as chat message length. | |
* - promote: Promoting and demoting. Will only work if the target user's current | |
* group and target group are both in jurisdiction. | |
* - room<rank>: /roompromote to <rank> (eg. roomvoice) | |
* - makeroom: Create/delete chatrooms, and set modjoin/roomdesc/privacy | |
* - editroom: Editing properties of rooms | |
* - editprivacy: Set modjoin/privacy only for battles | |
* - globalban: Banning and unbanning from the entire server. | |
* - ban: Banning and unbanning in rooms. | |
* - mute: Muting and unmuting. | |
* - lock: locking (ipmute) and unlocking. | |
* - receivemutedpms: Receive PMs from muted users. | |
* - forcerename: /fr command. | |
* - ip: IP checking. | |
* - alts: Alt checking. | |
* - modlog: view the moderator logs. | |
* - show: Show command output to other users. | |
* - showmedia: Show images and videos to other users. | |
* - declare: /declare command. | |
* - announce: /announce command. | |
* - modchat: Set modchat. | |
* - potd: Set PotD. | |
* - forcewin: /forcewin command. | |
* - battlemessage: /a command. | |
* - tournaments: creating tournaments (/tour new, settype etc.) | |
* - gamemoderation: /tour dq, autodq, end etc. | |
* - gamemanagement: enable/disable games, minigames, and tournaments. | |
* - minigame: make minigames (hangman, polls, etc.). | |
* - game: make games. | |
*/ | |
exports.grouplist = [ | |
{ | |
symbol: '~', | |
id: "admin", | |
name: "Administrator", | |
inherit: '@', | |
jurisdiction: 'u', | |
globalonly: true, | |
console: true, | |
bypassall: true, | |
lockdown: true, | |
promote: '~u', | |
roomowner: true, | |
roombot: true, | |
roommod: true, | |
roomdriver: true, | |
forcewin: true, | |
declare: true, | |
addhtml: true, | |
rangeban: true, | |
makeroom: true, | |
editroom: true, | |
editprivacy: true, | |
potd: true, | |
disableladder: true, | |
gdeclare: true, | |
gamemanagement: true, | |
exportinputlog: true, | |
tournaments: true, | |
}, | |
{ | |
symbol: '#', | |
id: "owner", | |
name: "Room Owner", | |
inherit: '@', | |
jurisdiction: 'u', | |
roomonly: true, | |
roombot: true, | |
roommod: true, | |
roomdriver: true, | |
roomprizewinner: true, | |
editroom: true, | |
declare: true, | |
addhtml: true, | |
gamemanagement: true, | |
tournaments: true, | |
}, | |
{ | |
symbol: '\u2605', | |
id: "host", | |
name: "Host", | |
inherit: '@', | |
jurisdiction: 'u', | |
roomonly: true, | |
declare: true, | |
modchat: 'a', | |
gamemanagement: true, | |
forcewin: true, | |
tournaments: true, | |
joinbattle: true, | |
}, | |
{ | |
symbol: '@', | |
id: "mod", | |
name: "Moderator", | |
inherit: '%', | |
jurisdiction: 'u', | |
globalban: true, | |
ban: true, | |
modchat: 'a', | |
roomvoice: true, | |
roomwhitelist: true, | |
forcerename: true, | |
ip: true, | |
alts: '@u', | |
game: true, | |
}, | |
{ | |
symbol: '%', | |
id: "driver", | |
name: "Driver", | |
inherit: '+', | |
jurisdiction: 'u', | |
globalGroupInPersonalRoom: '@', | |
announce: true, | |
warn: '\u2605u', | |
kick: true, | |
mute: '\u2605u', | |
lock: true, | |
forcerename: true, | |
timer: true, | |
modlog: true, | |
alts: '%u', | |
bypassblocks: 'u%@~', | |
receiveauthmessages: true, | |
gamemoderation: true, | |
jeopardy: true, | |
joinbattle: true, | |
minigame: true, | |
modchat: true, | |
hiderank: true, | |
}, | |
{ | |
// Bots are ranked below Driver/Mod so that Global Bots can be kept out | |
// of modjoin % rooms (namely, Staff). | |
// (They were previously above Driver/Mod so they can have game management | |
// permissions drivers don't, but these permissions can be manually given.) | |
symbol: '*', | |
id: "bot", | |
name: "Bot", | |
inherit: '%', | |
jurisdiction: 'u', | |
addhtml: true, | |
tournaments: true, | |
declare: true, | |
bypassafktimer: true, | |
gamemanagement: true, | |
ip: false, | |
globalban: false, | |
lock: false, | |
forcerename: false, | |
alts: false, | |
}, | |
{ | |
symbol: '\u2606', | |
id: "player", | |
name: "Player", | |
inherit: '+', | |
battleonly: true, | |
roomvoice: true, | |
modchat: true, | |
editprivacy: true, | |
gamemanagement: true, | |
joinbattle: true, | |
nooverride: true, | |
}, | |
{ | |
symbol: '+', | |
id: "voice", | |
name: "Voice", | |
inherit: ' ', | |
altsself: true, | |
makegroupchat: true, | |
joinbattle: true, | |
show: true, | |
showmedia: true, | |
exportinputlog: true, | |
importinputlog: true, | |
}, | |
{ | |
symbol: '^', | |
id: "prizewinner", | |
name: "Prize Winner", | |
roomonly: true, | |
}, | |
{ | |
symbol: 'whitelist', | |
id: "whitelist", | |
name: "Whitelist", | |
inherit: ' ', | |
roomonly: true, | |
altsself: true, | |
show: true, | |
showmedia: true, | |
exportinputlog: true, | |
importinputlog: true, | |
}, | |
{ | |
symbol: ' ', | |
ipself: true, | |
}, | |
{ | |
name: 'Locked', | |
id: 'locked', | |
symbol: '\u203d', | |
punishgroup: 'LOCK', | |
}, | |
{ | |
name: 'Muted', | |
id: 'muted', | |
symbol: '!', | |
punishgroup: 'MUTE', | |
}, | |
]; | |