Found 15 repositories(showing 15)
Altiruss
############################################################ # +------------------------------------------------------+ # # | Notes | # # +------------------------------------------------------+ # ############################################################ # If you want to use special characters in this document, such as accented letters, you MUST save the file as UTF-8, not ANSI. # If you receive an error when Essentials loads, ensure that: # - No tabs are present: YAML only allows spaces # - Indents are correct: YAML hierarchy is based entirely on indentation # - You have "escaped" all apostrophes in your text: If you want to write "don't", for example, write "don''t" instead (note the doubled apostrophe) # - Text with symbols is enclosed in single or double quotation marks # If you have problems join the Essentials help support channel: http://tiny.cc/EssentialsChat ############################################################ # +------------------------------------------------------+ # # | Essentials (Global) | # # +------------------------------------------------------+ # ############################################################ # A color code between 0-9 or a-f. Set to 'none' to disable. ops-name-color: 'none' # The character(s) to prefix all nicknames, so that you know they are not true usernames. nickname-prefix: '~' # Disable this if you have any other plugin, that modifies the displayname of a user. change-displayname: true # When this option is enabled, the (tab) player list will be updated with the displayname. # The value of change-displayname (above) has to be true. #change-playerlist: true # When essentialschat.jar isnt used, force essentials to add the prefix and suffix from permission plugins to displayname # This setting is ignored if essentialschat.jar is used, and defaults to 'true' # The value of change-displayname (above) has to be true. # Do not edit this setting unless you know what you are doing! #add-prefix-suffix: false # The delay, in seconds, required between /home, /tp, etc. teleport-cooldown: 5 # The delay, in seconds, before a user actually teleports. If the user moves or gets attacked in this timeframe, the teleport never occurs. teleport-delay: 5 # The delay, in seconds, a player can't be attacked by other players after they have been teleported by a command # This will also prevent the player attacking other players teleport-invulnerability: 4 # The delay, in seconds, required between /heal attempts heal-cooldown: 60 # What to prevent from /i /give # e.g item-spawn-blacklist: 46,11,10 item-spawn-blacklist: # Set this to true if you want permission based item spawn rules # Note: The blacklist above will be ignored then. # Permissions: # - essentials.itemspawn.item-all # - essentials.itemspawn.item-[itemname] # - essentials.itemspawn.item-[itemid] # - essentials.give.item-all # - essentials.give.item-[itemname] # - essentials.give.item-[itemid] # For more information, visit http://wiki.ess3.net/wiki/Command_Reference/ICheat#Item.2FGive permission-based-item-spawn: false # Mob limit on the /spawnmob command per execution spawnmob-limit: 10 # Shall we notify users when using /lightning warn-on-smite: true # motd and rules are now configured in the files motd.txt and rules.txt # When a command conflicts with another plugin, by default, Essentials will try to force the OTHER plugin to take priority. # Commands in this list, will tell Essentials to 'not give up' the command to other plugins. # In this state, which plugin 'wins' appears to be almost random. # # If you have two plugin with the same command and you wish to force Essentials to take over, you need an alias. # To force essentials to take 'god' alias 'god' to 'egod'. # See http://wiki.bukkit.org/Bukkit.yml#aliases for more information overridden-commands: # - god # Disabled commands will be completely unavailable on the server. # Disabling commands here will have no effect on command conflicts. disabled-commands: # - nick # These commands will be shown to players with socialSpy enabled # You can add commands from other plugins you may want to track or # remove commands that are used for something you dont want to spy on socialspy-commands: - msg - w - r - mail - m - t - whisper - emsg - tell - er - reply - ereply - email - action - describe - eme - eaction - edescribe - etell - ewhisper - pm # If you do not wish to use a permission system, you can define a list of 'player perms' below. # This list has no effect if you are using a supported permissions system. # If you are using an unsupported permissions system simply delete this section. # Whitelist the commands and permissions you wish to give players by default (everything else is op only). # These are the permissions without the "essentials." part. player-commands: - afk - afk.auto - back - back.ondeath - balance - balance.others - balancetop - build - chat.color - chat.format - chat.shout - chat.question - clearinventory - compass - depth - delhome - getpos - geoip.show - help - helpop - home - home.others - ignore - info - itemdb - kit - kits.tools - list - mail - mail.send - me - motd - msg - msg.color - nick - near - pay - ping - protect - r - rules - realname - seen - sell - sethome - setxmpp - signs.create.protection - signs.create.trade - signs.break.protection - signs.break.trade - signs.use.balance - signs.use.buy - signs.use.disposal - signs.use.enchant - signs.use.free - signs.use.gamemode - signs.use.heal - signs.use.info - signs.use.kit - signs.use.mail - signs.use.protection - signs.use.repair - signs.use.sell - signs.use.time - signs.use.trade - signs.use.warp - signs.use.weather - spawn - suicide - time - tpa - tpaccept - tpahere - tpdeny - warp - warp.list - world - worth - xmpp # Note: All items MUST be followed by a quantity! # All kit names should be lower case, and will be treated as lower in permissions/costs. # Syntax: - itemID[:DataValue/Durability] Amount [Enchantment:Level].. [itemmeta:value]... # For Item meta information visit http://wiki.ess3.net/wiki/Item_Meta # 'delay' refers to the cooldown between how often you can use each kit, measured in seconds. # For more information, visit http://wiki.ess3.net/wiki/Kits kits: tools: delay: 10 items: - 272 1 - 273 1 - 274 1 - 275 1 dtools: delay: 600 items: - 278 1 efficiency:1 durability:1 fortune:1 name:&4Gigadrill lore:The_drill_that_&npierces|the_heavens - 277 1 digspeed:3 name:Dwarf lore:Diggy|Diggy|Hole - 298 1 color:255,255,255 name:Top_Hat lore:Good_day,_Good_day - 279:780 1 notch: delay: 6000 items: - 397:3 1 player:Notch color: delay: 6000 items: - 387 1 title:&4Book_&9o_&6Colors author:KHobbits lore:Ingame_color_codes book:Colors firework: delay: 6000 items: - 401 1 name:Angry_Creeper color:red fade:green type:creeper power:1 - 401 1 name:StarryNight color:yellow,orange fade:blue type:star effect:trail,twinkle power:1 - 401 2 name:SolarWind color:yellow,orange fade:red shape:large effect:twinkle color:yellow,orange fade:red shape:ball effect:trail color:red,purple fade:pink shape:star effect:trail power:1 # Essentials Sign Control # See http://wiki.ess3.net/wiki/Sign_Tutorial for instructions on how to use these. # To enable signs, remove # symbol. To disable all signs, comment/remove each sign. # Essentials Colored sign support will be enabled when any sign types are enabled. # Color is not an actual sign, it's for enabling using color codes on signs, when the correct permissions are given. enabledSigns: #- color #- balance #- buy #- sell #- trade #- free #- disposal #- warp #- kit #- mail #- enchant #- gamemode #- heal #- info #- spawnmob #- repair #- time #- weather # How many times per second can Essentials signs be interacted with per player. # Values should be between 1-20, 20 being virtually no lag protection. # Lower numbers will reduce the possibility of lag, but may annoy players. sign-use-per-second: 4 # Backup runs a batch/bash command while saving is disabled backup: # Interval in minutes interval: 30 # Unless you add a valid backup command or script here, this feature will be useless. # Use 'save-all' to simply force regular world saving without backup. #command: 'rdiff-backup World1 backups/World1' # Set this true to enable permission per warp. per-warp-permission: false # Sort output of /list command by groups sort-list-by-groups: false # More output to the console debug: false # Set the locale for all messages # If you don't set this, the default locale of the server will be used. # For example, to set language to English, set locale to en, to use the file "messages_en.properties" # Don't forget to remove the # in front of the line # For more information, visit http://wiki.ess3.net/wiki/Locale #locale: en # Turn off god mode when people exit remove-god-on-disconnect: false # Auto-AFK # After this timeout in seconds, the user will be set as afk. # Set to -1 for no timeout. auto-afk: 300 # Auto-AFK Kick # After this timeout in seconds, the user will be kicked from the server. # Set to -1 for no timeout. auto-afk-kick: -1 # Set this to true, if you want to freeze the player, if he is afk. # Other players or monsters can't push him out of afk mode then. # This will also enable temporary god mode for the afk player. # The player has to use the command /afk to leave the afk mode. freeze-afk-players: false # When the player is afk, should he be able to pickup items? # Enable this, when you don't want people idling in mob traps. disable-item-pickup-while-afk: false # This setting controls if a player is marked as active on interaction. # When this setting is false, you will need to manually un-AFK using the /afk command. cancel-afk-on-interact: true # Should we automatically remove afk status when the player moves? # Player will be removed from AFK on chat/command regardless of this setting. # Disable this to reduce server lag. cancel-afk-on-move: true # You can disable the death messages of Minecraft here death-messages: true # Add worlds to this list, if you want to automatically disable god mode there no-god-in-worlds: # - world_nether # Set to true to enable per-world permissions for teleporting between worlds with essentials commands # This applies to /world, /back, /tp[a|o][here|all], but not warps. # Give someone permission to teleport to a world with essentials.worlds.<worldname> # This does not affect the /home command, there is a separate toggle below for this. world-teleport-permissions: false # The number of items given if the quantity parameter is left out in /item or /give. # If this number is below 1, the maximum stack size size is given. If over-sized stacks # are not enabled, any number higher than the maximum stack size results in more than one stack. default-stack-size: -1 # Over-sized stacks are stacks that ignore the normal max stack size. # They can be obtained using /give and /item, if the player has essentials.oversizedstacks permission. # How many items should be in an over-sized stack? oversized-stacksize: 64 # Allow repair of enchanted weapons and armor. # If you set this to false, you can still allow it for certain players using the permission # essentials.repair.enchanted repair-enchanted: true # Allow 'unsafe' enchantments in kits and item spawning. # Warning: Mixing and overleveling some enchantments can cause issues with clients, servers and plugins. unsafe-enchantments: false #Do you want essentials to keep track of previous location for /back in the teleport listener? #If you set this to true any plugin that uses teleport will have the previous location registered. register-back-in-listener: false #Delay to wait before people can cause attack damage after logging in login-attack-delay: 5 #Set the max fly speed, values range from 0.1 to 1.0 max-fly-speed: 0.8 #Set the maximum amount of mail that can be sent within a minute. mails-per-minute: 1000 # Set the maximum time /tempban can be used for in seconds. # Set to -1 to disable, and essentials.tempban.unlimited can be used to override. max-tempban-time: -1 ############################################################ # +------------------------------------------------------+ # # | EssentialsHome | # # +------------------------------------------------------+ # ############################################################ # Allows people to set their bed at daytime update-bed-at-daytime: true # Set to true to enable per-world permissions for using homes to teleport between worlds # This applies to the /home only. # Give someone permission to teleport to a world with essentials.worlds.<worldname> world-home-permissions: false # Allow players to have multiple homes. # Players need essentials.sethome.multiple before they can have more than 1 home, defaults to 'default' below. # Define different amounts of multiple homes for different permissions, e.g. essentials.sethome.multiple.vip # People with essentials.sethome.multiple.unlimited are not limited by these numbers. # For more information, visit http://wiki.ess3.net/wiki/Multihome sethome-multiple: default: 3 # essentials.sethome.multiple.vip vip: 5 # essentials.sethome.multiple.staff staff: 10 # Set timeout in seconds for players to accept tpa before request is cancelled. # Set to 0 for no timeout tpa-accept-cancellation: 120 ############################################################ # +------------------------------------------------------+ # # | EssentialsEco | # # +------------------------------------------------------+ # ############################################################ # For more information, visit http://wiki.ess3.net/wiki/Essentials_Economy # Defines the balance with which new players begin. Defaults to 0. starting-balance: 0 # worth-# defines the value of an item when it is sold to the server via /sell. # These are now defined in worth.yml # Defines the cost to use the given commands PER USE # Some commands like /repair have sub-costs, check the wiki for more information. command-costs: # /example costs $1000 PER USE #example: 1000 # /kit tools costs $1500 PER USE #kit-tools: 1500 # Set this to a currency symbol you want to use. currency-symbol: '$' # Set the maximum amount of money a player can have # The amount is always limited to 10 trillion because of the limitations of a java double max-money: 10000000000000 # Set the minimum amount of money a player can have (must be above the negative of max-money). # Setting this to 0, will disable overdrafts/loans completely. Users need 'essentials.eco.loan' perm to go below 0. min-money: -10000 # Enable this to log all interactions with trade/buy/sell signs and sell command economy-log-enabled: false ############################################################ # +------------------------------------------------------+ # # | EssentialsHelp | # # +------------------------------------------------------+ # ############################################################ # Show other plugins commands in help non-ess-in-help: true # Hide plugins which do not give a permission # You can override a true value here for a single plugin by adding a permission to a user/group. # The individual permission is: essentials.help.<plugin>, anyone with essentials.* or '*' will see all help regardless. # You can use negative permissions to remove access to just a single plugins help if the following is enabled. hide-permissionless-help: true ############################################################ # +------------------------------------------------------+ # # | EssentialsChat | # # +------------------------------------------------------+ # ############################################################ chat: # If EssentialsChat is installed, this will define how far a player's voice travels, in blocks. Set to 0 to make all chat global. # Note that users with the "essentials.chat.spy" permission will hear everything, regardless of this setting. # Users with essentials.chat.shout can override this by prefixing text with an exclamation mark (!) # Users with essentials.chat.question can override this by prefixing text with a question mark (?) # You can add command costs for shout/question by adding chat-shout and chat-question to the command costs section." radius: 0 # Chat formatting can be done in two ways, you can either define a standard format for all chat # Or you can give a group specific chat format, to give some extra variation. # If set to the default chat format which "should" be compatible with ichat. # For more information of chat formatting, check out the wiki: http://wiki.ess3.net/wiki/Chat_Formatting format: '&l{DISPLAYNAME} &3➽ &f&l{MESSAGE}' Dziewczyna: '{DISPLAYNAME} &3➽ &5 {MESSAGE}' #format: '&7[{GROUP}]&r {DISPLAYNAME}&7:&r {MESSAGE}' group-formats: # Default: '{WORLDNAME} {DISPLAYNAME}&7:&r {MESSAGE}' # Admins: '{WORLDNAME} &c[{GROUP}]&r {DISPLAYNAME}&7:&c {MESSAGE}' # If you are using group formats make sure to remove the '#' to allow the setting to be read. ############################################################ # +------------------------------------------------------+ # # | EssentialsProtect | # # +------------------------------------------------------+ # ############################################################ protect: # Database settings for sign/rail protection # mysql or sqlite # We strongly recommend against using mysql here, unless you have a good reason. # Sqlite seems to be faster in almost all cases, and in some cases mysql can be much slower. datatype: 'sqlite' # If you specified MySQL above, you MUST enter the appropriate details here. # If you specified SQLite above, these will be IGNORED. username: 'root' password: 'root' mysqlDb: 'jdbc:mysql://localhost:3306/minecraft' # General physics/behavior modifications prevent: lava-flow: false water-flow: false water-bucket-flow: false fire-spread: true lava-fire-spread: true flint-fire: false lightning-fire-spread: true portal-creation: false tnt-explosion: false tnt-playerdamage: false fireball-explosion: false fireball-fire: false fireball-playerdamage: false witherskull-explosion: false witherskull-playerdamage: false wither-spawnexplosion: false wither-blockreplace: false creeper-explosion: false creeper-playerdamage: false creeper-blockdamage: false enderdragon-blockdamage: true enderman-pickup: false villager-death: false # Monsters won't follow players # permission essentials.protect.entitytarget.bypass disables this entitytarget: false # Prevent the spawning of creatures spawn: creeper: false skeleton: false spider: false giant: false zombie: false slime: false ghast: false pig_zombie: false enderman: false cave_spider: false silverfish: false blaze: false magma_cube: false ender_dragon: false pig: false sheep: false cow: false chicken: false squid: false wolf: false mushroom_cow: false snowman: false ocelot: false iron_golem: false villager: false wither: false bat: false witch: false # Maximum height the creeper should explode. -1 allows them to explode everywhere. # Set prevent.creeper-explosion to true, if you want to disable creeper explosions. creeper: max-height: -1 # Protect various blocks. protect: # Protect all signs signs: false # Prevent users from destroying rails rails: false # Blocks below rails/signs are also protected if the respective rail/sign is protected. # This makes it more difficult to circumvent protection, and should be enabled. # This only has an effect if "rails" or "signs" is also enabled. block-below: true # Prevent placing blocks above protected rails, this is to stop a potential griefing prevent-block-on-rails: false # Store blocks / signs in memory before writing memstore: false # Disable various default physics and behaviors disable: # Should fall damage be disabled? fall: false # Users with the essentials.protect.pvp permission will still be able to attack each other if this is set to true. # They will be unable to attack users without that same permission node. pvp: false # Should drowning damage be disabled? # (Split into two behaviors; generally, you want both set to the same value) drown: false suffocate: false # Should damage via lava be disabled? Items that fall into lava will still burn to a crisp. ;) lavadmg: false # Should arrow damage be disabled projectiles: false # This will disable damage from touching cacti. contactdmg: false # Burn, baby, burn! Should fire damage be disabled? firedmg: false # Should the damage after hit by a lightning be disabled? lightning: false # Should Wither damage be disabled? wither: false # Disable weather options weather: storm: false thunder: false lightning: false ############################################################ # +------------------------------------------------------+ # # | EssentialsAntiBuild | # # +------------------------------------------------------+ # ############################################################ # Disable various default physics and behaviors # For more information, visit http://wiki.ess3.net/wiki/AntiBuild # Should people with build: false in permissions be allowed to build # Set true to disable building for those people # Setting to false means EssentialsAntiBuild will never prevent you from building build: true # Should people with build: false in permissions be allowed to use items # Set true to disable using for those people # Setting to false means EssentialsAntiBuild will never prevent you from using use: true # Should we tell people they are not allowed to build warn-on-build-disallow: true # For which block types would you like to be alerted? # You can find a list of IDs in plugins/Essentials/items.csv after loading Essentials for the first time. # 10 = lava :: 11 = still lava :: 46 = TNT :: 327 = lava bucket alert: on-placement: 10,11,46,327 on-use: 327 on-break: blacklist: # Which blocks should people be prevented from placing placement: 10,11,46,327 # Which items should people be prevented from using usage: 327 # Which blocks should people be prevented from breaking break: # Which blocks should not be pushed by pistons piston: ############################################################ # +------------------------------------------------------+ # # | Essentials Spawn / New Players | # # +------------------------------------------------------+ # ############################################################ newbies: # Should we announce to the server when someone logs in for the first time? # If so, use this format, replacing {DISPLAYNAME} with the player name. # If not, set to '' #announce-format: '' announce-format: '&dWelcome {DISPLAYNAME}&d to the server!' # When we spawn for the first time, which spawnpoint do we use? # Set to "none" if you want to use the spawn point of the world. spawnpoint: newbies # Do we want to give users anything on first join? Set to '' to disable # This kit will be given regardless of cost, and permissions. #kit: '' kit: tools # Set this to lowest, if you want Multiverse to handle the respawning # Set this to high, if you want EssentialsSpawn to handle the respawning # Set this to highest, if you want to force EssentialsSpawn to handle the respawning respawn-listener-priority: high # When users die, should they respawn at their first home or bed, instead of the spawnpoint? respawn-at-home: false # End of File <-- No seriously, you're done with configuration.
dallyswag
############################################################ # +------------------------------------------------------+ # # | Notes | # # +------------------------------------------------------+ # ############################################################ # If you want to use special characters in this document, such as accented letters, you MUST save the file as UTF-8, not ANSI. # If you receive an error when Essentials loads, ensure that: # - No tabs are present: YAML only allows spaces # - Indents are correct: YAML hierarchy is based entirely on indentation # - You have "escaped" all apostrophes in your text: If you want to write "don't", for example, write "don''t" instead (note the doubled apostrophe) # - Text with symbols is enclosed in single or double quotation marks # If you have problems join the Essentials help support channel: http://tiny.cc/EssentialsChat ############################################################ # +------------------------------------------------------+ # # | Essentials (Global) | # # +------------------------------------------------------+ # ############################################################ # A color code between 0-9 or a-f. Set to 'none' to disable. ops-name-color: '4' # The character(s) to prefix all nicknames, so that you know they are not true usernames. nickname-prefix: '~' # The maximum length allowed in nicknames. The nickname prefix is included in this. max-nick-length: 15 # Disable this if you have any other plugin, that modifies the displayname of a user. change-displayname: true # When this option is enabled, the (tab) player list will be updated with the displayname. # The value of change-displayname (above) has to be true. #change-playerlist: true # When essentialschat.jar isn't used, force essentials to add the prefix and suffix from permission plugins to displayname. # This setting is ignored if essentialschat.jar is used, and defaults to 'true'. # The value of change-displayname (above) has to be true. # Do not edit this setting unless you know what you are doing! #add-prefix-suffix: false # If the teleport destination is unsafe, should players be teleported to the nearest safe location? # If this is set to true, Essentials will attempt to teleport players close to the intended destination. # If this is set to false, attempted teleports to unsafe locations will be cancelled with a warning. teleport-safety: true # The delay, in seconds, required between /home, /tp, etc. teleport-cooldown: 3 # The delay, in seconds, before a user actually teleports. If the user moves or gets attacked in this timeframe, the teleport never occurs. teleport-delay: 5 # The delay, in seconds, a player can't be attacked by other players after they have been teleported by a command. # This will also prevent the player attacking other players. teleport-invulnerability: 4 # The delay, in seconds, required between /heal or /feed attempts. heal-cooldown: 60 # What to prevent from /i /give. # e.g item-spawn-blacklist: 46,11,10 item-spawn-blacklist: # Set this to true if you want permission based item spawn rules. # Note: The blacklist above will be ignored then. # Example permissions (these go in your permissions manager): # - essentials.itemspawn.item-all # - essentials.itemspawn.item-[itemname] # - essentials.itemspawn.item-[itemid] # - essentials.give.item-all # - essentials.give.item-[itemname] # - essentials.give.item-[itemid] # - essentials.unlimited.item-all # - essentials.unlimited.item-[itemname] # - essentials.unlimited.item-[itemid] # - essentials.unlimited.item-bucket # Unlimited liquid placing # # For more information, visit http://wiki.ess3.net/wiki/Command_Reference/ICheat#Item.2FGive permission-based-item-spawn: false # Mob limit on the /spawnmob command per execution. spawnmob-limit: 1 # Shall we notify users when using /lightning? warn-on-smite: true # motd and rules are now configured in the files motd.txt and rules.txt. # When a command conflicts with another plugin, by default, Essentials will try to force the OTHER plugin to take priority. # Commands in this list, will tell Essentials to 'not give up' the command to other plugins. # In this state, which plugin 'wins' appears to be almost random. # # If you have two plugin with the same command and you wish to force Essentials to take over, you need an alias. # To force essentials to take 'god' alias 'god' to 'egod'. # See http://wiki.bukkit.org/Bukkit.yml#aliases for more information overridden-commands: # - god # - info # Disabling commands here will prevent Essentials handling the command, this will not affect command conflicts. # Commands should fallback to the vanilla versions if available. # You should not have to disable commands used in other plugins, they will automatically get priority. disabled-commands: # - nick # - clear - mail - mail.send - nuke - afk # These commands will be shown to players with socialSpy enabled. # You can add commands from other plugins you may want to track or # remove commands that are used for something you dont want to spy on. socialspy-commands: - msg - w - r - mail - m - t - whisper - emsg - tell - er - reply - ereply - email - action - describe - eme - eaction - edescribe - etell - ewhisper - pm # If you do not wish to use a permission system, you can define a list of 'player perms' below. # This list has no effect if you are using a supported permissions system. # If you are using an unsupported permissions system, simply delete this section. # Whitelist the commands and permissions you wish to give players by default (everything else is op only). # These are the permissions without the "essentials." part. player-commands: - afk - afk.auto - back - back.ondeath - balance - balance.others - balancetop - build - chat.color - chat.format - chat.shout - chat.question - clearinventory - compass - depth - delhome - getpos - geoip.show - help - helpop - home - home.others - ignore - info - itemdb - kit - kits.tools - list - mail - mail.send - me - motd - msg - msg.color - nick - near - pay - ping - protect - r - rules - realname - seen - sell - sethome - setxmpp - signs.create.protection - signs.create.trade - signs.break.protection - signs.break.trade - signs.use.balance - signs.use.buy - signs.use.disposal - signs.use.enchant - signs.use.free - signs.use.gamemode - signs.use.heal - signs.use.info - signs.use.kit - signs.use.mail - signs.use.protection - signs.use.repair - signs.use.sell - signs.use.time - signs.use.trade - signs.use.warp - signs.use.weather - spawn - suicide - time - tpa - tpaccept - tpahere - tpdeny - warp - warp.list - world - worth - xmpp # Note: All items MUST be followed by a quantity! # All kit names should be lower case, and will be treated as lower in permissions/costs. # Syntax: - itemID[:DataValue/Durability] Amount [Enchantment:Level].. [itemmeta:value]... # For Item meta information visit http://wiki.ess3.net/wiki/Item_Meta # 'delay' refers to the cooldown between how often you can use each kit, measured in seconds. # For more information, visit http://wiki.ess3.net/wiki/Kits kits: Goblin: delay: 3600 items: - 272 1 sharpness:2 unbreaking:1 looting:1 name:&8[&2Goblin&8]&fSword - 306 1 unbreaking:1 protection:1 name:&8[&2Goblin&8]&fHelmet - 307 1 unbreaking:1 protection:1 name:&8[&2Goblin&8]&fChestplate - 308 1 unbreaking:1 protection:1 name:&8[&2Goblin&8]&fLeggings - 309 1 unbreaking:1 protection:1 name:&8[&2Goblin&8]&fBoots - 256 1 efficiency:1 unbreaking:1 name:&8[&2Goblin&8]&fShovel - 257 1 efficiency:1 unbreaking:1 fortune:1 name:&8[&2Goblin&8]&fPickaxe - 258 1 efficiency:1 unbreaking:1 name:&8[&2Goblin&8]&fAxe - 364 16 Griefer: delay: 14400 items: - 276 1 sharpness:3 unbreaking:3 name:&8[&d&lGriefer&8]&fSword - 322:1 1 - 310 1 protection:2 name:&8[&d&lGriefer&8]&fHelmet - 311 1 protection:2 name:&8[&d&lGriefer&8]&fChestplate - 312 1 protection:2 name:&8[&d&lGriefer&8]&fLeggings - 313 1 protection:2 name:&8[&d&lGriefer&8]&fBoots Villager: delay: 43200 items: - 267 1 sharpness:4 name:&8[&eVillager&8]&fSword - 306 1 unbreaking:3 protection:4 name:&8[&eVillager&8]&fHelmet - 307 1 unbreaking:3 protection:4 name:&8[&eVillager&8]&fChestplate - 308 1 unbreaking:3 protection:4 name:&8[&eVillager&8]&fLeggings - 309 1 unbreaking:3 protection:4 name:&8[&eVillager&8]&fBoots - 388 10 - 383:120 2 Knight: delay: 43200 items: - 276 1 sharpness:3 name:&8[&cKnight&8]&fSword - 310 1 protection:2 name:&8[&cKnight&8]&fHelmet - 311 1 protection:2 name:&8[&cKnight&8]&fChestplate - 312 1 protection:2 name:&8[&cKnight&8]&fLeggings - 313 1 protection:2 name:&8[&cKnight&8]&fBoots - 388 20 - 383:120 4 King: delay: 43200 items: - 276 1 sharpness:4 fire:1 name:&8[&5King&8]&fSword - 310 1 protection:4 name:&8[&5King&8]&fHelmet - 311 1 protection:4 name:&8[&5King&8]&fChestplate - 312 1 protection:4 name:&8[&5King&8]&fLeggings - 313 1 protection:4 name:&8[&5King&8]&fBoots - 388 30 - 383:120 6 Hero: delay: 43200 items: - 276 1 sharpness:4 fire:2 name:&8[&aHero&8]&fSword - 310 1 protection:4 unbreaking:1 name:&8[&aHero&8]&fHelmet - 311 1 protection:4 unbreaking:1 name:&8[&aHero&8]&fChestplate - 312 1 protection:4 unbreaking:1 name:&8[&aHero&8]&fLeggings - 313 1 protection:4 unbreaking:1 name:&8[&aHero&8]&fBoots - 388 40 - 383:120 8 God: delay: 43200 items: - 276 1 sharpness:5 fire:2 name:&8[&4God&8]&fSword - 310 1 protection:4 unbreaking:3 name:&8[&4God&8]&fHelmet - 311 1 protection:4 unbreaking:3 name:&8[&4God&8]&fChestplate - 312 1 protection:4 unbreaking:3 name:&8[&4God&8]&fLeggings - 313 1 protection:4 unbreaking:3 name:&8[&4God&8]&fBoots - 388 50 - 383:120 10 - 322:1 5 Legend: delay: 43200 items: - 276 1 sharpness:5 fire:2 unbreaking:3 name:&8[&6&lLegend&8]&fSword - 310 1 protection:4 unbreaking:3 thorns:3 name:&8[&6&lLegend&8]&fHelmet - 311 1 protection:4 unbreaking:3 thorns:3 name:&8[&6&lLegend&8]&fChestplate - 312 1 protection:4 unbreaking:3 thorns:3 name:&8[&6&lLegend&8]&fLeggings - 313 1 protection:4 unbreaking:3 thorns:3 name:&8[&6&lLegend&8]&fBoots - 388 60 - 383:120 12 - 322:1 10 - 383:50 5 - 261 1 flame:1 power:5 punch:2 unbreaking:3 infinity:1 name:&8[&6&lLegend&8]&fBow - 262 1 - 279 1 sharpness:5 unbreaking:3 name:&8[&6&lLegend&8]&fAxe Youtube: delay: 43200 items: - 276 1 sharpness:5 fire:2 unbreaking:3 name:&8[&f&lYou&c&lTube&8]&fSword - 310 1 protection:4 unbreaking:3 thorns:3 name:&8[&f&lYou&c&lTube&8]&fHelmet - 311 1 protection:4 unbreaking:3 thorns:3 name:&8[&f&lYou&c&lTube&8]&fChestplate - 312 1 protection:4 unbreaking:3 thorns:3 name:&8[&f&lYou&c&lTube&8]&fLeggings - 313 1 protection:4 unbreaking:3 thorns:3 name:&8[&f&lYou&c&lTube&8]&fBoots - 388 60 - 383:120 12 - 322:1 10 - 383:50 5 - 261 1 flame:1 power:5 punch:2 unbreaking:3 infinity:1 name:&8[&f&lYou&c&lTube&8]&fBow - 262 1 - 279 1 sharpness:5 unbreaking:3 name:&8[&f&lYou&c&lTube&8]&fAxe Join: delay: 3600 items: - 17 16 - 333 1 - 49 32 - 50 16 - 4 64 - 373:8258 1 - 320 16 Reset: delay: 31536000 items: - 272 1 sharpness:4 unbreaking:3 name:&8[&cR&ee&as&be&dt&8]&fSword - 298 1 protection:3 unbreaking:1 name:&8[&cR&ee&as&be&dt&8]&fHelmet - 299 1 protection:3 unbreaking:1 name:&8[&cR&ee&as&be&dt&8]&fChestplate - 300 1 protection:3 unbreaking:1 name:&8[&cR&ee&as&be&dt&8]&fLeggings - 301 1 protection:3 unbreaking:1 name:&8[&cR&ee&as&be&dt&8]&fBoots - 354 1 name:&f&l Cake &4Vote # Essentials Sign Control # See http://wiki.ess3.net/wiki/Sign_Tutorial for instructions on how to use these. # To enable signs, remove # symbol. To disable all signs, comment/remove each sign. # Essentials Colored sign support will be enabled when any sign types are enabled. # Color is not an actual sign, it's for enabling using color codes on signs, when the correct permissions are given. enabledSigns: - color - balance - buy - sell #- trade #- free #- disposal #- warp #- kit #- mail #- enchant #- gamemode #- heal #- info #- spawnmob #- repair #- time #- weather # How many times per second can Essentials signs be interacted with per player. # Values should be between 1-20, 20 being virtually no lag protection. # Lower numbers will reduce the possibility of lag, but may annoy players. sign-use-per-second: 4 # Backup runs a batch/bash command while saving is disabled. backup: # Interval in minutes. interval: 30 # Unless you add a valid backup command or script here, this feature will be useless. # Use 'save-all' to simply force regular world saving without backup. #command: 'rdiff-backup World1 backups/World1' # Set this true to enable permission per warp. per-warp-permission: false # Sort output of /list command by groups. # You can hide and merge the groups displayed in /list by defining the desired behaviour here. # Detailed instructions and examples can be found on the wiki: http://wiki.ess3.net/wiki/List list: # To merge groups, list the groups you wish to merge #Staff: owner admin moderator Admins: owner admin # To limit groups, set a max user limit #builder: 20 # To hide groups, set the group as hidden #default: hidden # Uncomment the line below to simply list all players with no grouping #Players: '*' # More output to the console. debug: false # Set the locale for all messages. # If you don't set this, the default locale of the server will be used. # For example, to set language to English, set locale to en, to use the file "messages_en.properties". # Don't forget to remove the # in front of the line. # For more information, visit http://wiki.ess3.net/wiki/Locale #locale: en # Turn off god mode when people exit. remove-god-on-disconnect: false # Auto-AFK # After this timeout in seconds, the user will be set as afk. # This feature requires the player to have essentials.afk.auto node. # Set to -1 for no timeout. auto-afk: 300 # Auto-AFK Kick # After this timeout in seconds, the user will be kicked from the server. # essentials.afk.kickexempt node overrides this feature. # Set to -1 for no timeout. auto-afk-kick: -1 # Set this to true, if you want to freeze the player, if he is afk. # Other players or monsters can't push him out of afk mode then. # This will also enable temporary god mode for the afk player. # The player has to use the command /afk to leave the afk mode. freeze-afk-players: false # When the player is afk, should he be able to pickup items? # Enable this, when you don't want people idling in mob traps. disable-item-pickup-while-afk: false # This setting controls if a player is marked as active on interaction. # When this setting is false, you will need to manually un-AFK using the /afk command. cancel-afk-on-interact: true # Should we automatically remove afk status when the player moves? # Player will be removed from AFK on chat/command regardless of this setting. # Disable this to reduce server lag. cancel-afk-on-move: true # You can disable the death messages of Minecraft here. death-messages: false # Should operators be able to join and part silently. # You can control this with permissions if it is enabled. allow-silent-join-quit: true # You can set a custom join message here, set to "none" to disable. # You may use color codes, use {USERNAME} the player's name or {PLAYER} for the player's displayname. custom-join-message: "" # You can set a custom quit message here, set to "none" to disable. # You may use color codes, use {USERNAME} the player's name or {PLAYER} for the player's displayname. custom-quit-message: "" # Add worlds to this list, if you want to automatically disable god mode there. no-god-in-worlds: # - world_nether # Set to true to enable per-world permissions for teleporting between worlds with essentials commands. # This applies to /world, /back, /tp[a|o][here|all], but not warps. # Give someone permission to teleport to a world with essentials.worlds.<worldname> # This does not affect the /home command, there is a separate toggle below for this. world-teleport-permissions: false # The number of items given if the quantity parameter is left out in /item or /give. # If this number is below 1, the maximum stack size size is given. If over-sized stacks. # are not enabled, any number higher than the maximum stack size results in more than one stack. default-stack-size: -1 # Over-sized stacks are stacks that ignore the normal max stack size. # They can be obtained using /give and /item, if the player has essentials.oversizedstacks permission. # How many items should be in an over-sized stack? oversized-stacksize: 64 # Allow repair of enchanted weapons and armor. # If you set this to false, you can still allow it for certain players using the permission. # essentials.repair.enchanted repair-enchanted: true # Allow 'unsafe' enchantments in kits and item spawning. # Warning: Mixing and overleveling some enchantments can cause issues with clients, servers and plugins. unsafe-enchantments: false #Do you want essentials to keep track of previous location for /back in the teleport listener? #If you set this to true any plugin that uses teleport will have the previous location registered. register-back-in-listener: false #Delay to wait before people can cause attack damage after logging in. login-attack-delay: 5 #Set the max fly speed, values range from 0.1 to 1.0 max-fly-speed: 0.8 #Set the max walk speed, values range from 0.1 to 1.0 max-walk-speed: 0.8 #Set the maximum amount of mail that can be sent within a minute. mails-per-minute: 1000 # Set the maximum time /tempban can be used for in seconds. # Set to -1 to disable, and essentials.tempban.unlimited can be used to override. max-tempban-time: -1 ############################################################ # +------------------------------------------------------+ # # | EssentialsHome | # # +------------------------------------------------------+ # ############################################################ # Allows people to set their bed at daytime. update-bed-at-daytime: true # Set to true to enable per-world permissions for using homes to teleport between worlds. # This applies to the /home only. # Give someone permission to teleport to a world with essentials.worlds.<worldname> world-home-permissions: false # Allow players to have multiple homes. # Players need essentials.sethome.multiple before they can have more than 1 home. # You can set the default number of multiple homes using the 'default' rank below. # To remove the home limit entirely, give people 'essentials.sethome.multiple.unlimited'. # To grant different home amounts to different people, you need to define a 'home-rank' below. # Create the 'home-rank' below, and give the matching permission: essentials.sethome.multiple.<home-rank> # For more information, visit http://wiki.ess3.net/wiki/Multihome sethome-multiple: Goblin: 1 Villager: 2 Knight: 3 King: 4 Hero: 5 God: 6 # In this example someone with 'essentials.sethome.multiple' and 'essentials.sethome.multiple.vip' will have 5 homes. # Set timeout in seconds for players to accept tpa before request is cancelled. # Set to 0 for no timeout. tpa-accept-cancellation: 120 ############################################################ # +------------------------------------------------------+ # # | EssentialsEco | # # +------------------------------------------------------+ # ############################################################ # For more information, visit http://wiki.ess3.net/wiki/Essentials_Economy # Defines the balance with which new players begin. Defaults to 0. starting-balance: 1000 # worth-# defines the value of an item when it is sold to the server via /sell. # These are now defined in worth.yml # Defines the cost to use the given commands PER USE. # Some commands like /repair have sub-costs, check the wiki for more information. command-costs: # /example costs $1000 PER USE #example: 1000 # /kit tools costs $1500 PER USE #kit-tools: 1500 # Set this to a currency symbol you want to use. currency-symbol: '$' # Set the maximum amount of money a player can have. # The amount is always limited to 10 trillion because of the limitations of a java double. max-money: 10000000000000 # Set the minimum amount of money a player can have (must be above the negative of max-money). # Setting this to 0, will disable overdrafts/loans completely. Users need 'essentials.eco.loan' perm to go below 0. min-money: -10000 # Enable this to log all interactions with trade/buy/sell signs and sell command. economy-log-enabled: false ############################################################ # +------------------------------------------------------+ # # | EssentialsHelp | # # +------------------------------------------------------+ # ############################################################ # Show other plugins commands in help. non-ess-in-help: true # Hide plugins which do not give a permission. # You can override a true value here for a single plugin by adding a permission to a user/group. # The individual permission is: essentials.help.<plugin>, anyone with essentials.* or '*' will see all help regardless. # You can use negative permissions to remove access to just a single plugins help if the following is enabled. hide-permissionless-help: true ############################################################ # +------------------------------------------------------+ # # | EssentialsChat | # # +------------------------------------------------------+ # ############################################################ chat: # If EssentialsChat is installed, this will define how far a player's voice travels, in blocks. Set to 0 to make all chat global. # Note that users with the "essentials.chat.spy" permission will hear everything, regardless of this setting. # Users with essentials.chat.shout can override this by prefixing text with an exclamation mark (!) # Users with essentials.chat.question can override this by prefixing text with a question mark (?) # You can add command costs for shout/question by adding chat-shout and chat-question to the command costs section." radius: 0 # Chat formatting can be done in two ways, you can either define a standard format for all chat. # Or you can give a group specific chat format, to give some extra variation. # If set to the default chat format which "should" be compatible with ichat. # For more information of chat formatting, check out the wiki: http://wiki.ess3.net/wiki/Chat_Formatting format: '<{DISPLAYNAME}> {MESSAGE}' #format: '&7[{GROUP}]&r {DISPLAYNAME}&7:&r {MESSAGE}' group-formats: Goblin: '&7{DISPLAYNAME}&8:&f&o {MESSAGE}' Youtuber: '&7{DISPLAYNAME}&8:&f {MESSAGE}' Witch: '&7{DISPLAYNAME}&8:&f&o {MESSAGE}' Wizard: '&7{DISPLAYNAME}&8:&f {MESSAGE}' Sorcerer: '&7{DISPLAYNAME}&8:&f {MESSAGE}' Raider: '&7{DISPLAYNAME}&8:&f {MESSAGE}' Greifer: '&7{DISPLAYNAME}&8:&a {MESSAGE}' ChatMod: '&7{DISPLAYNAME}&8:&f {MESSAGE}' Owner: '&7{DISPLAYNAME}&8:&c {MESSAGE}' OP: '&7{DISPLAYNAME}&8:&f {MESSAGE}' Developer: '&7{DISPLAYNAME}&8:&f {MESSAGE}' HeadAdmin: '&7{DISPLAYNAME}&8:&f {MESSAGE}' Admin: '&7{DISPLAYNAME}&8:&f {MESSAGE}' JuniorAdmin: '&7{DISPLAYNAME}&8:&f {MESSAGE}' StaffManager: '&7{DISPLAYNAME}&8:&f {MESSAGE}' ForumAdmin: '&7{DISPLAYNAME}&8:&f {MESSAGE}' HeadModerator: '&7{DISPLAYNAME}&8:&f {MESSAGE}' Moderator: '&7{DISPLAYNAME}&8:&f {MESSAGE}' Helper: '&7{DISPLAYNAME}&8:&f {MESSAGE}' Villager: '&7{DISPLAYNAME}&8:&f {MESSAGE}' Knight: '&7{DISPLAYNAME}&8:&f {MESSAGE}' King: '&7{DISPLAYNAME}&8:&f {MESSAGE}' Hero: '&7{DISPLAYNAME}&8:&f {MESSAGE}' God: '&7{DISPLAYNAME}&8:&f {MESSAGE}' Legend: '&7{DISPLAYNAME}&8:&b {MESSAGE}' # If you are using group formats make sure to remove the '#' to allow the setting to be read. ############################################################ # +------------------------------------------------------+ # # | EssentialsProtect | # # +------------------------------------------------------+ # ############################################################ protect: # General physics/behavior modifications. prevent: lava-flow: false water-flow: false water-bucket-flow: false fire-spread: true lava-fire-spread: true flint-fire: false lightning-fire-spread: true portal-creation: false tnt-explosion: false tnt-playerdamage: false tnt-minecart-explosion: false tnt-minecart-playerdamage: false fireball-explosion: false fireball-fire: false fireball-playerdamage: false witherskull-explosion: false witherskull-playerdamage: false wither-spawnexplosion: false wither-blockreplace: false creeper-explosion: false creeper-playerdamage: false creeper-blockdamage: false enderdragon-blockdamage: true enderman-pickup: false villager-death: false # Monsters won't follow players. # permission essentials.protect.entitytarget.bypass disables this. entitytarget: false # Prevent the spawning of creatures. spawn: creeper: false skeleton: false spider: false giant: false zombie: false slime: false ghast: false pig_zombie: false enderman: false cave_spider: false silverfish: false blaze: false magma_cube: false ender_dragon: false pig: false sheep: false cow: false chicken: false squid: false wolf: false mushroom_cow: false snowman: false ocelot: false iron_golem: false villager: false wither: true bat: false witch: false horse: false # Maximum height the creeper should explode. -1 allows them to explode everywhere. # Set prevent.creeper-explosion to true, if you want to disable creeper explosions. creeper: max-height: -1 # Disable various default physics and behaviors. disable: # Should fall damage be disabled? fall: false # Users with the essentials.protect.pvp permission will still be able to attack each other if this is set to true. # They will be unable to attack users without that same permission node. pvp: false # Should drowning damage be disabled? # (Split into two behaviors; generally, you want both set to the same value.) drown: false suffocate: false # Should damage via lava be disabled? Items that fall into lava will still burn to a crisp. ;) lavadmg: false # Should arrow damage be disabled? projectiles: false # This will disable damage from touching cacti. contactdmg: false # Burn, baby, burn! Should fire damage be disabled? firedmg: false # Should the damage after hit by a lightning be disabled? lightning: false # Should Wither damage be disabled? wither: false # Disable weather options? weather: storm: false thunder: false lightning: false ############################################################ # +------------------------------------------------------+ # # | EssentialsAntiBuild | # # +------------------------------------------------------+ # ############################################################ # Disable various default physics and behaviors # For more information, visit http://wiki.ess3.net/wiki/AntiBuild # Should people with build: false in permissions be allowed to build? # Set true to disable building for those people. # Setting to false means EssentialsAntiBuild will never prevent you from building. build: true # Should people with build: false in permissions be allowed to use items? # Set true to disable using for those people. # Setting to false means EssentialsAntiBuild will never prevent you from using items. use: true # Should we tell people they are not allowed to build? warn-on-build-disallow: true # For which block types would you like to be alerted? # You can find a list of IDs in plugins/Essentials/items.csv after loading Essentials for the first time. # 10 = lava :: 11 = still lava :: 46 = TNT :: 327 = lava bucket alert: on-placement: 10,11,46,327 on-use: 327 on-break: blacklist: # Which blocks should people be prevented from placing? placement: 10,11,46,327 # Which items should people be prevented from using? usage: 327 # Which blocks should people be prevented from breaking? break: # Which blocks should not be pushed by pistons? piston: # Which blocks should not be dispensed by dispensers dispenser: ############################################################ # +------------------------------------------------------+ # # | Essentials Spawn / New Players | # # +------------------------------------------------------+ # ############################################################ newbies: # Should we announce to the server when someone logs in for the first time? # If so, use this format, replacing {DISPLAYNAME} with the player name. # If not, set to '' #announce-format: '' announce-format: '&cWelcome &e&l{DISPLAYNAME}&c to the &8R&7e&8t&7r&8o&4-&cFactions server!' # When we spawn for the first time, which spawnpoint do we use? # Set to "none" if you want to use the spawn point of the world. spawnpoint: newbies # Do we want to give users anything on first join? Set to '' to disable # This kit will be given regardless of cost, and permissions. #kit: '' kit: join # Set this to lowest, if you want Multiverse to handle the respawning. # Set this to high, if you want EssentialsSpawn to handle the respawning. # Set this to highest, if you want to force EssentialsSpawn to handle the respawning. respawn-listener-priority: high # When users die, should they respawn at their first home or bed, instead of the spawnpoint? respawn-at-home: false # End of File <-- No seriously, you're done with configuration.
dallyswag
############################################################ # +------------------------------------------------------+ # # | Notes | # # +------------------------------------------------------+ # ############################################################ # If you want to use special characters in this document, such as accented letters, you MUST save the file as UTF-8, not ANSI. # If you receive an error when Essentials loads, ensure that: # - No tabs are present: YAML only allows spaces # - Indents are correct: YAML hierarchy is based entirely on indentation # - You have "escaped" all apostrophes in your text: If you want to write "don't", for example, write "don''t" instead (note the doubled apostrophe) # - Text with symbols is enclosed in single or double quotation marks # If you have problems join the Essentials help support channel: http://tiny.cc/EssentialsChat ############################################################ # +------------------------------------------------------+ # # | Essentials (Global) | # # +------------------------------------------------------+ # ############################################################ # A color code between 0-9 or a-f. Set to 'none' to disable. ops-name-color: '4' # The character(s) to prefix all nicknames, so that you know they are not true usernames. nickname-prefix: '~' # The maximum length allowed in nicknames. The nickname prefix is included in this. max-nick-length: 15 # Disable this if you have any other plugin, that modifies the displayname of a user. change-displayname: true # When this option is enabled, the (tab) player list will be updated with the displayname. # The value of change-displayname (above) has to be true. #change-playerlist: true # When essentialschat.jar isn't used, force essentials to add the prefix and suffix from permission plugins to displayname. # This setting is ignored if essentialschat.jar is used, and defaults to 'true'. # The value of change-displayname (above) has to be true. # Do not edit this setting unless you know what you are doing! #add-prefix-suffix: false # If the teleport destination is unsafe, should players be teleported to the nearest safe location? # If this is set to true, Essentials will attempt to teleport players close to the intended destination. # If this is set to false, attempted teleports to unsafe locations will be cancelled with a warning. teleport-safety: true # The delay, in seconds, required between /home, /tp, etc. teleport-cooldown: 3 # The delay, in seconds, before a user actually teleports. If the user moves or gets attacked in this timeframe, the teleport never occurs. teleport-delay: 5 # The delay, in seconds, a player can't be attacked by other players after they have been teleported by a command. # This will also prevent the player attacking other players. teleport-invulnerability: 4 # The delay, in seconds, required between /heal or /feed attempts. heal-cooldown: 60 # What to prevent from /i /give. # e.g item-spawn-blacklist: 46,11,10 item-spawn-blacklist: # Set this to true if you want permission based item spawn rules. # Note: The blacklist above will be ignored then. # Example permissions (these go in your permissions manager): # - essentials.itemspawn.item-all # - essentials.itemspawn.item-[itemname] # - essentials.itemspawn.item-[itemid] # - essentials.give.item-all # - essentials.give.item-[itemname] # - essentials.give.item-[itemid] # - essentials.unlimited.item-all # - essentials.unlimited.item-[itemname] # - essentials.unlimited.item-[itemid] # - essentials.unlimited.item-bucket # Unlimited liquid placing # # For more information, visit http://wiki.ess3.net/wiki/Command_Reference/ICheat#Item.2FGive permission-based-item-spawn: false # Mob limit on the /spawnmob command per execution. spawnmob-limit: 1 # Shall we notify users when using /lightning? warn-on-smite: true # motd and rules are now configured in the files motd.txt and rules.txt. # When a command conflicts with another plugin, by default, Essentials will try to force the OTHER plugin to take priority. # Commands in this list, will tell Essentials to 'not give up' the command to other plugins. # In this state, which plugin 'wins' appears to be almost random. # # If you have two plugin with the same command and you wish to force Essentials to take over, you need an alias. # To force essentials to take 'god' alias 'god' to 'egod'. # See http://wiki.bukkit.org/Bukkit.yml#aliases for more information overridden-commands: # - god # - info # Disabling commands here will prevent Essentials handling the command, this will not affect command conflicts. # Commands should fallback to the vanilla versions if available. # You should not have to disable commands used in other plugins, they will automatically get priority. disabled-commands: # - nick # - clear - mail - mail.send - nuke - afk # These commands will be shown to players with socialSpy enabled. # You can add commands from other plugins you may want to track or # remove commands that are used for something you dont want to spy on. socialspy-commands: - msg - w - r - mail - m - t - whisper - emsg - tell - er - reply - ereply - email - action - describe - eme - eaction - edescribe - etell - ewhisper - pm # If you do not wish to use a permission system, you can define a list of 'player perms' below. # This list has no effect if you are using a supported permissions system. # If you are using an unsupported permissions system, simply delete this section. # Whitelist the commands and permissions you wish to give players by default (everything else is op only). # These are the permissions without the "essentials." part. player-commands: - afk - afk.auto - back - back.ondeath - balance - balance.others - balancetop - build - chat.color - chat.format - chat.shout - chat.question - clearinventory - compass - depth - delhome - getpos - geoip.show - help - helpop - home - home.others - ignore - info - itemdb - kit - kits.tools - list - mail - mail.send - me - motd - msg - msg.color - nick - near - pay - ping - protect - r - rules - realname - seen - sell - sethome - setxmpp - signs.create.protection - signs.create.trade - signs.break.protection - signs.break.trade - signs.use.balance - signs.use.buy - signs.use.disposal - signs.use.enchant - signs.use.free - signs.use.gamemode - signs.use.heal - signs.use.info - signs.use.kit - signs.use.mail - signs.use.protection - signs.use.repair - signs.use.sell - signs.use.time - signs.use.trade - signs.use.warp - signs.use.weather - spawn - suicide - time - tpa - tpaccept - tpahere - tpdeny - warp - warp.list - world - worth - xmpp # Note: All items MUST be followed by a quantity! # All kit names should be lower case, and will be treated as lower in permissions/costs. # Syntax: - itemID[:DataValue/Durability] Amount [Enchantment:Level].. [itemmeta:value]... # For Item meta information visit http://wiki.ess3.net/wiki/Item_Meta # 'delay' refers to the cooldown between how often you can use each kit, measured in seconds. # For more information, visit http://wiki.ess3.net/wiki/Kits kits: Goblin: delay: 3600 items: - 272 1 sharpness:2 unbreaking:1 looting:1 name:&8[&2Goblin&8]&fSword - 306 1 unbreaking:1 protection:1 name:&8[&2Goblin&8]&fHelmet - 307 1 unbreaking:1 protection:1 name:&8[&2Goblin&8]&fChestplate - 308 1 unbreaking:1 protection:1 name:&8[&2Goblin&8]&fLeggings - 309 1 unbreaking:1 protection:1 name:&8[&2Goblin&8]&fBoots - 256 1 efficiency:1 unbreaking:1 name:&8[&2Goblin&8]&fShovel - 257 1 efficiency:1 unbreaking:1 fortune:1 name:&8[&2Goblin&8]&fPickaxe - 258 1 efficiency:1 unbreaking:1 name:&8[&2Goblin&8]&fAxe - 364 16 Griefer: delay: 14400 items: - 276 1 sharpness:3 unbreaking:3 name:&8[&d&lGriefer&8]&fSword - 322:1 1 - 310 1 protection:2 name:&8[&d&lGriefer&8]&fHelmet - 311 1 protection:2 name:&8[&d&lGriefer&8]&fChestplate - 312 1 protection:2 name:&8[&d&lGriefer&8]&fLeggings - 313 1 protection:2 name:&8[&d&lGriefer&8]&fBoots Villager: delay: 43200 items: - 267 1 sharpness:4 name:&8[&eVillager&8]&fSword - 306 1 unbreaking:3 protection:4 name:&8[&eVillager&8]&fHelmet - 307 1 unbreaking:3 protection:4 name:&8[&eVillager&8]&fChestplate - 308 1 unbreaking:3 protection:4 name:&8[&eVillager&8]&fLeggings - 309 1 unbreaking:3 protection:4 name:&8[&eVillager&8]&fBoots - 388 10 - 383:120 2 Knight: delay: 43200 items: - 276 1 sharpness:3 name:&8[&cKnight&8]&fSword - 310 1 protection:2 name:&8[&cKnight&8]&fHelmet - 311 1 protection:2 name:&8[&cKnight&8]&fChestplate - 312 1 protection:2 name:&8[&cKnight&8]&fLeggings - 313 1 protection:2 name:&8[&cKnight&8]&fBoots - 388 20 - 383:120 4 King: delay: 43200 items: - 276 1 sharpness:4 fire:1 name:&8[&5King&8]&fSword - 310 1 protection:4 name:&8[&5King&8]&fHelmet - 311 1 protection:4 name:&8[&5King&8]&fChestplate - 312 1 protection:4 name:&8[&5King&8]&fLeggings - 313 1 protection:4 name:&8[&5King&8]&fBoots - 388 30 - 383:120 6 Hero: delay: 43200 items: - 276 1 sharpness:4 fire:2 name:&8[&aHero&8]&fSword - 310 1 protection:4 unbreaking:1 name:&8[&aHero&8]&fHelmet - 311 1 protection:4 unbreaking:1 name:&8[&aHero&8]&fChestplate - 312 1 protection:4 unbreaking:1 name:&8[&aHero&8]&fLeggings - 313 1 protection:4 unbreaking:1 name:&8[&aHero&8]&fBoots - 388 40 - 383:120 8 God: delay: 43200 items: - 276 1 sharpness:5 fire:2 name:&8[&4God&8]&fSword - 310 1 protection:4 unbreaking:3 name:&8[&4God&8]&fHelmet - 311 1 protection:4 unbreaking:3 name:&8[&4God&8]&fChestplate - 312 1 protection:4 unbreaking:3 name:&8[&4God&8]&fLeggings - 313 1 protection:4 unbreaking:3 name:&8[&4God&8]&fBoots - 388 50 - 383:120 10 - 322:1 5 Legend: delay: 43200 items: - 276 1 sharpness:5 fire:2 unbreaking:3 name:&8[&6&lLegend&8]&fSword - 310 1 protection:4 unbreaking:3 thorns:3 name:&8[&6&lLegend&8]&fHelmet - 311 1 protection:4 unbreaking:3 thorns:3 name:&8[&6&lLegend&8]&fChestplate - 312 1 protection:4 unbreaking:3 thorns:3 name:&8[&6&lLegend&8]&fLeggings - 313 1 protection:4 unbreaking:3 thorns:3 name:&8[&6&lLegend&8]&fBoots - 388 60 - 383:120 12 - 322:1 10 - 383:50 5 - 261 1 flame:1 power:5 punch:2 unbreaking:3 infinity:1 name:&8[&6&lLegend&8]&fBow - 262 1 - 279 1 sharpness:5 unbreaking:3 name:&8[&6&lLegend&8]&fAxe Youtube: delay: 43200 items: - 276 1 sharpness:5 fire:2 unbreaking:3 name:&8[&f&lYou&c&lTube&8]&fSword - 310 1 protection:4 unbreaking:3 thorns:3 name:&8[&f&lYou&c&lTube&8]&fHelmet - 311 1 protection:4 unbreaking:3 thorns:3 name:&8[&f&lYou&c&lTube&8]&fChestplate - 312 1 protection:4 unbreaking:3 thorns:3 name:&8[&f&lYou&c&lTube&8]&fLeggings - 313 1 protection:4 unbreaking:3 thorns:3 name:&8[&f&lYou&c&lTube&8]&fBoots - 388 60 - 383:120 12 - 322:1 10 - 383:50 5 - 261 1 flame:1 power:5 punch:2 unbreaking:3 infinity:1 name:&8[&f&lYou&c&lTube&8]&fBow - 262 1 - 279 1 sharpness:5 unbreaking:3 name:&8[&f&lYou&c&lTube&8]&fAxe Join: delay: 3600 items: - 17 16 - 333 1 - 49 32 - 50 16 - 4 64 - 373:8258 1 - 320 16 Reset: delay: 31536000 items: - 272 1 sharpness:4 unbreaking:3 name:&8[&cR&ee&as&be&dt&8]&fSword - 298 1 protection:3 unbreaking:1 name:&8[&cR&ee&as&be&dt&8]&fHelmet - 299 1 protection:3 unbreaking:1 name:&8[&cR&ee&as&be&dt&8]&fChestplate - 300 1 protection:3 unbreaking:1 name:&8[&cR&ee&as&be&dt&8]&fLeggings - 301 1 protection:3 unbreaking:1 name:&8[&cR&ee&as&be&dt&8]&fBoots - 354 1 name:&f&l Cake &4Vote # Essentials Sign Control # See http://wiki.ess3.net/wiki/Sign_Tutorial for instructions on how to use these. # To enable signs, remove # symbol. To disable all signs, comment/remove each sign. # Essentials Colored sign support will be enabled when any sign types are enabled. # Color is not an actual sign, it's for enabling using color codes on signs, when the correct permissions are given. enabledSigns: - color - balance - buy - sell #- trade #- free #- disposal #- warp #- kit #- mail #- enchant #- gamemode #- heal #- info #- spawnmob #- repair #- time #- weather # How many times per second can Essentials signs be interacted with per player. # Values should be between 1-20, 20 being virtually no lag protection. # Lower numbers will reduce the possibility of lag, but may annoy players. sign-use-per-second: 4 # Backup runs a batch/bash command while saving is disabled. backup: # Interval in minutes. interval: 30 # Unless you add a valid backup command or script here, this feature will be useless. # Use 'save-all' to simply force regular world saving without backup. #command: 'rdiff-backup World1 backups/World1' # Set this true to enable permission per warp. per-warp-permission: false # Sort output of /list command by groups. # You can hide and merge the groups displayed in /list by defining the desired behaviour here. # Detailed instructions and examples can be found on the wiki: http://wiki.ess3.net/wiki/List list: # To merge groups, list the groups you wish to merge #Staff: owner admin moderator Admins: owner admin # To limit groups, set a max user limit #builder: 20 # To hide groups, set the group as hidden #default: hidden # Uncomment the line below to simply list all players with no grouping #Players: '*' # More output to the console. debug: false # Set the locale for all messages. # If you don't set this, the default locale of the server will be used. # For example, to set language to English, set locale to en, to use the file "messages_en.properties". # Don't forget to remove the # in front of the line. # For more information, visit http://wiki.ess3.net/wiki/Locale #locale: en # Turn off god mode when people exit. remove-god-on-disconnect: false # Auto-AFK # After this timeout in seconds, the user will be set as afk. # This feature requires the player to have essentials.afk.auto node. # Set to -1 for no timeout. auto-afk: 300 # Auto-AFK Kick # After this timeout in seconds, the user will be kicked from the server. # essentials.afk.kickexempt node overrides this feature. # Set to -1 for no timeout. auto-afk-kick: -1 # Set this to true, if you want to freeze the player, if he is afk. # Other players or monsters can't push him out of afk mode then. # This will also enable temporary god mode for the afk player. # The player has to use the command /afk to leave the afk mode. freeze-afk-players: false # When the player is afk, should he be able to pickup items? # Enable this, when you don't want people idling in mob traps. disable-item-pickup-while-afk: false # This setting controls if a player is marked as active on interaction. # When this setting is false, you will need to manually un-AFK using the /afk command. cancel-afk-on-interact: true # Should we automatically remove afk status when the player moves? # Player will be removed from AFK on chat/command regardless of this setting. # Disable this to reduce server lag. cancel-afk-on-move: true # You can disable the death messages of Minecraft here. death-messages: false # Should operators be able to join and part silently. # You can control this with permissions if it is enabled. allow-silent-join-quit: true # You can set a custom join message here, set to "none" to disable. # You may use color codes, use {USERNAME} the player's name or {PLAYER} for the player's displayname. custom-join-message: "" # You can set a custom quit message here, set to "none" to disable. # You may use color codes, use {USERNAME} the player's name or {PLAYER} for the player's displayname. custom-quit-message: "" # Add worlds to this list, if you want to automatically disable god mode there. no-god-in-worlds: # - world_nether # Set to true to enable per-world permissions for teleporting between worlds with essentials commands. # This applies to /world, /back, /tp[a|o][here|all], but not warps. # Give someone permission to teleport to a world with essentials.worlds.<worldname> # This does not affect the /home command, there is a separate toggle below for this. world-teleport-permissions: false # The number of items given if the quantity parameter is left out in /item or /give. # If this number is below 1, the maximum stack size size is given. If over-sized stacks. # are not enabled, any number higher than the maximum stack size results in more than one stack. default-stack-size: -1 # Over-sized stacks are stacks that ignore the normal max stack size. # They can be obtained using /give and /item, if the player has essentials.oversizedstacks permission. # How many items should be in an over-sized stack? oversized-stacksize: 64 # Allow repair of enchanted weapons and armor. # If you set this to false, you can still allow it for certain players using the permission. # essentials.repair.enchanted repair-enchanted: true # Allow 'unsafe' enchantments in kits and item spawning. # Warning: Mixing and overleveling some enchantments can cause issues with clients, servers and plugins. unsafe-enchantments: false #Do you want essentials to keep track of previous location for /back in the teleport listener? #If you set this to true any plugin that uses teleport will have the previous location registered. register-back-in-listener: false #Delay to wait before people can cause attack damage after logging in. login-attack-delay: 5 #Set the max fly speed, values range from 0.1 to 1.0 max-fly-speed: 0.8 #Set the max walk speed, values range from 0.1 to 1.0 max-walk-speed: 0.8 #Set the maximum amount of mail that can be sent within a minute. mails-per-minute: 1000 # Set the maximum time /tempban can be used for in seconds. # Set to -1 to disable, and essentials.tempban.unlimited can be used to override. max-tempban-time: -1 ############################################################ # +------------------------------------------------------+ # # | EssentialsHome | # # +------------------------------------------------------+ # ############################################################ # Allows people to set their bed at daytime. update-bed-at-daytime: true # Set to true to enable per-world permissions for using homes to teleport between worlds. # This applies to the /home only. # Give someone permission to teleport to a world with essentials.worlds.<worldname> world-home-permissions: false # Allow players to have multiple homes. # Players need essentials.sethome.multiple before they can have more than 1 home. # You can set the default number of multiple homes using the 'default' rank below. # To remove the home limit entirely, give people 'essentials.sethome.multiple.unlimited'. # To grant different home amounts to different people, you need to define a 'home-rank' below. # Create the 'home-rank' below, and give the matching permission: essentials.sethome.multiple.<home-rank> # For more information, visit http://wiki.ess3.net/wiki/Multihome sethome-multiple: Goblin: 1 Villager: 2 Knight: 3 King: 4 Hero: 5 God: 6 # In this example someone with 'essentials.sethome.multiple' and 'essentials.sethome.multiple.vip' will have 5 homes. # Set timeout in seconds for players to accept tpa before request is cancelled. # Set to 0 for no timeout. tpa-accept-cancellation: 120 ############################################################ # +------------------------------------------------------+ # # | EssentialsEco | # # +------------------------------------------------------+ # ############################################################ # For more information, visit http://wiki.ess3.net/wiki/Essentials_Economy # Defines the balance with which new players begin. Defaults to 0. starting-balance: 1000 # worth-# defines the value of an item when it is sold to the server via /sell. # These are now defined in worth.yml # Defines the cost to use the given commands PER USE. # Some commands like /repair have sub-costs, check the wiki for more information. command-costs: # /example costs $1000 PER USE #example: 1000 # /kit tools costs $1500 PER USE #kit-tools: 1500 # Set this to a currency symbol you want to use. currency-symbol: '$' # Set the maximum amount of money a player can have. # The amount is always limited to 10 trillion because of the limitations of a java double. max-money: 10000000000000 # Set the minimum amount of money a player can have (must be above the negative of max-money). # Setting this to 0, will disable overdrafts/loans completely. Users need 'essentials.eco.loan' perm to go below 0. min-money: -10000 # Enable this to log all interactions with trade/buy/sell signs and sell command. economy-log-enabled: false ############################################################ # +------------------------------------------------------+ # # | EssentialsHelp | # # +------------------------------------------------------+ # ############################################################ # Show other plugins commands in help. non-ess-in-help: true # Hide plugins which do not give a permission. # You can override a true value here for a single plugin by adding a permission to a user/group. # The individual permission is: essentials.help.<plugin>, anyone with essentials.* or '*' will see all help regardless. # You can use negative permissions to remove access to just a single plugins help if the following is enabled. hide-permissionless-help: true ############################################################ # +------------------------------------------------------+ # # | EssentialsChat | # # +------------------------------------------------------+ # ############################################################ chat: # If EssentialsChat is installed, this will define how far a player's voice travels, in blocks. Set to 0 to make all chat global. # Note that users with the "essentials.chat.spy" permission will hear everything, regardless of this setting. # Users with essentials.chat.shout can override this by prefixing text with an exclamation mark (!) # Users with essentials.chat.question can override this by prefixing text with a question mark (?) # You can add command costs for shout/question by adding chat-shout and chat-question to the command costs section." radius: 0 # Chat formatting can be done in two ways, you can either define a standard format for all chat. # Or you can give a group specific chat format, to give some extra variation. # If set to the default chat format which "should" be compatible with ichat. # For more information of chat formatting, check out the wiki: http://wiki.ess3.net/wiki/Chat_Formatting format: '<{DISPLAYNAME}> {MESSAGE}' #format: '&7[{GROUP}]&r {DISPLAYNAME}&7:&r {MESSAGE}' group-formats: Goblin: '&7{DISPLAYNAME}&8:&f&o {MESSAGE}' Youtuber: '&7{DISPLAYNAME}&8:&f {MESSAGE}' Witch: '&7{DISPLAYNAME}&8:&f&o {MESSAGE}' Wizard: '&7{DISPLAYNAME}&8:&f {MESSAGE}' Sorcerer: '&7{DISPLAYNAME}&8:&f {MESSAGE}' Raider: '&7{DISPLAYNAME}&8:&f {MESSAGE}' Greifer: '&7{DISPLAYNAME}&8:&a {MESSAGE}' ChatMod: '&7{DISPLAYNAME}&8:&f {MESSAGE}' Owner: '&7{DISPLAYNAME}&8:&c {MESSAGE}' OP: '&7{DISPLAYNAME}&8:&f {MESSAGE}' Developer: '&7{DISPLAYNAME}&8:&f {MESSAGE}' HeadAdmin: '&7{DISPLAYNAME}&8:&f {MESSAGE}' Admin: '&7{DISPLAYNAME}&8:&f {MESSAGE}' JuniorAdmin: '&7{DISPLAYNAME}&8:&f {MESSAGE}' StaffManager: '&7{DISPLAYNAME}&8:&f {MESSAGE}' ForumAdmin: '&7{DISPLAYNAME}&8:&f {MESSAGE}' HeadModerator: '&7{DISPLAYNAME}&8:&f {MESSAGE}' Moderator: '&7{DISPLAYNAME}&8:&f {MESSAGE}' Helper: '&7{DISPLAYNAME}&8:&f {MESSAGE}' Villager: '&7{DISPLAYNAME}&8:&f {MESSAGE}' Knight: '&7{DISPLAYNAME}&8:&f {MESSAGE}' King: '&7{DISPLAYNAME}&8:&f {MESSAGE}' Hero: '&7{DISPLAYNAME}&8:&f {MESSAGE}' God: '&7{DISPLAYNAME}&8:&f {MESSAGE}' Legend: '&7{DISPLAYNAME}&8:&b {MESSAGE}' # If you are using group formats make sure to remove the '#' to allow the setting to be read. ############################################################ # +------------------------------------------------------+ # # | EssentialsProtect | # # +------------------------------------------------------+ # ############################################################ protect: # General physics/behavior modifications. prevent: lava-flow: false water-flow: false water-bucket-flow: false fire-spread: true lava-fire-spread: true flint-fire: false lightning-fire-spread: true portal-creation: false tnt-explosion: false tnt-playerdamage: false tnt-minecart-explosion: false tnt-minecart-playerdamage: false fireball-explosion: false fireball-fire: false fireball-playerdamage: false witherskull-explosion: false witherskull-playerdamage: false wither-spawnexplosion: false wither-blockreplace: false creeper-explosion: false creeper-playerdamage: false creeper-blockdamage: false enderdragon-blockdamage: true enderman-pickup: false villager-death: false # Monsters won't follow players. # permission essentials.protect.entitytarget.bypass disables this. entitytarget: false # Prevent the spawning of creatures. spawn: creeper: false skeleton: false spider: false giant: false zombie: false slime: false ghast: false pig_zombie: false enderman: false cave_spider: false silverfish: false blaze: false magma_cube: false ender_dragon: false pig: false sheep: false cow: false chicken: false squid: false wolf: false mushroom_cow: false snowman: false ocelot: false iron_golem: false villager: false wither: true bat: false witch: false horse: false # Maximum height the creeper should explode. -1 allows them to explode everywhere. # Set prevent.creeper-explosion to true, if you want to disable creeper explosions. creeper: max-height: -1 # Disable various default physics and behaviors. disable: # Should fall damage be disabled? fall: false # Users with the essentials.protect.pvp permission will still be able to attack each other if this is set to true. # They will be unable to attack users without that same permission node. pvp: false # Should drowning damage be disabled? # (Split into two behaviors; generally, you want both set to the same value.) drown: false suffocate: false # Should damage via lava be disabled? Items that fall into lava will still burn to a crisp. ;) lavadmg: false # Should arrow damage be disabled? projectiles: false # This will disable damage from touching cacti. contactdmg: false # Burn, baby, burn! Should fire damage be disabled? firedmg: false # Should the damage after hit by a lightning be disabled? lightning: false # Should Wither damage be disabled? wither: false # Disable weather options? weather: storm: false thunder: false lightning: false ############################################################ # +------------------------------------------------------+ # # | EssentialsAntiBuild | # # +------------------------------------------------------+ # ############################################################ # Disable various default physics and behaviors # For more information, visit http://wiki.ess3.net/wiki/AntiBuild # Should people with build: false in permissions be allowed to build? # Set true to disable building for those people. # Setting to false means EssentialsAntiBuild will never prevent you from building. build: true # Should people with build: false in permissions be allowed to use items? # Set true to disable using for those people. # Setting to false means EssentialsAntiBuild will never prevent you from using items. use: true # Should we tell people they are not allowed to build? warn-on-build-disallow: true # For which block types would you like to be alerted? # You can find a list of IDs in plugins/Essentials/items.csv after loading Essentials for the first time. # 10 = lava :: 11 = still lava :: 46 = TNT :: 327 = lava bucket alert: on-placement: 10,11,46,327 on-use: 327 on-break: blacklist: # Which blocks should people be prevented from placing? placement: 10,11,46,327 # Which items should people be prevented from using? usage: 327 # Which blocks should people be prevented from breaking? break: # Which blocks should not be pushed by pistons? piston: # Which blocks should not be dispensed by dispensers dispenser: ############################################################ # +------------------------------------------------------+ # # | Essentials Spawn / New Players | # # +------------------------------------------------------+ # ############################################################ newbies: # Should we announce to the server when someone logs in for the first time? # If so, use this format, replacing {DISPLAYNAME} with the player name. # If not, set to '' #announce-format: '' announce-format: '&cWelcome &e&l{DISPLAYNAME}&c to the &8R&7e&8t&7r&8o&4-&cFactions server!' # When we spawn for the first time, which spawnpoint do we use? # Set to "none" if you want to use the spawn point of the world. spawnpoint: newbies # Do we want to give users anything on first join? Set to '' to disable # This kit will be given regardless of cost, and permissions. #kit: '' kit: join # Set this to lowest, if you want Multiverse to handle the respawning. # Set this to high, if you want EssentialsSpawn to handle the respawning. # Set this to highest, if you want to force EssentialsSpawn to handle the respawning. respawn-listener-priority: high # When users die, should they respawn at their first home or bed, instead of the spawnpoint? respawn-at-home: false # End of File <-- No seriously, you're done with configuration.
// Generated by CoffeeScript 1.6.3 (function() { var Command, RoomHelper, User, afkCheck, afksCommand, allAfksCommand, announceCurate, antispam, apiHooks, avgVoteRatioCommand, badQualityCommand, beggar, chatCommandDispatcher, chatUniversals, cmds, commandsCommand, cookieCommand, data, dieCommand, disconnectLookupCommand, downloadCommand, forceSkipCommand, handleNewSong, handleUserJoin, handleUserLeave, handleVote, hook, initEnvironment, initHooks, initialize, lockCommand, msToStr, newSongsCommand, overplayedCommand, popCommand, populateUserData, pupOnline, pushCommand, reloadCommand, resetAfkCommand, roomHelpCommand, rulesCommand, settings, skipCommand, sourceCommand, statusCommand, swapCommand, themeCommand, undoHooks, unhook, unhookCommand, unlockCommand, updateVotes, uservoiceCommand, voteRatioCommand, whyMehCommand, whyWootCommand, wootCommand, _ref, _ref1, _ref10, _ref11, _ref12, _ref13, _ref14, _ref15, _ref16, _ref17, _ref18, _ref19, _ref2, _ref20, _ref21, _ref22, _ref23, _ref24, _ref25, _ref26, _ref27, _ref28, _ref29, _ref3, _ref30, _ref4, _ref5, _ref6, _ref7, _ref8, _ref9, __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; settings = (function() { function settings() { this.implode = __bind(this.implode, this); this.intervalMessages = __bind(this.intervalMessages, this); this.startAfkInterval = __bind(this.startAfkInterval, this); this.setInternalWaitlist = __bind(this.setInternalWaitlist, this); this.userJoin = __bind(this.userJoin, this); this.getRoomUrlPath = __bind(this.getRoomUrlPath, this); this.startup = __bind(this.startup, this); } settings.prototype.currentsong = {}; settings.prototype.users = {}; settings.prototype.djs = []; settings.prototype.mods = []; settings.prototype.host = []; settings.prototype.hasWarned = false; settings.prototype.currentwoots = 0; settings.prototype.currentmehs = 0; settings.prototype.currentcurates = 0; settings.prototype.roomUrlPath = null; settings.prototype.internalWaitlist = []; settings.prototype.userDisconnectLog = []; settings.prototype.voteLog = {}; settings.prototype.seshOn = false; settings.prototype.forceSkip = false; settings.prototype.seshMembers = []; settings.prototype.launchTime = null; settings.prototype.totalVotingData = { woots: 0, mehs: 0, curates: 0 }; settings.prototype.pupScriptUrl = ''; settings.prototype.afkTime = 12 * 60 * 1000; settings.prototype.songIntervalMessages = [ { interval: 15, offset: 0, msg: "I'm a bot!" } ]; settings.prototype.songCount = 0; settings.prototype.startup = function() { this.launchTime = new Date(); return this.roomUrlPath = this.getRoomUrlPath(); }; settings.prototype.getRoomUrlPath = function() { return window.location.pathname.replace(/\//g, ''); }; settings.prototype.newSong = function() { this.totalVotingData.woots += this.currentwoots; this.totalVotingData.mehs += this.currentmehs; this.totalVotingData.curates += this.currentcurates; this.setInternalWaitlist(); this.currentsong = API.getMedia(); if (this.currentsong !== null) { return this.currentsong; } else { return false; } }; settings.prototype.userJoin = function(u) { var userIds, _ref; userIds = Object.keys(this.users); if (_ref = u.id, __indexOf.call(userIds, _ref) >= 0) { return this.users[u.id].inRoom(true); } else { this.users[u.id] = new User(u); return this.voteLog[u.id] = {}; } }; settings.prototype.setInternalWaitlist = function() { var boothWaitlist, fullWaitList, lineWaitList; boothWaitlist = API.getDJs().slice(1); lineWaitList = API.getWaitList(); fullWaitList = boothWaitlist.concat(lineWaitList); return this.internalWaitlist = fullWaitList; }; settings.prototype.activity = function(obj) { if (obj.type === 'message') { return this.users[obj.fromID].updateActivity(); } }; settings.prototype.startAfkInterval = function() { return this.afkInterval = setInterval(afkCheck, 2000); }; settings.prototype.intervalMessages = function() { var msg, _i, _len, _ref, _results; this.songCount++; _ref = this.songIntervalMessages; _results = []; for (_i = 0, _len = _ref.length; _i < _len; _i++) { msg = _ref[_i]; if (((this.songCount + msg['offset']) % msg['interval']) === 0) { _results.push(API.sendChat(msg['msg'])); } else { _results.push(void 0); } } return _results; }; settings.prototype.implode = function() { var item, val; for (item in this) { val = this[item]; if (typeof this[item] === 'object') { delete this[item]; } } return clearInterval(this.afkInterval); }; settings.prototype.lockBooth = function(callback) { if (callback == null) { callback = null; } return $.ajax({ url: "http://plug.dj/_/gateway/room.update_options", type: 'POST', data: JSON.stringify({ service: "room.update_options", body: [ this.roomUrlPath, { "boothLocked": true, "waitListEnabled": true, "maxPlays": 1, "maxDJs": 5 } ] }), async: this.async, dataType: 'json', contentType: 'application/json' }).done(function() { if (callback != null) { return callback(); } }); }; settings.prototype.unlockBooth = function(callback) { if (callback == null) { callback = null; } return $.ajax({ url: "http://plug.dj/_/gateway/room.update_options", type: 'POST', data: JSON.stringify({ service: "room.update_options", body: [ this.roomUrlPath, { "boothLocked": false, "waitListEnabled": true, "maxPlays": 1, "maxDJs": 5 } ] }), async: this.async, dataType: 'json', contentType: 'application/json' }).done(function() { if (callback != null) { return callback(); } }); }; return settings; })(); data = new settings(); User = (function() { User.prototype.afkWarningCount = 0; User.prototype.lastWarning = null; User.prototype["protected"] = false; User.prototype.isInRoom = true; function User(user) { this.user = user; this.updateVote = __bind(this.updateVote, this); this.inRoom = __bind(this.inRoom, this); this.notDj = __bind(this.notDj, this); this.warn = __bind(this.warn, this); this.getIsDj = __bind(this.getIsDj, this); this.getWarningCount = __bind(this.getWarningCount, this); this.getUser = __bind(this.getUser, this); this.getLastWarning = __bind(this.getLastWarning, this); this.getLastActivity = __bind(this.getLastActivity, this); this.updateActivity = __bind(this.updateActivity, this); this.init = __bind(this.init, this); this.init(); } User.prototype.init = function() { return this.lastActivity = new Date(); }; User.prototype.updateActivity = function() { this.lastActivity = new Date(); this.afkWarningCount = 0; return this.lastWarning = null; }; User.prototype.getLastActivity = function() { return this.lastActivity; }; User.prototype.getLastWarning = function() { if (this.lastWarning === null) { return false; } else { return this.lastWarning; } }; User.prototype.getUser = function() { return this.user; }; User.prototype.getWarningCount = function() { return this.afkWarningCount; }; User.prototype.getIsDj = function() { var DJs, dj, _i, _len; DJs = API.getDJs(); for (_i = 0, _len = DJs.length; _i < _len; _i++) { dj = DJs[_i]; if (this.user.id === dj.id) { return true; } } return false; }; User.prototype.warn = function() { this.afkWarningCount++; return this.lastWarning = new Date(); }; User.prototype.notDj = function() { this.afkWarningCount = 0; return this.lastWarning = null; }; User.prototype.inRoom = function(online) { return this.isInRoom = online; }; User.prototype.updateVote = function(v) { if (this.isInRoom) { return data.voteLog[this.user.id][data.currentsong.id] = v; } }; return User; })(); RoomHelper = (function() { function RoomHelper() {} RoomHelper.prototype.lookupUser = function(username) { var id, u, _ref; _ref = data.users; for (id in _ref) { u = _ref[id]; if (u.getUser().username === username) { return u.getUser(); } } return false; }; RoomHelper.prototype.userVoteRatio = function(user) { var songId, songVotes, vote, votes; songVotes = data.voteLog[user.id]; votes = { 'woot': 0, 'meh': 0 }; for (songId in songVotes) { vote = songVotes[songId]; if (vote === 1) { votes['woot']++; } else if (vote === -1) { votes['meh']++; } } votes['positiveRatio'] = (votes['woot'] / (votes['woot'] + votes['meh'])).toFixed(2); return votes; }; return RoomHelper; })(); pupOnline = function() { return API.sendChat("Bot Online!"); }; populateUserData = function() { var u, users, _i, _len; users = API.getUsers(); for (_i = 0, _len = users.length; _i < _len; _i++) { u = users[_i]; data.users[u.id] = new User(u); data.voteLog[u.id] = {}; } }; initEnvironment = function() { document.getElementById("button-vote-positive").click(); return document.getElementById("button-sound").click(); }; initialize = function() { pupOnline(); populateUserData(); initEnvironment(); initHooks(); data.startup(); data.newSong(); return data.startAfkInterval(); }; afkCheck = function() { var DJs, id, lastActivity, lastWarned, now, oneMinute, secsLastActive, timeSinceLastActivity, timeSinceLastWarning, twoMinutes, user, warnMsg, _ref, _results; _ref = data.users; _results = []; for (id in _ref) { user = _ref[id]; now = new Date(); lastActivity = user.getLastActivity(); timeSinceLastActivity = now.getTime() - lastActivity.getTime(); if (timeSinceLastActivity > data.afkTime) { if (user.getIsDj()) { secsLastActive = timeSinceLastActivity / 1000; if (user.getWarningCount() === 0) { user.warn(); _results.push(API.sendChat("@" + user.getUser().username + ", I haven't seen you chat or vote in at least 12 minutes. Are you AFK? If you don't show activity in 2 minutes I will remove you.")); } else if (user.getWarningCount() === 1) { lastWarned = user.getLastWarning(); timeSinceLastWarning = now.getTime() - lastWarned.getTime(); twoMinutes = 2 * 60 * 1000; if (timeSinceLastWarning > twoMinutes) { user.warn(); warnMsg = "@" + user.getUser().username; warnMsg += ", I haven't seen you chat or vote in at least 14 minutes now. This is your second and FINAL warning. If you do not chat or vote in the next minute I will remove you."; _results.push(API.sendChat(warnMsg)); } else { _results.push(void 0); } } else if (user.getWarningCount() === 2) { lastWarned = user.getLastWarning(); timeSinceLastWarning = now.getTime() - lastWarned.getTime(); oneMinute = 1 * 60 * 1000; if (timeSinceLastWarning > oneMinute) { DJs = API.getDJs(); if (DJs.length > 0 && DJs[0].id !== user.getUser().id) { API.sendChat("@" + user.getUser().username + ", you had 2 warnings. Please stay active by chatting or voting."); API.moderateRemoveDJ(id); _results.push(user.warn()); } else { _results.push(void 0); } } else { _results.push(void 0); } } else { _results.push(void 0); } } else { _results.push(user.notDj()); } } else { _results.push(void 0); } } return _results; }; msToStr = function(msTime) { var ms, msg, timeAway; msg = ''; timeAway = { 'days': 0, 'hours': 0, 'minutes': 0, 'seconds': 0 }; ms = { 'day': 24 * 60 * 60 * 1000, 'hour': 60 * 60 * 1000, 'minute': 60 * 1000, 'second': 1000 }; if (msTime > ms['day']) { timeAway['days'] = Math.floor(msTime / ms['day']); msTime = msTime % ms['day']; } if (msTime > ms['hour']) { timeAway['hours'] = Math.floor(msTime / ms['hour']); msTime = msTime % ms['hour']; } if (msTime > ms['minute']) { timeAway['minutes'] = Math.floor(msTime / ms['minute']); msTime = msTime % ms['minute']; } if (msTime > ms['second']) { timeAway['seconds'] = Math.floor(msTime / ms['second']); } if (timeAway['days'] !== 0) { msg += timeAway['days'].toString() + 'd'; } if (timeAway['hours'] !== 0) { msg += timeAway['hours'].toString() + 'h'; } if (timeAway['minutes'] !== 0) { msg += timeAway['minutes'].toString() + 'm'; } if (timeAway['seconds'] !== 0) { msg += timeAway['seconds'].toString() + 's'; } if (msg !== '') { return msg; } else { return false; } }; Command = (function() { function Command(msgData) { this.msgData = msgData; this.init(); } Command.prototype.init = function() { this.parseType = null; this.command = null; return this.rankPrivelege = null; }; Command.prototype.functionality = function(data) {}; Command.prototype.hasPrivelege = function() { var user; user = data.users[this.msgData.fromID].getUser(); switch (this.rankPrivelege) { case 'host': return user.permission === 5; case 'cohost': return user.permission >= 4; case 'mod': return user.permission >= 3; case 'manager': return user.permission >= 3; case 'bouncer': return user.permission >= 2; case 'featured': return user.permission >= 1; default: return true; } }; Command.prototype.commandMatch = function() { var command, msg, _i, _len, _ref; msg = this.msgData.message; if (typeof this.command === 'string') { if (this.parseType === 'exact') { if (msg === this.command) { return true; } else { return false; } } else if (this.parseType === 'startsWith') { if (msg.substr(0, this.command.length) === this.command) { return true; } else { return false; } } else if (this.parseType === 'contains') { if (msg.indexOf(this.command) !== -1) { return true; } else { return false; } } } else if (typeof this.command === 'object') { _ref = this.command; for (_i = 0, _len = _ref.length; _i < _len; _i++) { command = _ref[_i]; if (this.parseType === 'exact') { if (msg === command) { return true; } } else if (this.parseType === 'startsWith') { if (msg.substr(0, command.length) === command) { return true; } } else if (this.parseType === 'contains') { if (msg.indexOf(command) !== -1) { return true; } } } return false; } }; Command.prototype.evalMsg = function() { if (this.commandMatch() && this.hasPrivelege()) { this.functionality(); return true; } else { return false; } }; return Command; })(); cookieCommand = (function(_super) { __extends(cookieCommand, _super); function cookieCommand() { _ref = cookieCommand.__super__.constructor.apply(this, arguments); return _ref; } cookieCommand.prototype.init = function() { this.command = 'cookie'; this.parseType = 'startsWith'; return this.rankPrivelege = 'mod'; }; cookieCommand.prototype.getCookie = function() { var c, cookies; cookies = ["a chocolate chip cookie", "a sugar cookie", "an oatmeal raisin cookie", "a 'special' brownie", "an animal cracker", "a scooby snack", "a blueberry muffin", "a cupcake"]; c = Math.floor(Math.random() * cookies.length); return cookies[c]; }; cookieCommand.prototype.functionality = function() { var msg, r, user; msg = this.msgData.message; r = new RoomHelper(); if (msg.substring(7, 8) === "@") { user = r.lookupUser(msg.substr(8)); if (user === false) { API.sendChat("/em doesn't see '" + msg.substr(8) + "' in room and eats cookie himself"); return false; } else { return API.sendChat("@" + user.username + ", @" + this.msgData.from + " has rewarded you with " + this.getCookie() + ". Enjoy."); } } }; return cookieCommand; })(Command); newSongsCommand = (function(_super) { __extends(newSongsCommand, _super); function newSongsCommand() { _ref1 = newSongsCommand.__super__.constructor.apply(this, arguments); return _ref1; } newSongsCommand.prototype.init = function() { this.command = '!newsongs'; this.parseType = 'startsWith'; return this.rankPrivelege = 'user'; }; newSongsCommand.prototype.functionality = function() { var arts, cMedia, chans, chooseRandom, mChans, msg, selections, u, _ref2; mChans = this.memberChannels.slice(0); chans = this.channels.slice(0); arts = this.artists.slice(0); chooseRandom = function(list) { var l, r; l = list.length; r = Math.floor(Math.random() * l); return list.splice(r, 1); }; selections = { channels: [], artist: '' }; u = data.users[this.msgData.fromID].getUser().username; if (u.indexOf("MistaDubstep") !== -1) { selections['channels'].push('MistaDubstep'); } else if (u.indexOf("Underground Promotions") !== -1) { selections['channels'].push('UndergroundDubstep'); } else { selections['channels'].push(chooseRandom(mChans)); } selections['channels'].push(chooseRandom(chans)); selections['channels'].push(chooseRandom(chans)); cMedia = API.getMedia(); if ((cMedia != null) && (_ref2 = cMedia.author, __indexOf.call(arts, _ref2) >= 0)) { selections['artist'] = cMedia.author; } else { selections['artist'] = chooseRandom(arts); } msg = "Everyone's heard that " + selections['artist'] + " track! Get new music from http://youtube.com/" + selections['channels'][0] + " http://youtube.com/" + selections['channels'][1] + " or http://youtube.com/" + selections['channels'][2]; return API.sendChat(msg); }; newSongsCommand.prototype.memberChannels = ["JitterStep", "MistaDubstep", "DubStationPromotions", "UndergroundDubstep", "JesusDied4Dubstep", "DarkstepWarrior", "BombshockDubstep", "Sharestep"]; newSongsCommand.prototype.channels = ["BassRape", "Mudstep", "WobbleCraftDubz", "MonstercatMedia", "UKFdubstep", "DropThatBassline", "Dubstep", "VitalDubstep", "AirwaveDubstepTV", "EpicNetworkMusic", "NoOffenseDubstep", "InspectorDubplate", "ReptileDubstep", "MrMoMDubstep", "FrixionNetwork", "IcyDubstep", "DubstepWeed", "VhileMusic", "LessThan3Dubstep", "PleaseMindTheDUBstep", "ClownDubstep", "TheULTRADUBSTEP", "DuBM0nkeyz", "DubNationUK", "TehDubstepChannel", "BassDropMedia", "USdubstep", "UNITEDubstep"]; newSongsCommand.prototype.artists = ["Skrillex", "Doctor P", "Excision", "Flux Pavilion", "Knife Party", "Krewella", "Rusko", "Bassnectar", "Nero", "Deadmau5", "Borgore", "Zomboy"]; return newSongsCommand; })(Command); whyWootCommand = (function(_super) { __extends(whyWootCommand, _super); function whyWootCommand() { _ref2 = whyWootCommand.__super__.constructor.apply(this, arguments); return _ref2; } whyWootCommand.prototype.init = function() { this.command = '!whywoot'; this.parseType = 'startsWith'; return this.rankPrivelege = 'user'; }; whyWootCommand.prototype.functionality = function() { var msg, nameIndex; msg = "We dislike AFK djs. We calculate your AFK status by checking the last time you Woot'd or spoke. If you don't woot, I'll automagically remove you. Use our AutoWoot script to avoid being removed: http://bit.ly/McZdWw"; if ((nameIndex = this.msgData.message.indexOf('@')) !== -1) { return API.sendChat(this.msgData.message.substr(nameIndex) + ', ' + msg); } else { return API.sendChat(msg); } }; return whyWootCommand; })(Command); themeCommand = (function(_super) { __extends(themeCommand, _super); function themeCommand() { _ref3 = themeCommand.__super__.constructor.apply(this, arguments); return _ref3; } themeCommand.prototype.init = function() { this.command = '!theme'; this.parseType = 'startsWith'; return this.rankPrivelege = 'user'; }; themeCommand.prototype.functionality = function() { var msg; msg = "Any type of Bass Music is allowed here. Including Dubstep, Complextro, Drum and Bass, "; msg += "Garage, Breakbeat, Hardstyle, Moombahton, HEAVY EDM, House, Electro, and Trance!!"; return API.sendChat(msg); }; return themeCommand; })(Command); rulesCommand = (function(_super) { __extends(rulesCommand, _super); function rulesCommand() { _ref4 = rulesCommand.__super__.constructor.apply(this, arguments); return _ref4; } rulesCommand.prototype.init = function() { this.command = '!rules'; this.parseType = 'startsWith'; return this.rankPrivelege = 'user'; }; rulesCommand.prototype.functionality = function() { var msg; msg = "1) Play good sound quality music. "; msg += "2) Don't replay a song on the room history. 3) Max song limit 8 minutes. "; msg += "4) DO NOT GO AWAY FROM KEYBOARD ON DECK! Please WOOT on DJ Booth and respect your fellow DJs!"; return API.sendChat(msg); }; return rulesCommand; })(Command); roomHelpCommand = (function(_super) { __extends(roomHelpCommand, _super); function roomHelpCommand() { _ref5 = roomHelpCommand.__super__.constructor.apply(this, arguments); return _ref5; } roomHelpCommand.prototype.init = function() { this.command = '!roomhelp'; this.parseType = 'startsWith'; return this.rankPrivelege = 'user'; }; roomHelpCommand.prototype.functionality = function() { var msg1, msg2; msg1 = "Welcome to the Dubstep Den! Create a playlist and populate it with songs from either YouTube or Soundcloud. "; msg1 += "Click the 'Join Waitlist' button and wait your turn to play music. Most electronic music allowed, type '/theme' for specifics."; msg2 = "Stay active while waiting to play your song or I'll remove you. Play good quality music that hasn't been played recently (check room history). "; msg2 += "Avoid over played artists like Skrillex. Ask a mod if you're unsure about your song choice"; API.sendChat(msg1); return setTimeout((function() { return API.sendChat(msg2); }), 750); }; return roomHelpCommand; })(Command); sourceCommand = (function(_super) { __extends(sourceCommand, _super); function sourceCommand() { _ref6 = sourceCommand.__super__.constructor.apply(this, arguments); return _ref6; } sourceCommand.prototype.init = function() { this.command = ['/source', '/sourcecode', '/author']; this.parseType = 'exact'; return this.rankPrivelege = 'user'; }; sourceCommand.prototype.functionality = function() { var msg; msg = 'Backus wrote me in CoffeeScript. A generalized version of me should be available on github soon!'; return API.sendChat(msg); }; return sourceCommand; })(Command); wootCommand = (function(_super) { __extends(wootCommand, _super); function wootCommand() { _ref7 = wootCommand.__super__.constructor.apply(this, arguments); return _ref7; } wootCommand.prototype.init = function() { this.command = '!woot'; this.parseType = 'startsWith'; return this.rankPrivelege = 'user'; }; wootCommand.prototype.functionality = function() { var msg, nameIndex; msg = "Please WOOT on DJ Booth and support your fellow DJs! AutoWoot: http://bit.ly/Lwcis0"; if ((nameIndex = this.msgData.message.indexOf('@')) !== -1) { return API.sendChat(this.msgData.message.substr(nameIndex) + ', ' + msg); } else { return API.sendChat(msg); } }; return wootCommand; })(Command); badQualityCommand = (function(_super) { __extends(badQualityCommand, _super); function badQualityCommand() { _ref8 = badQualityCommand.__super__.constructor.apply(this, arguments); return _ref8; } badQualityCommand.prototype.init = function() { this.command = '.128'; this.parseType = 'exact'; return this.rankPrivelege = 'mod'; }; badQualityCommand.prototype.functionality = function() { var msg; msg = "Flagged for bad sound quality. Where do you get your music? The garbage can? Don't play this low quality tune again!"; return API.sendChat(msg); }; return badQualityCommand; })(Command); downloadCommand = (function(_super) { __extends(downloadCommand, _super); function downloadCommand() { _ref9 = downloadCommand.__super__.constructor.apply(this, arguments); return _ref9; } downloadCommand.prototype.init = function() { this.command = '!download'; this.parseType = 'exact'; return this.rankPrivelege = 'user'; }; downloadCommand.prototype.functionality = function() { var e, eAuthor, eTitle, msg; if (data.currentsong == null) { return; } e = encodeURIComponent; eAuthor = e(data.currentsong.author); eTitle = e(data.currentsong.title); msg = "Try this link for HIGH QUALITY DOWNLOAD: http://google.com/#hl=en&q="; msg += eAuthor + "%20-%20" + eTitle; msg += "%20site%3Azippyshare.com%20OR%20site%3Asoundowl.com%20OR%20site%3Ahulkshare.com%20OR%20site%3Asoundcloud.com"; return API.sendChat(msg); }; return downloadCommand; })(Command); afksCommand = (function(_super) { __extends(afksCommand, _super); function afksCommand() { _ref10 = afksCommand.__super__.constructor.apply(this, arguments); return _ref10; } afksCommand.prototype.init = function() { this.command = '!afks'; this.parseType = 'exact'; return this.rankPrivelege = 'user'; }; afksCommand.prototype.functionality = function() { var dj, djAfk, djs, msg, now, _i, _len; msg = ''; djs = API.getDJs(); for (_i = 0, _len = djs.length; _i < _len; _i++) { dj = djs[_i]; now = new Date(); djAfk = now.getTime() - data.users[dj.id].getLastActivity().getTime(); if (djAfk > (5 * 60 * 1000)) { if (msToStr(djAfk) !== false) { msg += dj.username + ' - ' + msToStr(djAfk); msg += '. '; } } } if (msg === '') { return API.sendChat("No one is AFK"); } else { return API.sendChat('AFKs: ' + msg); } }; return afksCommand; })(Command); allAfksCommand = (function(_super) { __extends(allAfksCommand, _super); function allAfksCommand() { _ref11 = allAfksCommand.__super__.constructor.apply(this, arguments); return _ref11; } allAfksCommand.prototype.init = function() { this.command = '!allafks'; this.parseType = 'exact'; return this.rankPrivelege = 'user'; }; allAfksCommand.prototype.functionality = function() { var msg, now, u, uAfk, usrs, _i, _len; msg = ''; usrs = API.getUsers(); for (_i = 0, _len = usrs.length; _i < _len; _i++) { u = usrs[_i]; now = new Date(); uAfk = now.getTime() - data.users[u.id].getLastActivity().getTime(); if (uAfk > (10 * 60 * 1000)) { if (msToStr(uAfk) !== false) { msg += u.username + ' - ' + msToStr(uAfk); msg += '. '; } } } if (msg === '') { return API.sendChat("No one is AFK"); } else { return API.sendChat('AFKs: ' + msg); } }; return allAfksCommand; })(Command); statusCommand = (function(_super) { __extends(statusCommand, _super); function statusCommand() { _ref12 = statusCommand.__super__.constructor.apply(this, arguments); return _ref12; } statusCommand.prototype.init = function() { this.command = '!status'; this.parseType = 'exact'; return this.rankPrivelege = 'user'; }; statusCommand.prototype.functionality = function() { var day, hour, launch, lt, meridian, min, month, msg, t, totals; lt = data.launchTime; month = lt.getMonth() + 1; day = lt.getDate(); hour = lt.getHours(); meridian = hour % 12 === hour ? 'AM' : 'PM'; min = lt.getMinutes(); min = min < 10 ? '0' + min : min; t = data.totalVotingData; t['songs'] = data.songCount; launch = 'Initiated ' + month + '/' + day + ' ' + hour + ':' + min + ' ' + meridian + '. '; totals = '' + t.songs + ' songs have been played, accumulating ' + t.woots + ' woots, ' + t.mehs + ' mehs, and ' + t.curates + ' queues.'; msg = launch + totals; return API.sendChat(msg); }; return statusCommand; })(Command); unhookCommand = (function(_super) { __extends(unhookCommand, _super); function unhookCommand() { _ref13 = unhookCommand.__super__.constructor.apply(this, arguments); return _ref13; } unhookCommand.prototype.init = function() { this.command = '!unhook events all'; this.parseType = 'exact'; return this.rankPrivelege = 'host'; }; unhookCommand.prototype.functionality = function() { API.sendChat('Unhooking all events...'); return undoHooks(); }; return unhookCommand; })(Command); dieCommand = (function(_super) { __extends(dieCommand, _super); function dieCommand() { _ref14 = dieCommand.__super__.constructor.apply(this, arguments); return _ref14; } dieCommand.prototype.init = function() { this.command = '!die'; this.parseType = 'exact'; return this.rankPrivelege = 'host'; }; dieCommand.prototype.functionality = function() { API.sendChat('Unhooking Events...'); undoHooks(); API.sendChat('Deleting bot data...'); data.implode(); return API.sendChat('Consider me dead'); }; return dieCommand; })(Command); reloadCommand = (function(_super) { __extends(reloadCommand, _super); function reloadCommand() { _ref15 = reloadCommand.__super__.constructor.apply(this, arguments); return _ref15; } reloadCommand.prototype.init = function() { this.command = '!reload'; this.parseType = 'exact'; return this.rankPrivelege = 'host'; }; reloadCommand.prototype.functionality = function() { var pupSrc; API.sendChat('brb'); undoHooks(); pupSrc = data.pupScriptUrl; data.implode(); return $.getScript(pupSrc); }; return reloadCommand; })(Command); lockCommand = (function(_super) { __extends(lockCommand, _super); function lockCommand() { _ref16 = lockCommand.__super__.constructor.apply(this, arguments); return _ref16; } lockCommand.prototype.init = function() { this.command = '!lock'; this.parseType = 'exact'; return this.rankPrivelege = 'mod'; }; lockCommand.prototype.functionality = function() { return data.lockBooth(); }; return lockCommand; })(Command); unlockCommand = (function(_super) { __extends(unlockCommand, _super); function unlockCommand() { _ref17 = unlockCommand.__super__.constructor.apply(this, arguments); return _ref17; } unlockCommand.prototype.init = function() { this.command = '!unlock'; this.parseType = 'exact'; return this.rankPrivelege = 'mod'; }; unlockCommand.prototype.functionality = function() { return data.unlockBooth(); }; return unlockCommand; })(Command); swapCommand = (function(_super) { __extends(swapCommand, _super); function swapCommand() { _ref18 = swapCommand.__super__.constructor.apply(this, arguments); return _ref18; } swapCommand.prototype.init = function() { this.command = '!swap'; this.parseType = 'startsWith'; return this.rankPrivelege = 'mod'; }; swapCommand.prototype.functionality = function() { var msg, r, swapRegex, userAdd, userRemove, users; msg = this.msgData.message; swapRegex = new RegExp("^/swap @(.+) for @(.+)$"); users = swapRegex.exec(msg).slice(1); r = new RoomHelper(); if (users.length === 2) { userRemove = r.lookupUser(users[0]); userAdd = r.lookupUser(users[1]); if (userRemove === false || userAdd === false) { API.sendChat('Error parsing one or both names'); return false; } else { return data.lockBooth(function() { API.moderateRemoveDJ(userRemove.id); API.sendChat("Removing " + userRemove.username + "..."); return setTimeout(function() { API.moderateAddDJ(userAdd.id); API.sendChat("Adding " + userAdd.username + "..."); return setTimeout(function() { return data.unlockBooth(); }, 1500); }, 1500); }); } } else { return API.sendChat("Command didn't parse into two seperate usernames"); } }; return swapCommand; })(Command); popCommand = (function(_super) { __extends(popCommand, _super); function popCommand() { _ref19 = popCommand.__super__.constructor.apply(this, arguments); return _ref19; } popCommand.prototype.init = function() { this.command = '!pop'; this.parseType = 'exact'; return this.rankPrivelege = 'mod'; }; popCommand.prototype.functionality = function() { var djs, popDj; djs = API.getDJs(); popDj = djs[djs.length - 1]; return API.moderateRemoveDJ(popDj.id); }; return popCommand; })(Command); pushCommand = (function(_super) { __extends(pushCommand, _super); function pushCommand() { _ref20 = pushCommand.__super__.constructor.apply(this, arguments); return _ref20; } pushCommand.prototype.init = function() { this.command = '!push'; this.parseType = 'startsWith'; return this.rankPrivelege = 'mod'; }; pushCommand.prototype.functionality = function() { var msg, name, r, user; msg = this.msgData.message; if (msg.length > this.command.length + 2) { name = msg.substr(this.command.length + 2); r = new RoomHelper(); user = r.lookupUser(name); if (user !== false) { return API.moderateAddDJ(user.id); } } }; return pushCommand; })(Command); resetAfkCommand = (function(_super) { __extends(resetAfkCommand, _super); function resetAfkCommand() { _ref21 = resetAfkCommand.__super__.constructor.apply(this, arguments); return _ref21; } resetAfkCommand.prototype.init = function() { this.command = '!resetafk'; this.parseType = 'startsWith'; return this.rankPrivelege = 'mod'; }; resetAfkCommand.prototype.functionality = function() { var id, name, u, _ref22; if (this.msgData.message.length > 10) { name = this.msgData.message.substring(11); _ref22 = data.users; for (id in _ref22) { u = _ref22[id]; if (u.getUser().username === name) { u.updateActivity(); API.sendChat('@' + u.getUser().username + '\'s AFK time has been reset.'); return; } } API.sendChat('Not sure who ' + name + ' is'); } else { API.sendChat('Yo Gimme a name r-tard'); } }; return resetAfkCommand; })(Command); forceSkipCommand = (function(_super) { __extends(forceSkipCommand, _super); function forceSkipCommand() { _ref22 = forceSkipCommand.__super__.constructor.apply(this, arguments); return _ref22; } forceSkipCommand.prototype.init = function() { this.command = '!forceskip'; this.parseType = 'startsWith'; return this.rankPrivelege = 'mod'; }; forceSkipCommand.prototype.functionality = function() { var msg, param; msg = this.msgData.message; if (msg.length > 11) { param = msg.substr(11); if (param === 'enable') { data.forceSkip = true; return API.sendChat("Forced skipping enabled."); } else if (param === 'disable') { data.forceSkip = false; return API.sendChat("Forced skipping disabled."); } } }; return forceSkipCommand; })(Command); overplayedCommand = (function(_super) { __extends(overplayedCommand, _super); function overplayedCommand() { _ref23 = overplayedCommand.__super__.constructor.apply(this, arguments); return _ref23; } overplayedCommand.prototype.init = function() { this.command = '!overplayed'; this.parseType = 'exact'; return this.rankPrivelege = 'user'; }; overplayedCommand.prototype.functionality = function() { return API.sendChat("View the list of songs we consider overplayed and suggest additions at http://den.johnback.us/overplayed_tracks"); }; return overplayedCommand; })(Command); uservoiceCommand = (function(_super) { __extends(uservoiceCommand, _super); function uservoiceCommand() { _ref24 = uservoiceCommand.__super__.constructor.apply(this, arguments); return _ref24; } uservoiceCommand.prototype.init = function() { this.command = ['/uservoice', '/idea']; this.parseType = 'exact'; return this.rankPrivelege = 'user'; }; uservoiceCommand.prototype.functionality = function() { var msg; msg = 'Have an idea for the room, our bot, or an event? Awesome! Submit it to our uservoice and we\'ll get started on it: http://is.gd/IzP4bA'; msg += ' (please don\'t ask for mod)'; return API.sendChat(msg); }; return uservoiceCommand; })(Command); skipCommand = (function(_super) { __extends(skipCommand, _super); function skipCommand() { _ref25 = skipCommand.__super__.constructor.apply(this, arguments); return _ref25; } skipCommand.prototype.init = function() { this.command = '!skip'; this.parseType = 'exact'; return this.rankPrivelege = 'mod'; }; skipCommand.prototype.functionality = function() { return API.moderateForceSkip(); }; return skipCommand; })(Command); whyMehCommand = (function(_super) { __extends(whyMehCommand, _super); function whyMehCommand() { _ref26 = whyMehCommand.__super__.constructor.apply(this, arguments); return _ref26; } whyMehCommand.prototype.init = function() { this.command = '!whymeh'; this.parseType = 'exact'; return this.rankPrivelege = 'user'; }; whyMehCommand.prototype.functionality = function() { var msg; msg = "Reserve Mehs for songs that are a) extremely overplayed b) off genre c) absolutely god awful or d) troll songs. "; msg += "If you simply aren't feeling a song, then remain neutral"; return API.sendChat(msg); }; return whyMehCommand; })(Command); commandsCommand = (function(_super) { __extends(commandsCommand, _super); function commandsCommand() { _ref27 = commandsCommand.__super__.constructor.apply(this, arguments); return _ref27; } commandsCommand.prototype.init = function() { this.command = '!commands'; this.parseType = 'exact'; return this.rankPrivelege = 'user'; }; commandsCommand.prototype.functionality = function() { var allowedUserLevels, c, cc, cmd, msg, user, _i, _j, _len, _len1, _ref28, _ref29; allowedUserLevels = []; user = API.getUser(this.msgData.fromID); window.capturedUser = user; if (user.permission > 5) { allowedUserLevels = ['user', 'mod', 'host']; } else if (user.permission > 2) { allowedUserLevels = ['user', 'mod']; } else { allowedUserLevels = ['user']; } msg = ''; for (_i = 0, _len = cmds.length; _i < _len; _i++) { cmd = cmds[_i]; c = new cmd(''); if (_ref28 = c.rankPrivelege, __indexOf.call(allowedUserLevels, _ref28) >= 0) { if (typeof c.command === "string") { msg += c.command + ', '; } else if (typeof c.command === "object") { _ref29 = c.command; for (_j = 0, _len1 = _ref29.length; _j < _len1; _j++) { cc = _ref29[_j]; msg += cc + ', '; } } } } msg = msg.substring(0, msg.length - 2); return API.sendChat(msg); }; return commandsCommand; })(Command); disconnectLookupCommand = (function(_super) { __extends(disconnectLookupCommand, _super); function disconnectLookupCommand() { _ref28 = disconnectLookupCommand.__super__.constructor.apply(this, arguments); return _ref28; } disconnectLookupCommand.prototype.init = function() { this.command = '!dclookup'; this.parseType = 'startsWith'; return this.rankPrivelege = 'mod'; }; disconnectLookupCommand.prototype.functionality = function() { var cmd, dcHour, dcLookupId, dcMeridian, dcMins, dcSongsAgo, dcTimeStr, dcUser, disconnectInstances, givenName, id, recentDisconnect, resp, u, _i, _len, _ref29, _ref30; cmd = this.msgData.message; if (cmd.length > 11) { givenName = cmd.slice(11); _ref29 = data.users; for (id in _ref29) { u = _ref29[id]; if (u.getUser().username === givenName) { dcLookupId = id; disconnectInstances = []; _ref30 = data.userDisconnectLog; for (_i = 0, _len = _ref30.length; _i < _len; _i++) { dcUser = _ref30[_i]; if (dcUser.id === dcLookupId) { disconnectInstances.push(dcUser); } } if (disconnectInstances.length > 0) { resp = u.getUser().username + ' has disconnected ' + disconnectInstances.length.toString() + ' time'; if (disconnectInstances.length === 1) { resp += '. '; } else { resp += 's. '; } recentDisconnect = disconnectInstances.pop(); dcHour = recentDisconnect.time.getHours(); dcMins = recentDisconnect.time.getMinutes(); if (dcMins < 10) { dcMins = '0' + dcMins.toString(); } dcMeridian = dcHour % 12 === dcHour ? 'AM' : 'PM'; dcTimeStr = '' + dcHour + ':' + dcMins + ' ' + dcMeridian; dcSongsAgo = data.songCount - recentDisconnect.songCount; resp += 'Their most recent disconnect was at ' + dcTimeStr + ' (' + dcSongsAgo + ' songs ago). '; if (recentDisconnect.waitlistPosition !== void 0) { resp += 'They were ' + recentDisconnect.waitlistPosition + ' song'; if (recentDisconnect.waitlistPosition > 1) { resp += 's'; } resp += ' away from the DJ booth.'; } else { resp += 'They were not on the waitlist.'; } API.sendChat(resp); return; } else { API.sendChat("I haven't seen " + u.getUser().username + " disconnect."); return; } } } return API.sendChat("I don't see a user in the room named '" + givenName + "'."); } }; return disconnectLookupCommand; })(Command); voteRatioCommand = (function(_super) { __extends(voteRatioCommand, _super); function voteRatioCommand() { _ref29 = voteRatioCommand.__super__.constructor.apply(this, arguments); return _ref29; } voteRatioCommand.prototype.init = function() { this.command = '!voteratio'; this.parseType = 'startsWith'; return this.rankPrivelege = 'mod'; }; voteRatioCommand.prototype.functionality = function() { var msg, name, r, u, votes; r = new RoomHelper(); msg = this.msgData.message; if (msg.length > 12) { name = msg.substr(12); u = r.lookupUser(name); if (u !== false) { votes = r.userVoteRatio(u); msg = u.username + " has wooted " + votes['woot'].toString() + " time"; if (votes['woot'] === 1) { msg += ', '; } else { msg += 's, '; } msg += "and meh'd " + votes['meh'].toString() + " time"; if (votes['meh'] === 1) { msg += '. '; } else { msg += 's. '; } msg += "Their woot:vote ratio is " + votes['positiveRatio'].toString() + "."; return API.sendChat(msg); } else { return API.sendChat("I don't recognize a user named '" + name + "'"); } } else { return API.sendChat("I'm not sure what you want from me..."); } }; return voteRatioCommand; })(Command); avgVoteRatioCommand = (function(_super) { __extends(avgVoteRatioCommand, _super); function avgVoteRatioCommand() { _ref30 = avgVoteRatioCommand.__super__.constructor.apply(this, arguments); return _ref30; } avgVoteRatioCommand.prototype.init = function() { this.command = '!avgvoteratio'; this.parseType = 'exact'; return this.rankPrivelege = 'mod'; }; avgVoteRatioCommand.prototype.functionality = function() { var averageRatio, msg, r, ratio, roomRatios, uid, user, userRatio, votes, _i, _len, _ref31; roomRatios = []; r = new RoomHelper(); _ref31 = data.voteLog; for (uid in _ref31) { votes = _ref31[uid]; user = data.users[uid].getUser(); userRatio = r.userVoteRatio(user); roomRatios.push(userRatio['positiveRatio']); } averageRatio = 0.0; for (_i = 0, _len = roomRatios.length; _i < _len; _i++) { ratio = roomRatios[_i]; averageRatio += ratio; } averageRatio = averageRatio / roomRatios.length; msg = "Accounting for " + roomRatios.length.toString() + " user ratios, the average room ratio is " + averageRatio.toFixed(2).toString() + "."; return API.sendChat(msg); }; return avgVoteRatioCommand; })(Command); cmds = [cookieCommand, newSongsCommand, whyWootCommand, themeCommand, rulesCommand, roomHelpCommand, sourceCommand, wootCommand, badQualityCommand, downloadCommand, afksCommand, allAfksCommand, statusCommand, unhookCommand, dieCommand, reloadCommand, lockCommand, unlockCommand, swapCommand, popCommand, pushCommand, overplayedCommand, uservoiceCommand, whyMehCommand, skipCommand, commandsCommand, resetAfkCommand, forceSkipCommand, disconnectLookupCommand, voteRatioCommand, avgVoteRatioCommand]; chatCommandDispatcher = function(chat) { var c, cmd, _i, _len, _results; chatUniversals(chat); _results = []; for (_i = 0, _len = cmds.length; _i < _len; _i++) { cmd = cmds[_i]; c = new cmd(chat); if (c.evalMsg()) { break; } else { _results.push(void 0); } } return _results; }; updateVotes = function(obj) { data.currentwoots = obj.positive; data.currentmehs = obj.negative; return data.currentcurates = obj.curates; }; announceCurate = function(obj) { return API.sendChat("/em: " + obj.user.username + " loves this song!"); }; handleUserJoin = function(user) { data.userJoin(user); data.users[user.id].updateActivity(); return API.sendChat("/em: " + user.username + " has joined the Room!"); }; handleNewSong = function(obj) { var songId; data.intervalMessages(); if (data.currentsong === null) { data.newSong(); } else { API.sendChat("/em: Just played " + data.currentsong.title + " by " + data.currentsong.author + ". Stats: Woots: " + data.currentwoots + ", Mehs: " + data.currentmehs + ", Loves: " + data.currentcurates + "."); data.newSong(); document.getElementById("button-vote-positive").click(); } if (data.forceSkip) { songId = obj.media.id; return setTimeout(function() { var cMedia; cMedia = API.getMedia(); if (cMedia.id === songId) { return API.moderateForceSkip(); } }, obj.media.duration * 1000); } }; handleVote = function(obj) { data.users[obj.user.id].updateActivity(); return data.users[obj.user.id].updateVote(obj.vote); }; handleUserLeave = function(user) { var disconnectStats, i, u, _i, _len, _ref31; disconnectStats = { id: user.id, time: new Date(), songCount: data.songCount }; i = 0; _ref31 = data.internalWaitlist; for (_i = 0, _len = _ref31.length; _i < _len; _i++) { u = _ref31[_i]; if (u.id === user.id) { disconnectStats['waitlistPosition'] = i - 1; data.setInternalWaitlist(); break; } else { i++; } } data.userDisconnectLog.push(disconnectStats); return data.users[user.id].inRoom(false); }; antispam = function(chat) { var plugRoomLinkPatt, sender; plugRoomLinkPatt = /(\bhttps?:\/\/(www.)?plug\.dj[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig; if (plugRoomLinkPatt.exec(chat.message)) { sender = API.getUser(chat.fromID); if (!sender.ambassador && !sender.moderator && !sender.owner && !sender.superuser) { if (!data.users[chat.fromID]["protected"]) { API.sendChat("Don't spam room links you ass clown"); return API.moderateDeleteChat(chat.chatID); } else { return API.sendChat("I'm supposed to kick you, but you're just too darn pretty."); } } } }; beggar = function(chat) { var msg, r, responses; msg = chat.message.toLowerCase(); responses = ["Good idea @{beggar}! Don't earn your fans or anything thats so yesterday", "Guys @{beggar} asked us to fan him! Lets all totally do it! ಠ_ಠ", "srsly @{beggar}? ಠ_ಠ", "@{beggar}. Earning his fans the good old fashioned way. Hard work and elbow grease. A true american."]; r = Math.floor(Math.random() * responses.length); if (msg.indexOf('fan me') !== -1 || msg.indexOf('fan for fan') !== -1 || msg.indexOf('fan pls') !== -1 || msg.indexOf('fan4fan') !== -1 || msg.indexOf('add me to fan') !== -1) { return API.sendChat(responses[r].replace("{beggar}", chat.from)); } }; chatUniversals = function(chat) { data.activity(chat); antispam(chat); return beggar(chat); }; hook = function(apiEvent, callback) { return API.on(apiEvent, callback); }; unhook = function(apiEvent, callback) { return API.off(apiEvent, callback); }; apiHooks = [ { 'event': API.ROOM_SCORE_UPDATE, 'callback': updateVotes }, { 'event': API.CURATE_UPDATE, 'callback': announceCurate }, { 'event': API.USER_JOIN, 'callback': handleUserJoin }, { 'event': API.DJ_ADVANCE, 'callback': handleNewSong }, { 'event': API.VOTE_UPDATE, 'callback': handleVote }, { 'event': API.CHAT, 'callback': chatCommandDispatcher }, { 'event': API.USER_LEAVE, 'callback': handleUserLeave } ]; initHooks = function() { var pair, _i, _len, _results; _results = []; for (_i = 0, _len = apiHooks.length; _i < _len; _i++) { pair = apiHooks[_i]; _results.push(hook(pair['event'], pair['callback'])); } return _results; }; undoHooks = function() { var pair, _i, _len, _results; _results = []; for (_i = 0, _len = apiHooks.length; _i < _len; _i++) { pair = apiHooks[_i]; _results.push(unhook(pair['event'], pair['callback'])); } return _results; }; initialize(); }).call(this);
Rildson
// Generated by CoffeeScript 1.6.3 (function() { var Command, RoomHelper, User, addCommand, afkCheck, afksCommand, allAfksCommand, announceCurate, antispam, apiHooks, avgVoteRatioCommand, badQualityCommand, beggar, chatCommandDispatcher, chatUniversals, cmds, commandsCommand, cookieCommand, data, dieCommand, disconnectLookupCommand, downloadCommand, forceSkipCommand, handleNewSong, handleUserJoin, handleUserLeave, handleVote, hook, initEnvironment, initHooks, initialize, lockCommand, lockskipCommand, msToStr, newSongsCommand, overplayedCommand, popCommand, populateUserData, pupOnline, pushCommand, reloadCommand, resetAfkCommand, roomHelpCommand, rulesCommand, settings, skipCommand, staffCommand, sourceCommand, statusCommand, swapCommand, themeCommand, undoHooks, unhook, unhookCommand, unlockCommand, updateVotes, uservoiceCommand, voteRatioCommand, whyMehCommand, whyWootCommand, wootCommand, _ref, _ref1, _ref10, _ref11, _ref12, _ref13, _ref14, _ref15, _ref16, _ref17, _ref18, _ref19, _ref2, _ref20, _ref21, _ref22, _ref23, _ref24, _ref25, _ref26, _ref27, _ref28, _ref29, _ref3, _ref30, _ref32, ref33, _ref34, ref35, _ref4, _ref5, _ref6, _ref7, _ref8, _ref9, __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; settings = (function() { function settings() { this.implode = __bind(this.implode, this); this.intervalMessages = __bind(this.intervalMessages, this); this.startAfkInterval = __bind(this.startAfkInterval, this); this.setInternalWaitlist = __bind(this.setInternalWaitlist, this); this.userJoin = __bind(this.userJoin, this); this.getRoomUrlPath = __bind(this.getRoomUrlPath, this); this.startup = __bind(this.startup, this); } settings.prototype.currentsong = {}; settings.prototype.users = {}; settings.prototype.djs = []; settings.prototype.mods = []; settings.prototype.host = []; settings.prototype.hasWarned = false; settings.prototype.currentwoots = 0; settings.prototype.currentmehs = 0; settings.prototype.currentcurates = 0; settings.prototype.roomUrlPath = null; settings.prototype.internalWaitlist = []; settings.prototype.userDisconnectLog = []; settings.prototype.voteLog = {}; settings.prototype.seshOn = false; settings.prototype.forceSkip = false; settings.prototype.seshMembers = []; settings.prototype.launchTime = null; settings.prototype.totalVotingData = { woots: 0, mehs: 0, curates: 0 }; settings.prototype.pupScriptUrl = 'https://raw.github.com/Brutos/chatbotvm/master/.gitignore'; settings.prototype.afkTime = 15 * 60 * 1000; settings.prototype.songIntervalMessages = [ { interval: 7, offset: 0, msg: "/em: Mantenha-se sempre votando, se não será removido da lista de espera e da cabine de DJ." },{ interval: 5, offset: 0, msg: "/em: Make sure that you're voting or you will be removed from the wait list and from the DJ Booth." },{ interval: 12, offset: 0, msg: "/em: Curte musica eletrônica? Estar na sala cerat , bem vindo ;)" } ]; settings.prototype.songCount = 0; settings.prototype.startup = function() { this.launchTime = new Date(); return this.roomUrlPath = this.getRoomUrlPath(); }; settings.prototype.getRoomUrlPath = function() { return window.location.pathname.replace(/\//g, ''); }; settings.prototype.newSong = function() { this.totalVotingData.woots += this.currentwoots; this.totalVotingData.mehs += this.currentmehs; this.totalVotingData.curates += this.currentcurates; this.setInternalWaitlist(); this.currentsong = API.getMedia(); if (this.currentsong !== null) { return this.currentsong; } else { return false; } }; settings.prototype.userJoin = function(u) { var userIds, _ref; userIds = Object.keys(this.users); if (_ref = u.id, __indexOf.call(userIds, _ref) >= 0) { return this.users[u.id].inRoom(true); } else { this.users[u.id] = new User(u); return this.voteLog[u.id] = {}; } }; settings.prototype.setInternalWaitlist = function() { var boothWaitlist, fullWaitList, lineWaitList; boothWaitlist = API.getDJs().slice(1); lineWaitList = API.getWaitList(); fullWaitList = boothWaitlist.concat(lineWaitList); return this.internalWaitlist = fullWaitList; }; settings.prototype.activity = function(obj) { if (obj.type === 'message') { return this.users[obj.fromID].updateActivity(); } }; settings.prototype.startAfkInterval = function() { return this.afkInterval = setInterval(afkCheck, 2000); }; settings.prototype.intervalMessages = function() { var msg, _i, _len, _ref, _results; this.songCount++; _ref = this.songIntervalMessages; _results = []; for (_i = 0, _len = _ref.length; _i < _len; _i++) { msg = _ref[_i]; if (((this.songCount + msg['offset']) % msg['interval']) === 0) { _results.push(API.sendChat(msg['msg'])); } else { _results.push(void 0); } } return _results; }; settings.prototype.implode = function() { var item, val; for (item in this) { val = this[item]; if (typeof this[item] === 'object') { delete this[item]; } } return clearInterval(this.afkInterval); }; settings.prototype.lockBooth = function(callback) { if (callback == null) { callback = null; } return $.ajax({ url: "http://plug.dj/_/gateway/room.update_options", type: 'POST', data: JSON.stringify({ service: "room.update_options", body: [ this.roomUrlPath, { "boothLocked": true, "waitListEnabled": true, "maxPlays": 1, "maxDJs": 5 } ] }), async: this.async, dataType: 'json', contentType: 'application/json' }).done(function() { if (callback != null) { return callback(); } }); }; settings.prototype.unlockBooth = function(callback) { if (callback == null) { callback = null; } return $.ajax({ url: "http://plug.dj/_/gateway/room.update_options", type: 'POST', data: JSON.stringify({ service: "room.update_options", body: [ this.roomUrlPath, { "boothLocked": false, "waitListEnabled": true, "maxPlays": 1, "maxDJs": 5 } ] }), async: this.async, dataType: 'json', contentType: 'application/json' }).done(function() { if (callback != null) { return callback(); } }); }; return settings; })(); data = new settings(); User = (function() { User.prototype.afkWarningCount = 0; User.prototype.lastWarning = null; User.prototype["protected"] = false; User.prototype.isInRoom = true; function User(user) { this.user = user; this.updateVote = __bind(this.updateVote, this); this.inRoom = __bind(this.inRoom, this); this.notDj = __bind(this.notDj, this); this.warn = __bind(this.warn, this); this.getIsDj = __bind(this.getIsDj, this); this.getWarningCount = __bind(this.getWarningCount, this); this.getUser = __bind(this.getUser, this); this.getLastWarning = __bind(this.getLastWarning, this); this.getLastActivity = __bind(this.getLastActivity, this); this.updateActivity = __bind(this.updateActivity, this); this.init = __bind(this.init, this); this.init(); } User.prototype.init = function() { return this.lastActivity = new Date(); }; User.prototype.updateActivity = function() { this.lastActivity = new Date(); this.afkWarningCount = 0; return this.lastWarning = null; }; User.prototype.getLastActivity = function() { return this.lastActivity; }; User.prototype.getLastWarning = function() { if (this.lastWarning === null) { return false; } else { return this.lastWarning; } }; User.prototype.getUser = function() { return this.user; }; User.prototype.getWarningCount = function() { return this.afkWarningCount; }; User.prototype.getIsDj = function() { var DJs, dj, _i, _len; DJs = API.getDJs(); for (_i = 0, _len = DJs.length; _i < _len; _i++) { dj = DJs[_i]; if (this.user.id === dj.id) { return true; } } return false; }; User.prototype.warn = function() { this.afkWarningCount++; return this.lastWarning = new Date(); }; User.prototype.notDj = function() { this.afkWarningCount = 0; return this.lastWarning = null; }; User.prototype.inRoom = function(online) { return this.isInRoom = online; }; User.prototype.updateVote = function(v) { if (this.isInRoom) { return data.voteLog[this.user.id][data.currentsong.id] = v; } }; return User; })(); RoomHelper = (function() { function RoomHelper() {} RoomHelper.prototype.lookupUser = function(username) { var id, u, _ref; _ref = data.users; for (id in _ref) { u = _ref[id]; if (u.getUser().username === username) { return u.getUser(); } } return false; }; RoomHelper.prototype.userVoteRatio = function(user) { var songId, songVotes, vote, votes; songVotes = data.voteLog[user.id]; votes = { 'woot': 0, 'meh': 0 }; for (songId in songVotes) { vote = songVotes[songId]; if (vote === 1) { votes['woot']++; } else if (vote === -1) { votes['meh']++; } } votes['positiveRatio'] = (votes['woot'] / (votes['woot'] + votes['meh'])).toFixed(2); return votes; }; return RoomHelper; })(); pupOnline = function() { return API.sendChat("/me: Não deu pra chamar o patati nem o patata , então chora por que o bot chego"); }; populateUserData = function() { var u, users, _i, _len; users = API.getUsers(); for (_i = 0, _len = users.length; _i < _len; _i++) { u = users[_i]; data.users[u.id] = new User(u); data.voteLog[u.id] = {}; } }; initEnvironment = function() { document.getElementById("button-vote-positive").click(); return document.getElementById("button-sound").click(); }; initialize = function() { pupOnline(); populateUserData(); initEnvironment(); initHooks(); data.startup(); data.newSong(); return data.startAfkInterval(); }; afkCheck = function() { var DJs, id, lastActivity, lastWarned, now, oneMinute, secsLastActive, timeSinceLastActivity, timeSinceLastWarning, twoMinutes, user, warnMsg, _ref, _results; _ref = data.users; _results = []; for (id in _ref) { user = _ref[id]; now = new Date(); lastActivity = user.getLastActivity(); timeSinceLastActivity = now.getTime() - lastActivity.getTime(); if (timeSinceLastActivity > data.afkTime) { if (user.getIsDj()) { secsLastActive = timeSinceLastActivity / 1000; if (user.getWarningCount() === 0) { user.warn(); _results.push(API.sendChat("@" + user.getUser().username + ", Eu não vi você votar durante 30 minutos. Vote nos próximos 2 minutos, se não será removido.")); } else if (user.getWarningCount() === 1) { lastWarned = user.getLastWarning(); timeSinceLastWarning = now.getTime() - lastWarned.getTime(); twoMinutes = 2 * 60 * 1000; if (timeSinceLastWarning > twoMinutes) { user.warn(); warnMsg = "@" + user.getUser().username; warnMsg += ", Eu não vi você votar durante 32 minutos. Vote no próximo minuto ou eu o removerei, este é seu ultimo aviso."; _results.push(API.sendChat(warnMsg)); } else { _results.push(void 0); } } else if (user.getWarningCount() === 2) { lastWarned = user.getLastWarning(); timeSinceLastWarning = now.getTime() - lastWarned.getTime(); oneMinute = 1 * 60 * 1000; if (timeSinceLastWarning > oneMinute) { DJs = API.getDJs(); if (DJs.length > 0 && DJs[0].id !== user.getUser().id) { API.sendChat("@" + user.getUser().username + ", Você teve 2 avisos. Por favor, mantenha-se sempre votando."); API.moderateRemoveDJ(id); _results.push(user.warn()); } else { _results.push(void 0); } } else { _results.push(void 0); } } else { _results.push(void 0); } } else { _results.push(user.notDj()); } } else { _results.push(void 0); } } return _results; }; msToStr = function(msTime) { var ms, msg, timeAway; msg = ''; timeAway = { 'days': 0, 'hours': 0, 'minutes': 0, 'seconds': 0 }; ms = { 'day': 24 * 60 * 60 * 1000, 'hour': 60 * 60 * 1000, 'minute': 60 * 1000, 'second': 1000 }; if (msTime > ms['day']) { timeAway['days'] = Math.floor(msTime / ms['day']); msTime = msTime % ms['day']; } if (msTime > ms['hour']) { timeAway['hours'] = Math.floor(msTime / ms['hour']); msTime = msTime % ms['hour']; } if (msTime > ms['minute']) { timeAway['minutes'] = Math.floor(msTime / ms['minute']); msTime = msTime % ms['minute']; } if (msTime > ms['second']) { timeAway['seconds'] = Math.floor(msTime / ms['second']); } if (timeAway['days'] !== 0) { msg += timeAway['days'].toString() + 'd'; } if (timeAway['hours'] !== 0) { msg += timeAway['hours'].toString() + 'h'; } if (timeAway['minutes'] !== 0) { msg += timeAway['minutes'].toString() + 'm'; } if (timeAway['seconds'] !== 0) { msg += timeAway['seconds'].toString() + 's'; } if (msg !== '') { return msg; } else { return false; } }; Command = (function() { function Command(msgData) { this.msgData = msgData; this.init(); } Command.prototype.init = function() { this.parseType = null; this.command = null; return this.rankPrivelege = null; }; Command.prototype.functionality = function(data) {}; Command.prototype.hasPrivelege = function() { var user; user = data.users[this.msgData.fromID].getUser(); switch (this.rankPrivelege) { case 'host': return user.permission === 5; case 'cohost': return user.permission >= 4; case 'mod': return user.permission >= 3; case 'manager': return user.permission >= 3; case 'bouncer': return user.permission >= 2; case 'featured': return user.permission >= 1; default: return true; } }; Command.prototype.commandMatch = function() { var command, msg, _i, _len, _ref; msg = this.msgData.message; if (typeof this.command === 'string') { if (this.parseType === 'exact') { if (msg === this.command) { return true; } else { return false; } } else if (this.parseType === 'startsWith') { if (msg.substr(0, this.command.length) === this.command) { return true; } else { return false; } } else if (this.parseType === 'contains') { if (msg.indexOf(this.command) !== -1) { return true; } else { return false; } } } else if (typeof this.command === 'object') { _ref = this.command; for (_i = 0, _len = _ref.length; _i < _len; _i++) { command = _ref[_i]; if (this.parseType === 'exact') { if (msg === command) { return true; } } else if (this.parseType === 'startsWith') { if (msg.substr(0, command.length) === command) { return true; } } else if (this.parseType === 'contains') { if (msg.indexOf(command) !== -1) { return true; } } } return false; } }; Command.prototype.evalMsg = function() { if (this.commandMatch() && this.hasPrivelege()) { this.functionality(); return true; } else { return false; } }; return Command; })(); cookieCommand = (function(_super) { __extends(cookieCommand, _super); function cookieCommand() { _ref = cookieCommand.__super__.constructor.apply(this, arguments); return _ref; } cookieCommand.prototype.init = function() { this.command = 'cookie'; this.parseType = 'startsWith'; return this.rankPrivelege = 'featured'; }; cookieCommand.prototype.getCookie = function() { var c, cookies; cookies = ["muita aveia", "um cafesinho", "um toddynho", "um copo de coca-cola", "uma dose de Ipioca", "limões", "um danoninho", "um cafe extra forte", "maçãs", "bananas", "um brinquedinho", "amendoins", "muita aveia"]; c = Math.floor(Math.random() * cookies.length); return cookies[c]; }; cookieCommand.prototype.functionality = function() { var msg, r, user; msg = this.msgData.message; r = new RoomHelper(); if (msg.substring(7, 8) === "@") { user = r.lookupUser(msg.substr(8)); if (user === false) { API.sendChat("/em: não encontrei ' " + msg.substr(8) + "' na sala. Então, sobra mais pra mim! d(>_<)b "); return false; } else { return API.sendChat("/em: @" + user.username + ", @" + this.msgData.from + " o recompensou com " + this.getCookie() + ". Aproveite!"); } } }; return cookieCommand; })(Command); newSongsCommand = (function(_super) { __extends(newSongsCommand, _super); function newSongsCommand() { _ref1 = newSongsCommand.__super__.constructor.apply(this, arguments); return _ref1; } newSongsCommand.prototype.init = function() { this.command = '!musicanova'; this.parseType = 'startsWith'; return this.rankPrivelege = 'featured'; }; newSongsCommand.prototype.functionality = function() { var arts, cMedia, chans, chooseRandom, mChans, msg, selections, u, _ref2; mChans = this.memberChannels.slice(0); chans = this.channels.slice(0); arts = this.artists.slice(0); chooseRandom = function(list) { var l, r; l = list.length; r = Math.floor(Math.random() * l); return list.splice(r, 1); }; selections = { channels: [], artist: '' }; u = data.users[this.msgData.fromID].getUser().username; if (u.indexOf("MistaDubstep") !== -1) { selections['channels'].push('MistaDubstep'); } else if (u.indexOf("Underground Promotions") !== -1) { selections['channels'].push('UndergroundDubstep'); } else { selections['channels'].push(chooseRandom(mChans)); } selections['channels'].push(chooseRandom(chans)); selections['channels'].push(chooseRandom(chans)); cMedia = API.getMedia(); if ((cMedia != null) && (_ref2 = cMedia.author, __indexOf.call(arts, _ref2) >= 0)) { selections['artist'] = cMedia.author; } else { selections['artist'] = chooseRandom(arts); } msg = "Todo mundo já ouviu aquela musica do " + selections['artist'] + " obtenha novas musicas em http://youtube.com/" + selections['channels'][0] + " http://youtube.com/" + selections['channels'][1] + " ou http://youtube.com/" + selections['channels'][2]; return API.sendChat(msg); }; newSongsCommand.prototype.memberChannels = ["JitterStep", "MistaDubstep", "DubStationPromotions", "UndergroundDubstep",, "DarkstepWarrior", "BombshockDubstep", "Sharestep"]; newSongsCommand.prototype.channels = ["UltraRecords", "kontor", "SpinninRec", "PandoraMuslc", "ITacMusic", "Liquicity", "FunkyyPanda", "BassRape", "WobbleCraftDubz", "UKFdubstep", "DropThatBassline", "VitalDubstep", "AirwaveDubstepTV", "EpicNetworkMusic", "NoOffenseDubstep", "InspectorDubplate", "ReptileDubstep", "MrMoMDubstep", "FrixionNetwork", "IcyDubstep", "DubstepWeed", "VhileMusic", "LessThan3Dubstep", "PleaseMindTheDUBstep", "ClownDubstep", "TheULTRADUBSTEP", "DuBM0nkeyz", "DubNationUK", "TehDubstepChannel", "BassDropMedia", "USdubstep", "UNITEDubstep"]; newSongsCommand.prototype.artists = ["Skrillex", "Doctor P", "Excision", "Flux Pavilion", "Knife Party", "Krewella", "Rusko", "Bassnectar", "Nero", "Deadmau5", "Borgore", "Zomboy"]; return newSongsCommand; })(Command); whyWootCommand = (function(_super) { __extends(whyWootCommand, _super); function whyWootCommand() { _ref2 = whyWootCommand.__super__.constructor.apply(this, arguments); return _ref2; } whyWootCommand.prototype.init = function() { this.command = '!up'; this.parseType = 'startsWith'; return this.rankPrivelege = 'featured'; }; whyWootCommand.prototype.functionality = function() { var msg, nameIndex; msg = "Se tu não entrar na linha, vai tomar um ban!";; if ((nameIndex = this.msgData.message.indexOf('@')) !== -1) { return API.sendChat(this.msgData.message.substr(nameIndex) + ', ' + msg); } else { return API.sendChat(msg); } }; return whyWootCommand; })(Command); themeCommand = (function(_super) { __extends(themeCommand, _super); function themeCommand() { _ref3 = themeCommand.__super__.constructor.apply(this, arguments); return _ref3; } themeCommand.prototype.init = function() { this.command = '!temas'; this.parseType = 'startsWith'; return this.rankPrivelege = 'featured'; }; themeCommand.prototype.functionality = function() { var msg1, msg2; msg1 = "Todo tipo de musica eletronica de boa qualidade é permitida aqui. Incluindo Electro, Dubstep, Techno, Trap, EDM, "; msg1 += "Hardstyle, House e Trance. "; msg2 = "All kinds of electronic song of good quality is allowed here. Including Electro, Dubstep, Techno, Trap, EDM, "; msg2 += "Hardstyle, House and Trance. "; API.sendChat(msg1); return setTimeout((function() { return API.sendChat(msg2); }), 750); }; return themeCommand; })(Command); rulesCommand = (function(_super) { __extends(rulesCommand, _super); function rulesCommand() { _ref4 = rulesCommand.__super__.constructor.apply(this, arguments); return _ref4; } rulesCommand.prototype.init = function() { this.command = '!regras'; this.parseType = 'startsWith'; return this.rankPrivelege = 'featured'; }; rulesCommand.prototype.functionality = function() { var msg1, msg2; msg1 = "1) Tempo máximo 6 min e 30 seg. "; msg1 += "2) Não escrever em /me ou /em. "; msg1 += "3) Respeitar os moderadores da sala."; msg1 += "4) Sem flood no chat . "; msg1 += "5) Não fique pedindo cargos e Sem pornografia. "; msg2 = "1) Maximum time 6 minutes and 30 seconds. "; msg2 += "2) Can't write in /me or /em. "; msg2 += "3) Respect the moderators of the room. "; msg2 += "4) Without flood in the chat. "; msg2 += "5) Can't ask positions, And without porn ."; API.sendChat(msg1); return setTimeout((function() { return API.sendChat(msg2); }), 750); }; return rulesCommand; })(Command); roomHelpCommand = (function(_super) { __extends(roomHelpCommand, _super); function roomHelpCommand() { _ref5 = roomHelpCommand.__super__.constructor.apply(this, arguments); return _ref5; } roomHelpCommand.prototype.init = function() { this.command = '!ajuda'; this.parseType = 'startsWith'; return this.rankPrivelege = 'featured'; }; roomHelpCommand.prototype.functionality = function() { var msg1, msg2; msg1 = "Bem vindo a sala Electro, Trap e Dubstep Br! Ser DJ: Crie uma lista de reprodução e coloque Musica do Youtube ou soundcloud. "; msg1 += "Se é novo procure pelo seu nome na sua tela (próximo a cabine do DJ) e depois mude o nome. "; msg1 += "Para Ganhar Pontos clique em Bacana. "; msg2 = "Divirta-se! Qualquer outra duvida chame um adm da sala "; API.sendChat(msg1); return setTimeout((function() { return API.sendChat(msg2); }), 750); }; return roomHelpCommand; })(Command); sourceCommand = (function(_super) { __extends(sourceCommand, _super); function sourceCommand() { _ref6 = sourceCommand.__super__.constructor.apply(this, arguments); return _ref6; } sourceCommand.prototype.init = function() { this.command = ['!autor', '!author', '!autor']; this.parseType = 'exact'; return this.rankPrivelege = 'featured'; }; sourceCommand.prototype.functionality = function() { var msg; msg = ' BOT criado por Backus e editado por !4sharεd..PrᎧ ϟ para a Electro, Trap e Dubstep Brasil '; return API.sendChat(msg); }; return sourceCommand; })(Command); wootCommand = (function(_super) { __extends(wootCommand, _super); function wootCommand() { _ref7 = wootCommand.__super__.constructor.apply(this, arguments); return _ref7; } wootCommand.prototype.init = function() { this.command = '!autowoot'; this.parseType = 'startsWith'; return this.rankPrivelege = 'featured'; }; wootCommand.prototype.functionality = function() { var msg, nameIndex; msg = "Use o auto woot para evitar remoção da cabine de DJ por não estar votando. http://migre.me/fCWA2"; if ((nameIndex = this.msgData.message.indexOf('@')) !== -1) { return API.sendChat(this.msgData.message.substr(nameIndex) + ', ' + msg); } else { return API.sendChat(msg); } }; return wootCommand; })(Command); badQualityCommand = (function(_super) { __extends(badQualityCommand, _super); function badQualityCommand() { _ref8 = badQualityCommand.__super__.constructor.apply(this, arguments); return _ref8; } badQualityCommand.prototype.init = function() { this.command = '.ruim'; this.parseType = 'exact'; return this.rankPrivelege = 'bouncer'; }; badQualityCommand.prototype.functionality = function() { var msg; msg = "Não gostei da sua musica, tente melhorar da proxima vez"; return API.sendChat(msg); }; return badQualityCommand; })(Command); downloadCommand = (function(_super) { __extends(downloadCommand, _super); function downloadCommand() { _ref9 = downloadCommand.__super__.constructor.apply(this, arguments); return _ref9; } downloadCommand.prototype.init = function() { this.command = '!dte'; this.parseType = 'exact'; return this.rankPrivelege = 'featured'; }; downloadCommand.prototype.functionality = function() { var msg; msg = " Participe do grupo e e fique por dentro de tudo "; msg += "https://www.facebook.com/groups/215513185293081/ "; msg += " "; return API.sendChat(msg); }; return downloadCommand; })(Command); afksCommand = (function(_super) { __extends(afksCommand, _super); function afksCommand() { _ref10 = afksCommand.__super__.constructor.apply(this, arguments); return _ref10; } afksCommand.prototype.init = function() { this.command = '!afks'; this.parseType = 'exact'; return this.rankPrivelege = 'bouncer'; }; afksCommand.prototype.functionality = function() { var dj, djAfk, djs, msg, now, _i, _len; msg = ''; djs = API.getDJs(); for (_i = 0, _len = djs.length; _i < _len; _i++) { dj = djs[_i]; now = new Date(); djAfk = now.getTime() - data.users[dj.id].getLastActivity().getTime(); if (djAfk > (10 * 60 * 1000)) { if (msToStr(djAfk) !== false) { msg += dj.username + ' - ' + msToStr(djAfk); msg += '. '; } } } if (msg === '') { return API.sendChat("Ninguém está AFK"); } else { return API.sendChat('AFKs: ' + msg); } }; return afksCommand; })(Command); allAfksCommand = (function(_super) { __extends(allAfksCommand, _super); function allAfksCommand() { _ref11 = allAfksCommand.__super__.constructor.apply(this, arguments); return _ref11; } allAfksCommand.prototype.init = function() { this.command = '!allafks'; this.parseType = 'exact'; return this.rankPrivelege = 'manager'; }; allAfksCommand.prototype.functionality = function() { var msg, now, u, uAfk, usrs, _i, _len; msg = ''; usrs = API.getUsers(); for (_i = 0, _len = usrs.length; _i < _len; _i++) { u = usrs[_i]; now = new Date(); uAfk = now.getTime() - data.users[u.id].getLastActivity().getTime(); if (uAfk > (30 * 60 * 1000)) { if (msToStr(uAfk) !== false) { msg += u.username + ' - ' + msToStr(uAfk); msg += '. '; } } } if (msg === '') { return API.sendChat("Ninguém está AFK"); } else { return API.sendChat('AFKs: ' + msg); } }; return allAfksCommand; })(Command); statusCommand = (function(_super) { __extends(statusCommand, _super); function statusCommand() { _ref12 = statusCommand.__super__.constructor.apply(this, arguments); return _ref12; } statusCommand.prototype.init = function() { this.command = '!status'; this.parseType = 'exact'; return this.rankPrivelege = 'bouncer'; }; statusCommand.prototype.functionality = function() { var day, hour, launch, lt, meridian, min, month, msg, t; lt = data.launchTime; month = lt.getMonth() + 1; day = lt.getDate(); hour = lt.getHours(); meridian = hour % 12 === hour ? 'AM' : 'PM'; min = lt.getMinutes(); min = min < 10 ? '0' + min : min; t = data.totalVotingData; t['songs'] = data.songCount; launch = 'Iniciado em ' + day + '/' + month + ' ' + hour + ':' + min + ' ' + meridian + '. '; msg = launch; return API.sendChat(msg); }; return statusCommand; })(Command); unhookCommand = (function(_super) { __extends(unhookCommand, _super); function unhookCommand() { _ref13 = unhookCommand.__super__.constructor.apply(this, arguments); return _ref13; } unhookCommand.prototype.init = function() { this.command = '!unhook events all()'; this.parseType = 'exact'; return this.rankPrivelege = 'host'; }; unhookCommand.prototype.functionality = function() { API.sendChat('Unhooking all events...'); return undoHooks(); }; return unhookCommand; })(Command); dieCommand = (function(_super) { __extends(dieCommand, _super); function dieCommand() { _ref14 = dieCommand.__super__.constructor.apply(this, arguments); return _ref14; } dieCommand.prototype.init = function() { this.command = '!desligar'; this.parseType = 'exact'; return this.rankPrivelege = 'cohost'; }; dieCommand.prototype.functionality = function() { API.sendChat('Como tu é burro, cara.'); undoHooks(); API.sendChat('Por que fez isso? Que loucura.'); data.implode(); return API.sendChat('Agora o chat bot está desligado'); }; return dieCommand; })(Command); reloadCommand = (function(_super) { __extends(reloadCommand, _super); function reloadCommand() { _ref15 = reloadCommand.__super__.constructor.apply(this, arguments); return _ref15; } reloadCommand.prototype.init = function() { this.command = '!reload'; this.parseType = 'exact'; return this.rankPrivelege = 'cohost'; }; reloadCommand.prototype.functionality = function() { var pupSrc; API.sendChat('Reiniciado!'); undoHooks(); pupSrc = data.pupScriptUrl; data.implode(); return $.getScript(pupSrc); }; return reloadCommand; })(Command); lockCommand = (function(_super) { __extends(lockCommand, _super); function lockCommand() { _ref16 = lockCommand.__super__.constructor.apply(this, arguments); return _ref16; } lockCommand.prototype.init = function() { this.command = '!trava'; this.parseType = 'exact'; return this.rankPrivelege = 'bouncer'; }; lockCommand.prototype.functionality = function() { return data.lockBooth(); }; return lockCommand; })(Command); unlockCommand = (function(_super) { __extends(unlockCommand, _super); function unlockCommand() { _ref17 = unlockCommand.__super__.constructor.apply(this, arguments); return _ref17; } unlockCommand.prototype.init = function() { this.command = '!destrava'; this.parseType = 'exact'; return this.rankPrivelege = 'bouncer'; }; unlockCommand.prototype.functionality = function() { return data.unlockBooth(); }; return unlockCommand; })(Command); removeCommand = (function(_super) { __extends(removeCommand, _super); function removeCommand() { _ref33 = removeCommand.__super__.constructor.apply(this, arguments); return _ref33; } removeCommand.prototype.init = function() { this.command = '!remove'; this.parseType = 'startsWith'; return this.rankPrivelege = 'bouncer'; }; removeCommand.prototype.functionality = function() { var djs, popDj; djs = API.getDJs(); popDj = djs[djs.length - 1]; return API.moderateRemoveDJ(popDj.id); }; return removeCommand; })(Command); staffCommand = (function(_super) { __extends(staffCommand, _super); function staffCommand() { _ref32 = staffCommand.__super__.constructor.apply(this, arguments); return _ref32; } staffCommand.prototype.init = function() { this.command = '!staff'; this.parseType = 'exact'; this.rankPrivelege = 'user'; return window.lastActiveStaffTime; }; staffCommand.prototype.staff = function() { var now, staff, staffAfk, stringstaff, user, _i, _len; staff = API.getStaff(); now = new Date(); stringstaff = ""; for (_i = 0, _len = staff.length; _i < _len; _i++) { user = staff[_i]; if (user.permission > 1) { staffAfk = now.getTime() - data.users[user.id].getLastActivity().getTime(); if (staffAfk < (60 * 60 * 1000)) { stringstaff += "@" + user.username + " "; } } } if (stringstaff.length === 0) { stringstaff = "Não ha ADMs ativos no momento :'("; } return stringstaff; }; staffCommand.prototype.functionality = function() { var currentTime, millisecondsPassed, thestaff; thestaff = this.staff(); currentTime = new Date(); if (!window.lastActiveStaffTime) { API.sendChat(thestaff); return window.lastActiveStaffTime = currentTime; } else { millisecondsPassed = currentTime.getTime() - window.lastActiveStaffTime.getTime(); if (millisecondsPassed > 10000) { window.lastActiveStaffTime = currentTime; return API.sendChat(thestaff); } } }; return staffCommand; })(Command); lockskipCommand = (function(_super) { __extends(lockskipCommand, _super); function lockskipCommand() { _ref34 = lockskipCommand.__super__.constructor.apply(this, arguments); return _ref34; } lockskipCommand.prototype.init = function() { this.command = '!lockskip'; this.parseType = 'startsWith'; return this.rankPrivelege = 'bouncer'; }; lockskipCommand.prototype.functionality = function() { return data.lockBooth(function() { return setTimeout(function() {}, API.moderateForceSkip(), setTimeout(function() { return data.unlockBooth(); }, 5000), 5000); }); }; return lockskipCommand; })(Command); addCommand = (function(_super) { __extends(addCommand, _super); function addCommand() { _ref35 = addCommand.__super__.constructor.apply(this, arguments); return _ref35; } addCommand.prototype.init = function() { this.command = '!add'; this.parseType = 'startsWith'; return this.rankPrivelege = 'bouncer'; }; addCommand.prototype.functionality = function() { var msg, name, r, user; msg = this.msgData.message; if (msg.length > this.command.length + 2) { name = msg.substr(this.command.length + 2); r = new RoomHelper(); user = r.lookupUser(name); if (user !== false) { API.moderateAddDJ(user.id); return setTimeout((function() { return data.unlockBooth(); }), 5000); } } }; return addCommand; })(Command); swapCommand = (function(_super) { __extends(swapCommand, _super); function swapCommand() { _ref18 = swapCommand.__super__.constructor.apply(this, arguments); return _ref18; } swapCommand.prototype.init = function() { this.command = '!swap'; this.parseType = 'startsWith'; return this.rankPrivelege = 'bouncer'; }; swapCommand.prototype.functionality = function() { var msg, r, swapRegex, userAdd, userRemove, users; msg = this.msgData.message; swapRegex = new RegExp("^!swap @(.+) para @(.+)$"); users = swapRegex.exec(msg).slice(1); r = new RoomHelper(); if (users.length === 2) { userRemove = r.lookupUser(users[0]); userAdd = r.lookupUser(users[1]); if (userRemove === false || userAdd === false) { API.sendChat('Ha algum erro'); return false; } else { return data.lockBooth(function() { API.moderateRemoveDJ(userRemove.id); API.sendChat("Removendo " + userRemove.username + "..."); return setTimeout(function() { API.moderateAddDJ(userAdd.id); API.sendChat("Adicionando " + userAdd.username + "..."); return setTimeout(function() { return data.unlockBooth(); }, 1500); }, 1500); }); } } else { return API.sendChat("Tire o espaço entre os nomes e coloque \'para\'"); } }; return swapCommand; })(Command); popCommand = (function(_super) { __extends(popCommand, _super); function popCommand() { _ref19 = popCommand.__super__.constructor.apply(this, arguments); return _ref19; } popCommand.prototype.init = function() { this.command = '!pop'; this.parseType = 'exact'; return this.rankPrivelege = 'mod'; }; popCommand.prototype.functionality = function() { var djs, popDj; djs = API.getDJs(); popDj = djs[djs.length - 1]; return API.moderateRemoveDJ(popDj.id); }; return popCommand; })(Command); pushCommand = (function(_super) { __extends(pushCommand, _super); function pushCommand() { _ref20 = pushCommand.__super__.constructor.apply(this, arguments); return _ref20; } pushCommand.prototype.init = function() { this.command = '!push'; this.parseType = 'startsWith'; return this.rankPrivelege = 'mod'; }; pushCommand.prototype.functionality = function() { var msg, name, r, user; msg = this.msgData.message; if (msg.length > this.command.length + 2) { name = msg.substr(this.command.length + 2); r = new RoomHelper(); user = r.lookupUser(name); if (user !== false) { return API.moderateAddDJ(user.id); } } }; return pushCommand; })(Command); resetAfkCommand = (function(_super) { __extends(resetAfkCommand, _super); function resetAfkCommand() { _ref21 = resetAfkCommand.__super__.constructor.apply(this, arguments); return _ref21; } resetAfkCommand.prototype.init = function() { this.command = '!resetafk'; this.parseType = 'startsWith'; return this.rankPrivelege = 'mod'; }; resetAfkCommand.prototype.functionality = function() { var id, name, u, _ref22; if (this.msgData.message.length > 10) { name = this.msgData.message.substring(11); _ref22 = data.users; for (id in _ref22) { u = _ref22[id]; if (u.getUser().username === name) { u.updateActivity(); API.sendChat('@' + u.getUser().username + ' seu tempo AFK foi reiniciado.'); return; } } API.sendChat('' + name + ' Não pode ser encontrado'); } else { API.sendChat('Mas, wat?'); } }; return resetAfkCommand; })(Command); forceSkipCommand = (function(_super) { __extends(forceSkipCommand, _super); function forceSkipCommand() { _ref22 = forceSkipCommand.__super__.constructor.apply(this, arguments); return _ref22; } forceSkipCommand.prototype.init = function() { this.command = '!forceskip'; this.parseType = 'startsWith'; return this.rankPrivelege = 'cohost'; }; forceSkipCommand.prototype.functionality = function() { var msg, param; msg = this.msgData.message; if (msg.length > 11) { param = msg.substr(11); if (param === 'Ativar') { data.forceSkip = true; return API.sendChat("Pulo forçado ativado."); } else if (param === 'Desativar') { data.forceSkip = false; return API.sendChat("Pulo forçado desativado."); } } }; return forceSkipCommand; })(Command); overplayedCommand = (function(_super) { __extends(overplayedCommand, _super); function overplayedCommand() { _ref23 = overplayedCommand.__super__.constructor.apply(this, arguments); return _ref23; } overplayedCommand.prototype.init = function() { this.command = '!overplayed'; this.parseType = 'exact'; return this.rankPrivelege = 'bouncer'; }; overplayedCommand.prototype.functionality = function() { return API.sendCha("Acho que não, em?"); }; return overplayedCommand; })(Command); uservoiceCommand = (function(_super) { __extends(uservoiceCommand, _super); function uservoiceCommand() { _ref24 = uservoiceCommand.__super__.constructor.apply(this, arguments); return _ref24; } uservoiceCommand.prototype.init = function() { this.command = ['/uservoice()', '/idea()']; this.parseType = 'exact'; return this.rankPrivelege = 'cohost'; }; uservoiceCommand.prototype.functionality = function() { var msg; msg = 'Have an idea for the room, our bot, or an event? Awesome! Submit it to our uservoice and we\'ll get started on it: http://is.gd/IzP4bA'; msg += ' (please don\'t ask for mod)'; return API.sendChat(msg); }; return uservoiceCommand; })(Command); skipCommand = (function(_super) { __extends(skipCommand, _super); function skipCommand() { _ref25 = skipCommand.__super__.constructor.apply(this, arguments); return _ref25; } skipCommand.prototype.init = function() { this.command = '!pula'; this.parseType = 'exact'; return this.rankPrivelege = 'bouncer'; }; skipCommand.prototype.functionality = function() { return API.moderateForceSkip(); }; return skipCommand; })(Command); whyMehCommand = (function(_super) { __extends(whyMehCommand, _super); function whyMehCommand() { _ref26 = whyMehCommand.__super__.constructor.apply(this, arguments); return _ref26; } whyMehCommand.prototype.init = function() { this.command = '!cotas'; this.parseType = 'exact'; return this.rankPrivelege = 'bouncer'; }; whyMehCommand.prototype.functionality = function() { var msg; msg = "/em acaba de ativar o modo cotas! "; msg += "Roubou sua vaga na faculdade, suas mulheres e sua vez na cabine de DJ"; return API.sendChat(msg); }; return whyMehCommand; })(Command); commandsCommand = (function(_super) { __extends(commandsCommand, _super); function commandsCommand() { _ref27 = commandsCommand.__super__.constructor.apply(this, arguments); return _ref27; } commandsCommand.prototype.init = function() { this.command = '!commands'; this.parseType = 'exact'; return this.rankPrivelege = 'bouncer'; }; commandsCommand.prototype.functionality = function() { var allowedUserLevels, c, cc, cmd, msg, user, _i, _j, _len, _len1, _ref28, _ref29; allowedUserLevels = []; user = API.getUser(this.msgData.fromID); window.capturedUser = user; if (user.permission > 5) { allowedUserLevels = ['user', 'mod', 'host']; } else if (user.permission > 2) { allowedUserLevels = ['user', 'mod']; } else { allowedUserLevels = ['user']; } msg = ''; for (_i = 0, _len = cmds.length; _i < _len; _i++) { cmd = cmds[_i]; c = new cmd(''); if (_ref28 = c.rankPrivelege, __indexOf.call(allowedUserLevels, _ref28) >= 0) { if (typeof c.command === "string") { msg += c.command + ', '; } else if (typeof c.command === "object") { _ref29 = c.command; for (_j = 0, _len1 = _ref29.length; _j < _len1; _j++) { cc = _ref29[_j]; msg += cc + ', '; } } } } msg = msg.substring(0, msg.length - 2); return API.sendChat(msg); }; return commandsCommand; })(Command); disconnectLookupCommand = (function(_super) { __extends(disconnectLookupCommand, _super); function disconnectLookupCommand() { _ref28 = disconnectLookupCommand.__super__.constructor.apply(this, arguments); return _ref28; } disconnectLookupCommand.prototype.init = function() { this.command = '!dcmembros'; this.parseType = 'startsWith'; return this.rankPrivelege = 'bouncer'; }; disconnectLookupCommand.prototype.functionality = function() { var cmd, dcHour, dcLookupId, dcMeridian, dcMins, dcSongsAgo, dcTimeStr, dcUser, disconnectInstances, givenName, id, recentDisconnect, resp, u, _i, _len, _ref29, _ref30; cmd = this.msgData.message; if (cmd.length > 11) { givenName = cmd.slice(11); _ref29 = data.users; for (id in _ref29) { u = _ref29[id]; if (u.getUser().username === givenName) { dcLookupId = id; disconnectInstances = []; _ref30 = data.userDisconnectLog; for (_i = 0, _len = _ref30.length; _i < _len; _i++) { dcUser = _ref30[_i]; if (dcUser.id === dcLookupId) { disconnectInstances.push(dcUser); } } if (disconnectInstances.length > 0) { resp = u.getUser().username + ' desconectou ' + disconnectInstances.length.toString() + ' vez'; if (disconnectInstances.length === 1) { resp += '. '; } else { resp += 'es. '; } recentDisconnect = disconnectInstances.pop(); dcHour = recentDisconnect.time.getHours(); dcMins = recentDisconnect.time.getMinutes(); if (dcMins < 10) { dcMins = '0' + dcMins.toString(); } dcMeridian = dcHour % 12 === dcHour ? 'AM' : 'PM'; dcTimeStr = '' + dcHour + ':' + dcMins + ' ' + dcMeridian; dcSongsAgo = data.songCount - recentDisconnect.songCount; resp += 'Sua desconexão mais recente foi as ' + dcTimeStr + ' (' + dcSongsAgo + ' músicas atras). '; if (recentDisconnect.waitlistPosition !== void 0) { resp += 'Ele estava ' + recentDisconnect.waitlistPosition + ' músicas'; if (recentDisconnect.waitlistPosition > 1) { resp += ''; } resp += ' antes da cabine de DJ.'; } else { resp += 'Ele não estava na cabine de dj ou na lista de espera.'; } API.sendChat(resp); return; } else { API.sendChat("" + u.getUser().username + " não desconectou."); return; } } } return API.sendChat("'Este nome " + givenName + " não pode ser encontrado'."); } }; return disconnectLookupCommand; })(Command); voteRatioCommand = (function(_super) { __extends(voteRatioCommand, _super); function voteRatioCommand() { _ref29 = voteRatioCommand.__super__.constructor.apply(this, arguments); return _ref29; } voteRatioCommand.prototype.init = function() { this.command = '!voteratio'; this.parseType = 'startsWith'; return this.rankPrivelege = 'bouncer'; }; voteRatioCommand.prototype.functionality = function() { var msg, name, r, u, votes; r = new RoomHelper(); msg = this.msgData.message; if (msg.length > 12) { name = msg.substr(12); u = r.lookupUser(name); if (u !== false) { votes = r.userVoteRatio(u); msg = u.username + " :+1: " + votes['woot'].toString() + " vezes"; if (votes['woot'] === 1) { msg += ', '; } else { msg += ', '; } msg += "e :-1: " + votes['meh'].toString() + " vezes"; if (votes['meh'] === 1) { msg += '. '; } else { msg += '. '; } msg += "O seu voteratio é: " + votes['positiveRatio'].toString() + "."; return API.sendChat(msg); } else { return API.sendChat("Este nome' " + name + " não pode ser encontrado'"); } } else { return API.sendChat("Faça isso direito, newbie!"); } }; return voteRatioCommand; })(Command); avgVoteRatioCommand = (function(_super) { __extends(avgVoteRatioCommand, _super); function avgVoteRatioCommand() { _ref30 = avgVoteRatioCommand.__super__.constructor.apply(this, arguments); return _ref30; } avgVoteRatioCommand.prototype.init = function() { this.command = '!avgvoteratio'; this.parseType = 'exact'; return this.rankPrivelege = 'mod'; }; avgVoteRatioCommand.prototype.functionality = function() { var averageRatio, msg, r, ratio, roomRatios, uid, user, userRatio, votes, _i, _len, _ref31; roomRatios = []; r = new RoomHelper(); _ref31 = data.voteLog; for (uid in _ref31) { votes = _ref31[uid]; user = data.users[uid].getUser(); userRatio = r.userVoteRatio(user); roomRatios.push(userRatio['positiveRatio']); } averageRatio = 0.0; for (_i = 0, _len = roomRatios.length; _i < _len; _i++) { ratio = roomRatios[_i]; averageRatio += ratio; } averageRatio = averageRatio / roomRatios.length; msg = "Contabilidade de " + roomRatios.length.toString() + " votos por usuário, e a taxa média da sala é de " + averageRatio.toFixed(2).toString() + " votos."; return API.sendChat(msg); }; return avgVoteRatioCommand; })(Command); cmds = [cookieCommand, newSongsCommand, whyWootCommand, themeCommand, rulesCommand, roomHelpCommand, sourceCommand, wootCommand, badQualityCommand, downloadCommand, afksCommand, allAfksCommand, statusCommand, unhookCommand, dieCommand, reloadCommand, lockCommand, unlockCommand, swapCommand, popCommand, pushCommand, overplayedCommand, uservoiceCommand, whyMehCommand, skipCommand, commandsCommand, resetAfkCommand, forceSkipCommand, disconnectLookupCommand, voteRatioCommand, avgVoteRatioCommand]; chatCommandDispatcher = function(chat) { var c, cmd, _i, _len, _results; chatUniversals(chat); _results = []; for (_i = 0, _len = cmds.length; _i < _len; _i++) { cmd = cmds[_i]; c = new cmd(chat); if (c.evalMsg()) { break; } else { _results.push(void 0); } } return _results; }; updateVotes = function(obj) { data.currentwoots = obj.positive; data.currentmehs = obj.negative; return data.currentcurates = obj.curates; }; announceCurate = function(obj) { return announceCurate; }; handleUserJoin = function(user) { data.userJoin(user); data.users[user.id].updateActivity(); return handleUserJoin; }; handleNewSong = function(obj) { var songId; data.intervalMessages(); if (data.currentsong === null) { data.newSong(); } else { data.newSong(); document.getElementById("button-vote-positive").click(); } if (data.forceSkip) { songId = obj.media.id; return setTimeout(function() { var cMedia; cMedia = API.getMedia(); if (cMedia.id === songId) { return API.moderateForceSkip(); } }, obj.media.duration * 1000); } }; handleVote = function(obj) { data.users[obj.user.id].updateActivity(); return data.users[obj.user.id].updateVote(obj.vote); }; handleUserLeave = function(user) { var disconnectStats, i, u, _i, _len, _ref31; disconnectStats = { id: user.id, time: new Date(), songCount: data.songCount }; i = 0; _ref31 = data.internalWaitlist; for (_i = 0, _len = _ref31.length; _i < _len; _i++) { u = _ref31[_i]; if (u.id === user.id) { disconnectStats['waitlistPosition'] = i - 1; data.setInternalWaitlist(); break; } else { i++; } } data.userDisconnectLog.push(disconnectStats); return data.users[user.id].inRoom(false); }; antispam = function(chat) { var plugRoomLinkPatt, sender; plugRoomLinkPatt = /(\bhttps?:\/\/(www.)?plug\.dj[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig; if (plugRoomLinkPatt.exec(chat.message)) { sender = API.getUser(chat.fromID); if (!sender.ambassador && !sender.moderator && !sender.owner && !sender.superuser) { if (!data.users[chat.fromID]["protected"]) { API.sendChat("Sem spam"); return API.moderateDeleteChat(chat.chatID); } else { return API.sendChat("Eu deveria expulsa-lo, mas estamos aqui para nos divertir"); } } } }; fans = function(chat) { var msg; msg = chat.message.toLowerCase(); if (msg.indexOf('¨¨¨¨¨¨') !== -1 || msg.indexOf('¨¨¨¨¨¨') !== -1 || msg.indexOf('¨¨¨¨¨¨') !== -1 || msg.indexOf('¨¨¨¨¨¨') !== -1 || msg.indexOf(':trollface:') !== -1 || msg.indexOf('autowoot:') !== -1) { return API.moderateDeleteChat(chat.chatID); } }; beggar = function(chat) { var msg, r, responses; msg = chat.message.toLowerCase(); responses = ["@{beggar} ", "@{beggar} ", "@{beggar} ", "@{beggar} "]; r = Math.floor(Math.random() * responses.length); if (msg.indexOf('¨¨¨¨') !== -1 || msg.indexOf('¨¨¨¨') !== -1 || msg.indexOf('¨¨¨¨') !== -1 || msg.indexOf('¨¨¨¨¨¨') !== -1 || msg.indexOf('¨¨¨¨¨¨') !== -1) { return API.sendChat(responses[r].replace("{beggar}", chat.from)); } }; chatUniversals = function(chat) { data.activity(chat); antispam(chat); return beggar(chat); }; hook = function(apiEvent, callback) { return API.on(apiEvent, callback); }; unhook = function(apiEvent, callback) { return API.off(apiEvent, callback); }; apiHooks = [ { 'event': API.ROOM_SCORE_UPDATE, 'callback': updateVotes }, { 'event': API.CURATE_UPDATE, 'callback': announceCurate }, { 'event': API.USER_JOIN, 'callback': handleUserJoin }, { 'event': API.DJ_ADVANCE, 'callback': handleNewSong }, { 'event': API.VOTE_UPDATE, 'callback': handleVote }, { 'event': API.CHAT, 'callback': chatCommandDispatcher }, { 'event': API.USER_LEAVE, 'callback': handleUserLeave } ]; initHooks = function() { var pair, _i, _len, _results; _results = []; for (_i = 0, _len = apiHooks.length; _i < _len; _i++) { pair = apiHooks[_i]; _results.push(hook(pair['event'], pair['callback'])); } return _results; }; undoHooks = function() { var pair, _i, _len, _results; _results = []; for (_i = 0, _len = apiHooks.length; _i < _len; _i++) { pair = apiHooks[_i]; _results.push(unhook(pair['event'], pair['callback'])); } return _results; }; initialize(); }).call(this);
muminondrugs
local LocalPlayer = game:GetService("Players").LocalPlayer local ui = loadstring(game:GetObjects("rbxassetid://4133667265")[1].Source)("Library by wally") local w = ui:CreateWindow('Automated') w:Section('Autofarms') local b = w:Button("Autofarm (Forever)", function() print("Autofarm Activated (Forever)") vu = game:GetService("VirtualUser") game:GetService("Players").LocalPlayer.Idled:connect(function() vu:Button2Down(Vector2.new(0, 0), workspace.CurrentCamera.CFrame) wait(1) vu:Button2Up(Vector2.new(0, 0), workspace.CurrentCamera.CFrame) end) print("Anti-Afk Succes!") while true do spawn(function() game:getService("RunService"):BindToRenderStep("NoClip",0,function() pcall(function() if not game.Players.LocalPlayer.Character:findFirstChildOfClass("Humanoid") then return end if not running == true then return end game.Players.LocalPlayer.Character:findFirstChildOfClass("Humanoid"):ChangeState(11) end) end) end) local checks = workspace.BoatTerrains:getDescendants() for i=1,#checks do running = true if checks[i].Name == "DarknessPart" or checks[i].Name == "GatePart" then checks[i].Transparency = 0 if game.Players.LocalPlayer.Character:FindFirstChild("Humanoid") then game.Players.LocalPlayer.Character.HumanoidRootPart.CFrame = checks[i].CFrame end wait(0.42) end end game.Players.LocalPlayer.Character.HumanoidRootPart.CFrame = workspace.GoldenChest.Collider.CFrame repeat if game.Players.LocalPlayer.Character:FindFirstChild("Humanoid") then game.Players.LocalPlayer.Character.Humanoid.Jump = true game.Players.LocalPlayer.Character.HumanoidRootPart.CFrame = workspace.GoldenChest.Collider.CFrame end wait() until not game.Players.LocalPlayer.Character:FindFirstChild("Humanoid") running = false wait() end end) local b = w:Button("Autofarm (Once)", function() print("Autofarm Activated (Once)") spawn(function() game:getService("RunService"):BindToRenderStep("NoClip",0,function() pcall(function() if not game.Players.LocalPlayer.Character:findFirstChildOfClass("Humanoid") then return end if not running == true then return end game.Players.LocalPlayer.Character:findFirstChildOfClass("Humanoid"):ChangeState(11) end) end) end) local checks = workspace.BoatTerrains:getDescendants() for i=1,#checks do running = true if checks[i].Name == "DarknessPart" or checks[i].Name == "GatePart" then checks[i].Transparency = 0 if game.Players.LocalPlayer.Character:FindFirstChild("Humanoid") then game.Players.LocalPlayer.Character.HumanoidRootPart.CFrame = checks[i].CFrame end wait(0.42) end end game.Players.LocalPlayer.Character.HumanoidRootPart.CFrame = workspace.GoldenChest.Collider.CFrame repeat if game.Players.LocalPlayer.Character:FindFirstChild("Humanoid") then game.Players.LocalPlayer.Character.Humanoid.Jump = true game.Players.LocalPlayer.Character.HumanoidRootPart.CFrame = workspace.GoldenChest.Collider.CFrame end wait() until not game.Players.LocalPlayer.Character:FindFirstChild("Humanoid") running = false end) local b = w:Button("Autofarm Treasure (Forever)", function() print("Autofarm Treasure Activated (Forever)") vu = game:GetService("VirtualUser") game:GetService("Players").LocalPlayer.Idled:connect(function() vu:Button2Down(Vector2.new(0, 0), workspace.CurrentCamera.CFrame) wait(1) vu:Button2Up(Vector2.new(0, 0), workspace.CurrentCamera.CFrame) end) print("Anti-Afk Succes!") while true do spawn(function() game:getService("RunService"):BindToRenderStep("NoClip",0,function() pcall(function() if not game.Players.LocalPlayer.Character:findFirstChildOfClass("Humanoid") then return end if not running == true then return end game.Players.LocalPlayer.Character:findFirstChildOfClass("Humanoid"):ChangeState(11) end) end) end) local checks = workspace.BoatTerrains:getDescendants() for i=1,#checks do running = true if checks[i].Name == "LockHolePart1" or checks[i].Name == "LockHolePart2" then checks[i].Transparency = 0 if game.Players.LocalPlayer.Character:FindFirstChild("Humanoid") then game.Players.LocalPlayer.Character.HumanoidRootPart.CFrame = checks[i].CFrame end wait(0.42) end end game.Players.LocalPlayer.Character.HumanoidRootPart.CFrame = workspace.GoldenChest.Collider.CFrame repeat if game.Players.LocalPlayer.Character:FindFirstChild("Humanoid") then game.Players.LocalPlayer.Character.Humanoid.Jump = true game.Players.LocalPlayer.Character.HumanoidRootPart.CFrame = workspace.GoldenChest.Collider.CFrame end wait() until not game.Players.LocalPlayer.Character:FindFirstChild("Humanoid") running = false wait() end end) local b = w:Button("Autofarm Treasure (Once)", function() print("Autofarm Treasure Activated (Once)") spawn(function() game:getService("RunService"):BindToRenderStep("NoClip",0,function() pcall(function() if not game.Players.LocalPlayer.Character:findFirstChildOfClass("Humanoid") then return end if not running == true then return end game.Players.LocalPlayer.Character:findFirstChildOfClass("Humanoid"):ChangeState(11) end) end) end) local checks = workspace.BoatTerrains:getDescendants() for i=1,#checks do running = true if checks[i].Name == "LockHolePart1" or checks[i].Name == "LockHolePart2" then checks[i].Transparency = 0 if game.Players.LocalPlayer.Character:FindFirstChild("Humanoid") then game.Players.LocalPlayer.Character.HumanoidRootPart.CFrame = checks[i].CFrame end wait(0.42) end end game.Players.LocalPlayer.Character.HumanoidRootPart.CFrame = workspace.GoldenChest.Collider.CFrame repeat if game.Players.LocalPlayer.Character:FindFirstChild("Humanoid") then game.Players.LocalPlayer.Character.Humanoid.Jump = true game.Players.LocalPlayer.Character.HumanoidRootPart.CFrame = workspace.GoldenChest.Collider.CFrame end wait() until not game.Players.LocalPlayer.Character:FindFirstChild("Humanoid") running = false end) w:Section('Open Chests') local IBFS = workspace:WaitForChild("ItemBoughtFromShop", 1) w:Dropdown("Chest Type", { list = { "Common Chest", "Uncommon Chest", "Rare Chest", "Epic Chest", "Legendary Chest" }, location = shared, flag = "chesttype" }) w:Button("Open Chest", function() IBFS:FireServer(shared.chesttype or "Common Chest") print("Chest Successfully Opened") end) local qm = workspace:WaitForChild("QuestMakerEvent", 1) if qm then w:Section("Open Quests") w:Dropdown("Quest Name", { list = { "Cloud Quest", "Target Quest", "Ramp Quest", "Find Me Quest", "Dragon Quest", "The Box Quest", "Rings Quest", "Soccor Quest" }, location = shared, flag = "questtype" }) w:Button("Open Quest", function() qm:FireServer(({ ["Cloud Quest"] = 1, ["Target Quest"] = 2, ["Ramp Quest"] = 3, ["Find Me Quest"] = 4, ["Dragon Quest"] = 5, ["The Box Quest"] = 6, ["Rings Quest"] = 7, ["Soccor Quest"] = 8 })[shared.questtype or "Cloud Quest"]) print("Quest Successfully Made") end) end w:Section("Codes") local b = w:Button("Redeem Codes", function() RedeemCode = game:GetService("Workspace").CheckCodeFunction RedeemCode:InvokeServer("=D") RedeemCode:InvokeServer("=p") RedeemCode:InvokeServer("hi") RedeemCode:InvokeServer("squid army") RedeemCode:InvokeServer("chillthrill709 was here") RedeemCode:InvokeServer("TTTRRREEEAAASSSUUURRREEE") print("Codes Activated") end) local b = w:Button("Share Codes", function() print("This Can Take Up To 15 Seconds") SMR = game:GetService("ReplicatedStorage").DefaultChatSystemChatEvents.SayMessageRequest SMR:FireServer("Here Are Some Codes For All Of You!", "All") SMR:FireServer("Currently There Are 6 Codes.", "All") wait(2.5) SMR:FireServer("Code1: =D", "All") wait(2.5) SMR:FireServer("Code2: =p", "All") wait(2.5) SMR:FireServer("Code3: hi", "All") wait(2.5) SMR:FireServer("Code4: squid army", "All") wait(2.5) SMR:FireServer("Code5: chillthrill709 was here", "All") wait(2.5) SMR:FireServer("Code6: TTTRRREEEAAASSSUUURRREEE", "All") print("Codes Shared") end) local w = ui:CreateWindow('Character Cheats') local b = w:Button("Water Godmode", function() LocalPlayerName = game:GetService("Players").LocalPlayer.Name LocalPlayerWorkspace = game:GetService("Workspace")[LocalPlayerName] LocalPlayerWorkspace.WaterDetector:Destroy() print("Water Godmode Enabled") end) local b = w:Button("Noclip (n)", function() noclip = false game:GetService('RunService').Stepped:connect(function() if noclip then game.Players.LocalPlayer.Character.Humanoid:ChangeState(11) end end) end) plr = game.Players.LocalPlayer mouse = plr:GetMouse() mouse.KeyDown:connect(function(key) if key == "n" then noclip = not noclip game.Players.LocalPlayer.Character.Humanoid:ChangeState(11) end end) print("Noclip Loaded! Press 'n' To Toggle On/Off") local box = w:Box('WalkSpeed', { flag = "ws"; type = 'number'; }, function(box, new, old, enter) print(new, old, enter) LocalPlayer.Character.Humanoid.WalkSpeed = tonumber(new) print("WalkSpeed Changed") end) local b2 = w:Button('Reset WalkSpeed', function() LocalPlayer.Character.Humanoid.WalkSpeed = 16 print("WalkSpeed Reset") end) local box = w:Box('JumpPower', { flag = "jp"; type = 'number'; }, function(box, new, old, enter) print(new, old, enter) LocalPlayer.Character.Humanoid.JumpPower = tonumber(new) print("JumpPower Changed") end) local b2 = w:Button('Reset JumpPower', function() LocalPlayer.Character.Humanoid.JumpPower = 50 print("JumpPower Reset") end) local box = w:Box('HipHeight', { flag = "hh"; type = 'number'; }, function(box, new, old, enter) print(new, old, enter) LocalPlayer.Character.Humanoid.HipHeight = tonumber(new) print("HipHeight Changed") end) local b2 = w:Button('Reset HipHeight', function() LocalPlayer.Character.Humanoid.HipHeight = 2 print("HipHeight Reset") end) local s = w:Slider("Gravity", { min = 0; max = 196.2; flag = 'g' }, function(v) game:GetService("Workspace").Gravity = v; end) local b2 = w:Button('Reset Gravity', function() game:GetService("Workspace").Gravity = 196.2 print("Gravity Reset") end) local old = workspace.CurrentCamera.FieldOfView local s = w:Slider("FOV", { min = math.floor(workspace.CurrentCamera.FieldOfView); max = 120; flag = 'fov' }, function(v) workspace.CurrentCamera.FieldOfView = v; end) local b2 = w:Button('Reset FOV', function() s:Set(old) print("Reset") end) w:Section('Kill Yourself') w:Bind("Kill Player", { flag = "killbind"; kbonly = true; default = Enum.KeyCode.RightAlt; }, function() game.Players.LocalPlayer.Character:BreakJoints() print("Killed Yourslef") end) w:Section('Characters') local b = w:Button("Fox Character", function() CC = game:GetService("Workspace").ChangeCharacter CC:FireServer("FoxCharacter") print("Successfully Changed To Fox Character") end) local b = w:Button("Chicken Character", function() CC = game:GetService("Workspace").ChangeCharacter CC:FireServer("ChickenCharacter") print("Successfully Changed To Chicken Character") end) local b = w:Button("Penguin Character", function() CC = game:GetService("Workspace").ChangeCharacter CC:FireServer("PenguinCharacter") print("Successfully Changed To Penguin Character") end) local w = ui:CreateWindow('Teleports') local b = w:Button("Teleport Random Player", function() local randomPlayer = game.Players:GetPlayers() [math.random(1,#game.Players:GetPlayers())] game.Players.LocalPlayer.Character.HumanoidRootPart.CFrame = CFrame.new(Vector3.new(randomPlayer.Character.Head.Position.X, randomPlayer.Character.Head.Position.Y, randomPlayer.Character.Head.Position.Z)) print("Teleported To ???") end) local box = w:Box('Player', { flag = "p"; type = 'string'; }, function(box, new, old, enter) print(new, old, enter) _G.PlayerSelected = new end) local b2 = w:Button('Teleport', function() PlayerName = game:GetService("Players")[_G.PlayerSelected] LocalPlayer.Character.HumanoidRootPart.CFrame = PlayerName.Character.HumanoidRootPart.CFrame print("Teleported To Player") end) local b = w:Button("Teleport Tool", function() local plr = game:GetService("Players").LocalPlayer local mouse = plr:GetMouse() local tool = Instance.new("Tool") tool.RequiresHandle = false tool.Name = "Teleport Tool" tool.Activated:Connect(function() local root = plr.Character.HumanoidRootPart local pos = mouse.Hit.Position+Vector3.new(0,2.5,0) local offset = pos-root.Position root.CFrame = root.CFrame+offset end) tool.Parent = plr.Backpack print("Tool Received") end) w:Section('Team Teleports') local b = w:Button("BlackZone", function() LocalPlayer.Character.HumanoidRootPart.CFrame = CFrame.new(-328.943665, -9.89999294, -72.1218643, -0.000303131208, -3.68797224e-08, 0.99999994, 3.53605003e-08, 1, 3.68904445e-08, -0.99999994, 3.53716807e-08, -0.000303131208) print("Teleported To BlackZone") end) local b = w:Button("Really blueZone", function() LocalPlayer.Character.HumanoidRootPart.CFrame = CFrame.new(221.835587, -9.89999294, 289.496735, 3.00895917e-05, 1.89661886e-08, -1, -1.8994708e-08, 1, 1.89656184e-08, 1, 1.89941378e-08, 3.00895917e-05) print("Teleported To Really blueZone") end) local b = w:Button("CamoZone", function() LocalPlayer.Character.HumanoidRootPart.CFrame = CFrame.new(-328.966553, -9.89999294, 285.890778, 2.32723869e-05, 4.81436508e-08, 1, -8.0430631e-08, 1, -4.81417786e-08, -1, -8.04295084e-08, 2.32723869e-05) print("Teleported To CamoZone") end) local b = w:Button("MagentaZone", function() LocalPlayer.Character.HumanoidRootPart.CFrame = CFrame.new(221.835083, -9.89999294, 647.695251, -2.21245518e-05, -1.27197168e-08, -1, -7.80432288e-08, 1, -1.27179902e-08, 1, 7.80429446e-08, -2.21245518e-05) print("Teleported To MagentaZone") end) local b = w:Button("Really redZone", function() LocalPlayer.Character.HumanoidRootPart.CFrame = CFrame.new(221.835068, -9.89999294, -68.7047195, -2.20595903e-05, -1.15739818e-08, -1, -8.31205469e-08, 1, -1.15721486e-08, 1, 8.31202911e-08, -2.20595903e-05) print("Teleported To Really redZone") end) local b = w:Button("WhiteZone", function() LocalPlayer.Character.HumanoidRootPart.CFrame = CFrame.new(-53.5637512, -9.89999294, -345.507538, 1, 4.29280682e-08, -2.15271102e-05, -4.29279226e-08, 1, 6.71854927e-09, 2.15271102e-05, -6.71762512e-09, 1) print("Teleported To WhiteZone") end) local b = w:Button("New YellerZone", function() LocalPlayer.Character.HumanoidRootPart.CFrame = CFrame.new(-328.942108, -9.89999294, 643.876709, -0.00115210481, -5.0259036e-08, 0.999999344, 4.44386856e-08, 1, 5.03102662e-08, -0.999999344, 4.44966162e-08, -0.00115210481) print("Teleported To New YellerZone") end) w:Section('TheEnd') local b = w:Button("WaterSand", function() LocalPlayer.Character.HumanoidRootPart.CFrame = CFrame.new(-53.5905228, -360.700012, 9499.88184, 0.99999994, 5.23848342e-09, 0.000277680316, -5.23909627e-09, 1, 2.20502683e-09, -0.000277680316, -2.20648144e-09, 0.99999994) print("Teleported To WaterSand") end) local w = ui:CreateWindow('Miscellaneous') w:Section('New') local b = w:Button("Kill All", function() print("[WARNING] Only Works If Players Have Pvp Mode Enabled") LocalPlayer.Character.HumanoidRootPart.CFrame = CFrame.new(-53.5655861, -360.700012, 9391.29199, 0.999978304, 8.00575783e-09, -0.00659008743, -8.00250088e-09, 1, 5.20489041e-10, 0.00659008743, -4.67740568e-10, 0.999978304) print("Successfully Teleported Players") game:GetService("RunService").Stepped:connect(function() for i,v in pairs (game:GetService("Players"):GetChildren()) do if v.TeamColor ~= LocalPlayer.TeamColor and v.Name ~= LocalPlayer.Name then v.Character.HumanoidRootPart.Anchored = true v.Character.HumanoidRootPart.CFrame = CFrame.new(-53.5905228, -360.700012, 9499.88184, 0.99999994, 5.23848342e-09, 0.000277680316, -5.23909627e-09, 1, 2.20502683e-09, -0.000277680316, -2.20648144e-09, 0.99999994) end end end) end) local b = w:Button("Big Head Player", function() LocalPlayerName = game:GetService("Players").LocalPlayer.Name LocalPlayerWorkspace = game:GetService("Workspace")[LocalPlayerName] LocalPlayerWorkspace.Head.Size = Vector3.new(4, 2, 2) print("Head Enlarged") end) w:Section('Launch Teams') local b = w:Button("Launch BlackZone", function() game:GetService("Workspace").BlackZone.RE:FireServer() print("Launched BlackZone") end) local b = w:Button("Launch Really blueZone", function() game:GetService("Workspace")["Really blueZone"].RE:FireServer() print("Launched Really blueZone") end) local b = w:Button("Launch CamoZone", function() game:GetService("Workspace").CamoZone.RE:FireServer() print("Launched CamoZone") end) local b = w:Button("Launch MagentaZone", function() game:GetService("Workspace")["MagentaZone"].RE:FireServer() print("Launched MagentaZone") end) local b = w:Button("Launch Really redZone", function() game:GetService("Workspace")["Really redZone"].RE:FireServer() print("Launched Really redZone") end) local b = w:Button("Launch WhiteZone", function() game:GetService("Workspace")["WhiteZone"].RE:FireServer() print("Launched WhiteZone") end) local b = w:Button("Launch New YellerZone", function() game:GetService("Workspace")["New YellerZone"].RE:FireServer() print("Launched New YellerZone") end) local w = ui:CreateWindow('Fun') w:Section('Flings') local b = w:Button("Spin Fling (R6)", function() power = 500 -- change this to make it more or less powerful game:GetService('RunService').Stepped:connect(function() game.Players.LocalPlayer.Character.Head.CanCollide = false game.Players.LocalPlayer.Character.Torso.CanCollide = false game.Players.LocalPlayer.Character["Left Leg"].CanCollide = false game.Players.LocalPlayer.Character["Right Leg"].CanCollide = false end) wait(.1) local bambam = Instance.new("BodyThrust") bambam.Parent = game.Players.LocalPlayer.Character.HumanoidRootPart bambam.Force = Vector3.new(power,0,power) bambam.Location = game.Players.LocalPlayer.Character.HumanoidRootPart.Position print("Spin Fling (R6) Enabled") end) local b = w:Button("Spin Fling (R15)", function() power = 500 -- change this to make it more or less powerful game:GetService('RunService').Stepped:connect(function() game.Players.LocalPlayer.Character.Head.CanCollide = false game.Players.LocalPlayer.Character.UpperTorso.CanCollide = false game.Players.LocalPlayer.Character.LowerTorso.CanCollide = false game.Players.LocalPlayer.Character.HumanoidRootPart.CanCollide = false end) wait(.1) local bambam = Instance.new("BodyThrust") bambam.Parent = game.Players.LocalPlayer.Character.HumanoidRootPart bambam.Force = Vector3.new(power,0,power) bambam.Location = game.Players.LocalPlayer.Character.HumanoidRootPart.Position print("Spin Fling (R15) Enabled") end) local b = w:Button("Invisible Fling", function() spawn(function() local message = Instance.new("Message",workspace) message.Text = "Loaded Press 'z' To Execute Invisibility , Press 'x' To Respawn)" wait(0.5) message:Destroy() end) local mouse = game.Players.LocalPlayer:GetMouse() local groot = nil mouse.KeyDown:connect(function(k) if k == "z" then spawn(function() local message = Instance.new("Message",workspace) message.Text = "Fe Invisible Fling By Loaded (Wait 11 Seconds To Load)" wait(11) message:Destroy() end) local ch = game.Players.LocalPlayer.Character local prt=Instance.new("Model", workspace) local z1 = Instance.new("Part", prt) z1.Name="Torso" z1.CanCollide = false z1.Anchored = true local z2 =Instance.new("Part", prt) z2.Name="Head" z2.Anchored = true z2.CanCollide = false local z3 =Instance.new("Humanoid", prt) z3.Name="Humanoid" z1.Position = Vector3.new(0,9999,0) z2.Position = Vector3.new(0,9991,0) game.Players.LocalPlayer.Character=prt wait(5) game.Players.LocalPlayer.Character=ch wait(6) local plr = game.Players.LocalPlayer mouse = plr:GetMouse() local Hum = Instance.new("Humanoid") Hum.Parent = game.Players.LocalPlayer.Character local root = game.Players.LocalPlayer.Character.HumanoidRootPart for i,v in pairs(plr.Character:GetChildren()) do if v ~= root and v.Name ~= "Humanoid" then v:Destroy() end end workspace.CurrentCamera.CameraSubject = root local se = Instance.new("SelectionBox",root) se.Adornee = root game:GetService('RunService').Stepped:connect(function() game.Players.LocalPlayer.Character.HumanoidRootPart.CanCollide = false end) game:GetService('RunService').RenderStepped:connect(function() game.Players.LocalPlayer.Character.HumanoidRootPart.CanCollide = false end) power = 999999 -- change this to make it more or less powerful power = power*10 --- wait(.1) local bambam = Instance.new("BodyThrust") bambam.Parent = game.Players.LocalPlayer.Character.HumanoidRootPart bambam.Force = Vector3.new(power,0,power) bambam.Location = game.Players.LocalPlayer.Character.HumanoidRootPart.Position local plr = game.Players.LocalPlayer local torso = root local flying = true local deb = true local ctrl = {f = 0, b = 0, l = 0, r = 0} local lastctrl = {f = 0, b = 0, l = 0, r = 0} local maxspeed = 120 local speed = 15 ---local bambam = Instance.new("BodyThrust") ---bambam.Parent = torso --bambam.Force = Vector3.new(9999999,0,9999999) --bambam.Location = torso.Position --- groot = root function Fly() local bg = Instance.new("BodyGyro", torso) bg.P = 9e4 bg.maxTorque = Vector3.new(0, 0, 0) bg.cframe = torso.CFrame local bv = Instance.new("BodyVelocity", torso) bv.velocity = Vector3.new(0,0,0) bv.maxForce = Vector3.new(9e9, 9e9, 9e9) repeat wait() if ctrl.l + ctrl.r ~= 0 or ctrl.f + ctrl.b ~= 0 then speed = speed+.2 if speed > maxspeed then speed = maxspeed end elseif not (ctrl.l + ctrl.r ~= 0 or ctrl.f + ctrl.b ~= 0) and speed ~= 0 then speed = speed-1 if speed < 0 then speed = 0 end end if (ctrl.l + ctrl.r) ~= 0 or (ctrl.f + ctrl.b) ~= 0 then bv.velocity = ((game.Workspace.CurrentCamera.CoordinateFrame.lookVector * (ctrl.f+ctrl.b)) + ((game.Workspace.CurrentCamera.CoordinateFrame * CFrame.new(ctrl.l+ctrl.r,(ctrl.f+ctrl.b)*.2,0).p) - game.Workspace.CurrentCamera.CoordinateFrame.p))*speed lastctrl = {f = ctrl.f, b = ctrl.b, l = ctrl.l, r = ctrl.r} elseif (ctrl.l + ctrl.r) == 0 and (ctrl.f + ctrl.b) == 0 and speed ~= 0 then bv.velocity = ((game.Workspace.CurrentCamera.CoordinateFrame.lookVector * (lastctrl.f+lastctrl.b)) + ((game.Workspace.CurrentCamera.CoordinateFrame * CFrame.new(lastctrl.l+lastctrl.r,(lastctrl.f+lastctrl.b)*.2,0).p) - game.Workspace.CurrentCamera.CoordinateFrame.p))*speed else bv.velocity = Vector3.new(0,0.1,0) end until not flying ctrl = {f = 0, b = 0, l = 0, r = 0} lastctrl = {f = 0, b = 0, l = 0, r = 0} speed = 0 bg:Destroy() bv:Destroy() end mouse.KeyDown:connect(function(key) if key:lower() == "e" then if flying then flying = false else flying = true Fly() end elseif key:lower() == "w" then ctrl.f = 1 elseif key:lower() == "s" then ctrl.b = -1 elseif key:lower() == "a" then ctrl.l = -1 elseif key:lower() == "d" then ctrl.r = 1 end end) mouse.KeyUp:connect(function(key) if key:lower() == "w" then ctrl.f = 0 elseif key:lower() == "s" then ctrl.b = 0 elseif key:lower() == "a" then ctrl.l = 0 elseif key:lower() == "d" then ctrl.r = 0 elseif key:lower() == "r" then end end) Fly() elseif k == "x" then spawn(function() local message = Instance.new("Message",workspace) message.Text = "Respawning Don't Spam" wait(1) message:Destroy() end) local saved = groot.Position local ch = game.Players.LocalPlayer.Character local prt=Instance.new("Model", workspace) local z1 = Instance.new("Part", prt) z1.Name="Torso" z1.CanCollide = false z1.Anchored = true local z2 =Instance.new("Part", prt) z2.Name="Head" z2.Anchored = true z2.CanCollide = false local z3 =Instance.new("Humanoid", prt) z3.Name="Humanoid" z1.Position = Vector3.new(0,9999,0) z2.Position = Vector3.new(0,9991,0) game.Players.LocalPlayer.Character=prt wait(5) game.Players.LocalPlayer.Character=ch local poop = nil repeat wait() poop = game.Players.LocalPlayer.Character:FindFirstChild("Head") until poop ~= nil wait(1) game:GetService("Players").LocalPlayer.Character.HumanoidRootPart.CFrame = CFrame.new(saved) print("Invisible Fling Enabled") end end) end) w:Section('Fly') w:Button("Fly (f)", function() repeat wait() until game.Players.LocalPlayer and game.Players.LocalPlayer.Character and game.Players.LocalPlayer.Character:findFirstChild("UpperTorso") and game.Players.LocalPlayer.Character:findFirstChild("Humanoid") local mouse = game.Players.LocalPlayer:GetMouse() repeat wait() until mouse local plr = game.Players.LocalPlayer local UpperTorso = plr.Character.UpperTorso local flying = true local deb = true local ctrl = {f = 0, b = 0, l = 0, r = 0} local lastctrl = {f = 0, b = 0, l = 0, r = 0} local maxspeed = 100 local speed = 1 function Fly() plr.Character.Humanoid.WalkSpeed = 16.5 plr.Character.Humanoid.JumpPower = 50.5 local bg = Instance.new("BodyGyro", UpperTorso) bg.P = 9e4 bg.maxTorque = Vector3.new(9e9, 9e9, 9e9) bg.cframe = UpperTorso.CFrame local bv = Instance.new("BodyVelocity", UpperTorso) bv.velocity = Vector3.new(0,0.1,0) bv.maxForce = Vector3.new(9e9, 9e9, 9e9) repeat wait() plr.Character.Humanoid.PlatformStand = true if ctrl.l + ctrl.r ~= 0 or ctrl.f + ctrl.b ~= 0 then speed = speed+.5+(speed/maxspeed) if speed > maxspeed then speed = maxspeed end elseif not (ctrl.l + ctrl.r ~= 0 or ctrl.f + ctrl.b ~= 0) and speed ~= 0 then speed = speed-1 if speed < 0 then speed = 0 end end if (ctrl.l + ctrl.r) ~= 0 or (ctrl.f + ctrl.b) ~= 0 then bv.velocity = ((game.Workspace.CurrentCamera.CoordinateFrame.lookVector * (ctrl.f+ctrl.b)) + ((game.Workspace.CurrentCamera.CoordinateFrame * CFrame.new(ctrl.l+ctrl.r,(ctrl.f+ctrl.b)*.2,0).p) - game.Workspace.CurrentCamera.CoordinateFrame.p))*speed lastctrl = {f = ctrl.f, b = ctrl.b, l = ctrl.l, r = ctrl.r} elseif (ctrl.l + ctrl.r) == 0 and (ctrl.f + ctrl.b) == 0 and speed ~= 0 then bv.velocity = ((game.Workspace.CurrentCamera.CoordinateFrame.lookVector * (lastctrl.f+lastctrl.b)) + ((game.Workspace.CurrentCamera.CoordinateFrame * CFrame.new(lastctrl.l+lastctrl.r,(lastctrl.f+lastctrl.b)*.2,0).p) - game.Workspace.CurrentCamera.CoordinateFrame.p))*speed else bv.velocity = Vector3.new(0,0.1,0) end bg.cframe = game.Workspace.CurrentCamera.CoordinateFrame * CFrame.Angles(-math.rad((ctrl.f+ctrl.b)*50*speed/maxspeed),0,0) until not flying ctrl = {f = 0, b = 0, l = 0, r = 0} lastctrl = {f = 0, b = 0, l = 0, r = 0} speed = 0 bg:Destroy() bv:Destroy() plr.Character.Humanoid.PlatformStand = false end mouse.KeyDown:connect(function(key) if key:lower() == "f" then if flying then flying = false else flying = true Fly() end elseif key:lower() == "w" then ctrl.f = 1 elseif key:lower() == "s" then ctrl.b = -1 elseif key:lower() == "a" then ctrl.l = -1 elseif key:lower() == "d" then ctrl.r = 1 end end) mouse.KeyUp:connect(function(key) if key:lower() == "w" then ctrl.f = 0 elseif key:lower() == "s" then ctrl.b = 0 elseif key:lower() == "a" then ctrl.l = 0 elseif key:lower() == "d" then ctrl.r = 0 end end) Fly() print("Fly Enabled") end) local b = w:Button("Destroy Gui", function() game:GetService("CoreGui").ScreenGui:Destroy() print("Gui Destroyed") end) game:GetService("Workspace").ExploitCheckRemote:Destroy() print("AntiCheat Deactivated") print("Gui Loaded")
sanketpandia
A crew centre for an Infinite Flight Virtual Airline
TridentWolfz
// Generated by CoffeeScript 1.6.3 (function() { var Command, RoomHelper, User, addCommand, afkCheck, afksCommand, allAfksCommand, announceCurate, antispam, apiHooks, avgVoteRatioCommand, badQualityCommand, beggar, chatCommandDispatcher, chatUniversals, cmds, commandsCommand, cookieCommand, data, dieCommand, disconnectLookupCommand, downloadCommand, forceSkipCommand, handleNewSong, handleUserJoin, handleUserLeave, handleVote, hook, initEnvironment, initHooks, initialize, lockCommand, lockskipCommand, msToStr, newSongsCommand, overplayedCommand, popCommand, populateUserData, pupOnline, pushCommand, reloadCommand, resetAfkCommand, roomHelpCommand, rulesCommand, settings, skipCommand, staffCommand, sourceCommand, statusCommand, swapCommand, themeCommand, undoHooks, unhook, unhookCommand, unlockCommand, updateVotes, uservoiceCommand, voteRatioCommand, whyMehCommand, whyWootCommand, wootCommand, _ref, _ref1, _ref10, _ref11, _ref12, _ref13, _ref14, _ref15, _ref16, _ref17, _ref18, _ref19, _ref2, _ref20, _ref21, _ref22, _ref23, _ref24, _ref25, _ref26, _ref27, _ref28, _ref29, _ref3, _ref30, _ref32, ref33, _ref34, ref35, _ref4, _ref5, _ref6, _ref7, _ref8, _ref9, __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; settings = (function() { function settings() { this.implode = __bind(this.implode, this); this.intervalMessages = __bind(this.intervalMessages, this); this.startAfkInterval = __bind(this.startAfkInterval, this); this.setInternalWaitlist = __bind(this.setInternalWaitlist, this); this.userJoin = __bind(this.userJoin, this); this.getRoomUrlPath = __bind(this.getRoomUrlPath, this); this.startup = __bind(this.startup, this); } settings.prototype.currentsong = {}; settings.prototype.users = {}; settings.prototype.djs = []; settings.prototype.mods = []; settings.prototype.host = []; settings.prototype.hasWarned = false; settings.prototype.currentwoots = 0; settings.prototype.currentmehs = 0; settings.prototype.currentcurates = 0; settings.prototype.roomUrlPath = null; settings.prototype.internalWaitlist = []; settings.prototype.userDisconnectLog = []; settings.prototype.voteLog = {}; settings.prototype.seshOn = false; settings.prototype.forceSkip = false; settings.prototype.seshMembers = []; settings.prototype.launchTime = null; settings.prototype.totalVotingData = { woots: 0, mehs: 0, curates: 0 }; settings.prototype.pupScriptUrl = 'https://raw.github.com/Brutos/chatbotvm/master/.gitignore'; settings.prototype.afkTime = 15 * 60 * 1000; settings.prototype.songIntervalMessages = [ { interval: 7, offset: 0, msg: "/em: Mantenha-se sempre votando, se não será removido da lista de espera e da cabine de DJ." },{ interval: 5, offset: 0, msg: "/em: Make sure that you're voting or you will be removed from the wait list and from the DJ Booth." },{ interval: 9, offset: 0, msg: "/em: Entre no nosso grupo do facebook e fique por dentro de todas as nossas atualizações: https://www.facebook.com/groups/DTEplugdj/" } ]; settings.prototype.songCount = 0; settings.prototype.startup = function() { this.launchTime = new Date(); return this.roomUrlPath = this.getRoomUrlPath(); }; settings.prototype.getRoomUrlPath = function() { return window.location.pathname.replace(/\//g, ''); }; settings.prototype.newSong = function() { this.totalVotingData.woots += this.currentwoots; this.totalVotingData.mehs += this.currentmehs; this.totalVotingData.curates += this.currentcurates; this.setInternalWaitlist(); this.currentsong = API.getMedia(); if (this.currentsong !== null) { return this.currentsong; } else { return false; } }; settings.prototype.userJoin = function(u) { var userIds, _ref; userIds = Object.keys(this.users); if (_ref = u.id, __indexOf.call(userIds, _ref) >= 0) { return this.users[u.id].inRoom(true); } else { this.users[u.id] = new User(u); return this.voteLog[u.id] = {}; } }; settings.prototype.setInternalWaitlist = function() { var boothWaitlist, fullWaitList, lineWaitList; boothWaitlist = API.getDJs().slice(1); lineWaitList = API.getWaitList(); fullWaitList = boothWaitlist.concat(lineWaitList); return this.internalWaitlist = fullWaitList; }; settings.prototype.activity = function(obj) { if (obj.type === 'message') { return this.users[obj.fromID].updateActivity(); } }; settings.prototype.startAfkInterval = function() { return this.afkInterval = setInterval(afkCheck, 2000); }; settings.prototype.intervalMessages = function() { var msg, _i, _len, _ref, _results; this.songCount++; _ref = this.songIntervalMessages; _results = []; for (_i = 0, _len = _ref.length; _i < _len; _i++) { msg = _ref[_i]; if (((this.songCount + msg['offset']) % msg['interval']) === 0) { _results.push(API.sendChat(msg['msg'])); } else { _results.push(void 0); } } return _results; }; settings.prototype.implode = function() { var item, val; for (item in this) { val = this[item]; if (typeof this[item] === 'object') { delete this[item]; } } return clearInterval(this.afkInterval); }; settings.prototype.lockBooth = function(callback) { if (callback == null) { callback = null; } return $.ajax({ url: "http://plug.dj/_/gateway/room.update_options", type: 'POST', data: JSON.stringify({ service: "room.update_options", body: [ this.roomUrlPath, { "boothLocked": true, "waitListEnabled": true, "maxPlays": 1, "maxDJs": 5 } ] }), async: this.async, dataType: 'json', contentType: 'application/json' }).done(function() { if (callback != null) { return callback(); } }); }; settings.prototype.unlockBooth = function(callback) { if (callback == null) { callback = null; } return $.ajax({ url: "http://plug.dj/_/gateway/room.update_options", type: 'POST', data: JSON.stringify({ service: "room.update_options", body: [ this.roomUrlPath, { "boothLocked": false, "waitListEnabled": true, "maxPlays": 1, "maxDJs": 5 } ] }), async: this.async, dataType: 'json', contentType: 'application/json' }).done(function() { if (callback != null) { return callback(); } }); }; return settings; })(); data = new settings(); User = (function() { User.prototype.afkWarningCount = 0; User.prototype.lastWarning = null; User.prototype["protected"] = false; User.prototype.isInRoom = true; function User(user) { this.user = user; this.updateVote = __bind(this.updateVote, this); this.inRoom = __bind(this.inRoom, this); this.notDj = __bind(this.notDj, this); this.warn = __bind(this.warn, this); this.getIsDj = __bind(this.getIsDj, this); this.getWarningCount = __bind(this.getWarningCount, this); this.getUser = __bind(this.getUser, this); this.getLastWarning = __bind(this.getLastWarning, this); this.getLastActivity = __bind(this.getLastActivity, this); this.updateActivity = __bind(this.updateActivity, this); this.init = __bind(this.init, this); this.init(); } User.prototype.init = function() { return this.lastActivity = new Date(); }; User.prototype.updateActivity = function() { this.lastActivity = new Date(); this.afkWarningCount = 0; return this.lastWarning = null; }; User.prototype.getLastActivity = function() { return this.lastActivity; }; User.prototype.getLastWarning = function() { if (this.lastWarning === null) { return false; } else { return this.lastWarning; } }; User.prototype.getUser = function() { return this.user; }; User.prototype.getWarningCount = function() { return this.afkWarningCount; }; User.prototype.getIsDj = function() { var DJs, dj, _i, _len; DJs = API.getDJs(); for (_i = 0, _len = DJs.length; _i < _len; _i++) { dj = DJs[_i]; if (this.user.id === dj.id) { return true; } } return false; }; User.prototype.warn = function() { this.afkWarningCount++; return this.lastWarning = new Date(); }; User.prototype.notDj = function() { this.afkWarningCount = 0; return this.lastWarning = null; }; User.prototype.inRoom = function(online) { return this.isInRoom = online; }; User.prototype.updateVote = function(v) { if (this.isInRoom) { return data.voteLog[this.user.id][data.currentsong.id] = v; } }; return User; })(); RoomHelper = (function() { function RoomHelper() {} RoomHelper.prototype.lookupUser = function(username) { var id, u, _ref; _ref = data.users; for (id in _ref) { u = _ref[id]; if (u.getUser().username === username) { return u.getUser(); } } return false; }; RoomHelper.prototype.userVoteRatio = function(user) { var songId, songVotes, vote, votes; songVotes = data.voteLog[user.id]; votes = { 'woot': 0, 'meh': 0 }; for (songId in songVotes) { vote = songVotes[songId]; if (vote === 1) { votes['woot']++; } else if (vote === -1) { votes['meh']++; } } votes['positiveRatio'] = (votes['woot'] / (votes['woot'] + votes['meh'])).toFixed(2); return votes; }; return RoomHelper; })(); pupOnline = function() { return API.sendChat("/me: brutos versão ETDBR 100%. ON!"); }; populateUserData = function() { var u, users, _i, _len; users = API.getUsers(); for (_i = 0, _len = users.length; _i < _len; _i++) { u = users[_i]; data.users[u.id] = new User(u); data.voteLog[u.id] = {}; } }; initEnvironment = function() { document.getElementById("button-vote-positive").click(); return document.getElementById("button-sound").click(); }; initialize = function() { pupOnline(); populateUserData(); initEnvironment(); initHooks(); data.startup(); data.newSong(); return data.startAfkInterval(); }; afkCheck = function() { var DJs, id, lastActivity, lastWarned, now, oneMinute, secsLastActive, timeSinceLastActivity, timeSinceLastWarning, twoMinutes, user, warnMsg, _ref, _results; _ref = data.users; _results = []; for (id in _ref) { user = _ref[id]; now = new Date(); lastActivity = user.getLastActivity(); timeSinceLastActivity = now.getTime() - lastActivity.getTime(); if (timeSinceLastActivity > data.afkTime) { if (user.getIsDj()) { secsLastActive = timeSinceLastActivity / 1000; if (user.getWarningCount() === 0) { user.warn(); _results.push(API.sendChat("@" + user.getUser().username + ", Eu não vi você votar durante 30 minutos. Vote nos próximos 2 minutos, se não será removido.")); } else if (user.getWarningCount() === 1) { lastWarned = user.getLastWarning(); timeSinceLastWarning = now.getTime() - lastWarned.getTime(); twoMinutes = 1 * 60 * 1000; if (timeSinceLastWarning > twoMinutes) { user.warn(); warnMsg = "@" + user.getUser().username; warnMsg += ", Eu não vi você votar durante 32 minutos. Vote no próximo minuto ou eu o removerei, este é seu ultimo aviso."; _results.push(API.sendChat(warnMsg)); } else { _results.push(void 0); } } else if (user.getWarningCount() === 2) { lastWarned = user.getLastWarning(); timeSinceLastWarning = now.getTime() - lastWarned.getTime(); oneMinute = 1 * 60 * 1000; if (timeSinceLastWarning > oneMinute) { DJs = API.getDJs(); if (DJs.length > 0 && DJs[0].id !== user.getUser().id) { API.sendChat("@" + user.getUser().username + ", Você teve 2 avisos. Por favor, mantenha-se sempre votando."); API.moderateRemoveDJ(id); _results.push(user.warn()); } else { _results.push(void 0); } } else { _results.push(void 0); } } else { _results.push(void 0); } } else { _results.push(user.notDj()); } } else { _results.push(void 0); } } return _results; }; msToStr = function(msTime) { var ms, msg, timeAway; msg = ''; timeAway = { 'days': 0, 'hours': 0, 'minutes': 0, 'seconds': 0 }; ms = { 'day': 24 * 60 * 60 * 1000, 'hour': 60 * 60 * 1000, 'minute': 60 * 1000, 'second': 1000 }; if (msTime > ms['day']) { timeAway['days'] = Math.floor(msTime / ms['day']); msTime = msTime % ms['day']; } if (msTime > ms['hour']) { timeAway['hours'] = Math.floor(msTime / ms['hour']); msTime = msTime % ms['hour']; } if (msTime > ms['minute']) { timeAway['minutes'] = Math.floor(msTime / ms['minute']); msTime = msTime % ms['minute']; } if (msTime > ms['second']) { timeAway['seconds'] = Math.floor(msTime / ms['second']); } if (timeAway['days'] !== 0) { msg += timeAway['days'].toString() + 'd'; } if (timeAway['hours'] !== 0) { msg += timeAway['hours'].toString() + 'h'; } if (timeAway['minutes'] !== 0) { msg += timeAway['minutes'].toString() + 'm'; } if (timeAway['seconds'] !== 0) { msg += timeAway['seconds'].toString() + 's'; } if (msg !== '') { return msg; } else { return false; } }; Command = (function() { function Command(msgData) { this.msgData = msgData; this.init(); } Command.prototype.init = function() { this.parseType = null; this.command = null; return this.rankPrivelege = null; }; Command.prototype.functionality = function(data) {}; Command.prototype.hasPrivelege = function() { var user; user = data.users[this.msgData.fromID].getUser(); switch (this.rankPrivelege) { case 'host': return user.permission === 5; case 'cohost': return user.permission >= 4; case 'mod': return user.permission >= 3; case 'manager': return user.permission >= 3; case 'bouncer': return user.permission >= 2; case 'featured': return user.permission >= 1; default: return true; } }; Command.prototype.commandMatch = function() { var command, msg, _i, _len, _ref; msg = this.msgData.message; if (typeof this.command === 'string') { if (this.parseType === 'exact') { if (msg === this.command) { return true; } else { return false; } } else if (this.parseType === 'startsWith') { if (msg.substr(0, this.command.length) === this.command) { return true; } else { return false; } } else if (this.parseType === 'contains') { if (msg.indexOf(this.command) !== -1) { return true; } else { return false; } } } else if (typeof this.command === 'object') { _ref = this.command; for (_i = 0, _len = _ref.length; _i < _len; _i++) { command = _ref[_i]; if (this.parseType === 'exact') { if (msg === command) { return true; } } else if (this.parseType === 'startsWith') { if (msg.substr(0, command.length) === command) { return true; } } else if (this.parseType === 'contains') { if (msg.indexOf(command) !== -1) { return true; } } } return false; } }; Command.prototype.evalMsg = function() { if (this.commandMatch() && this.hasPrivelege()) { this.functionality(); return true; } else { return false; } }; return Command; })(); cookieCommand = (function(_super) { __extends(cookieCommand, _super); function cookieCommand() { _ref = cookieCommand.__super__.constructor.apply(this, arguments); return _ref; } cookieCommand.prototype.init = function() { this.command = 'cookie'; this.parseType = 'startsWith'; return this.rankPrivelege = 'featured'; }; cookieCommand.prototype.getCookie = function() { var c, cookies; cookies = ["muita aveia", "um cafesinho", "um toddynho", "um copo de coca-cola", "uma dose de Ipioca", "limões", "um danoninho", "um cafe extra forte", "maçãs", "bananas", "um brinquedinho", "amendoins", "muita aveia"]; c = Math.floor(Math.random() * cookies.length); return cookies[c]; }; cookieCommand.prototype.functionality = function() { var msg, r, user; msg = this.msgData.message; r = new RoomHelper(); if (msg.substring(7, 8) === "@") { user = r.lookupUser(msg.substr(8)); if (user === false) { API.sendChat("/em: não encontrei ' " + msg.substr(8) + "' na sala. Então, sobra mais pra mim! d(>_<)b "); return false; } else { return API.sendChat("/em: @" + user.username + ", @" + this.msgData.from + " o recompensou com " + this.getCookie() + ". Aproveite!"); } } }; return cookieCommand; })(Command); newSongsCommand = (function(_super) { __extends(newSongsCommand, _super); function newSongsCommand() { _ref1 = newSongsCommand.__super__.constructor.apply(this, arguments); return _ref1; } newSongsCommand.prototype.init = function() { this.command = '!musicanova'; this.parseType = 'startsWith'; return this.rankPrivelege = 'featured'; }; newSongsCommand.prototype.functionality = function() { var arts, cMedia, chans, chooseRandom, mChans, msg, selections, u, _ref2; mChans = this.memberChannels.slice(0); chans = this.channels.slice(0); arts = this.artists.slice(0); chooseRandom = function(list) { var l, r; l = list.length; r = Math.floor(Math.random() * l); return list.splice(r, 1); }; selections = { channels: [], artist: '' }; u = data.users[this.msgData.fromID].getUser().username; if (u.indexOf("MistaDubstep") !== -1) { selections['channels'].push('MistaDubstep'); } else if (u.indexOf("Underground Promotions") !== -1) { selections['channels'].push('UndergroundDubstep'); } else { selections['channels'].push(chooseRandom(mChans)); } selections['channels'].push(chooseRandom(chans)); selections['channels'].push(chooseRandom(chans)); cMedia = API.getMedia(); if ((cMedia != null) && (_ref2 = cMedia.author, __indexOf.call(arts, _ref2) >= 0)) { selections['artist'] = cMedia.author; } else { selections['artist'] = chooseRandom(arts); } msg = "Todo mundo já ouviu aquela musica do " + selections['artist'] + " obtenha novas musicas em http://youtube.com/" + selections['channels'][0] + " http://youtube.com/" + selections['channels'][1] + " ou http://youtube.com/" + selections['channels'][2]; return API.sendChat(msg); }; newSongsCommand.prototype.memberChannels = ["JitterStep", "MistaDubstep", "DubStationPromotions", "UndergroundDubstep",, "DarkstepWarrior", "BombshockDubstep", "Sharestep"]; newSongsCommand.prototype.channels = ["UltraRecords", "kontor", "SpinninRec", "PandoraMuslc", "ITacMusic", "Liquicity", "FunkyyPanda", "BassRape", "WobbleCraftDubz", "UKFdubstep", "DropThatBassline", "VitalDubstep", "AirwaveDubstepTV", "EpicNetworkMusic", "NoOffenseDubstep", "InspectorDubplate", "ReptileDubstep", "MrMoMDubstep", "FrixionNetwork", "IcyDubstep", "DubstepWeed", "VhileMusic", "LessThan3Dubstep", "PleaseMindTheDUBstep", "ClownDubstep", "TheULTRADUBSTEP", "DuBM0nkeyz", "DubNationUK", "TehDubstepChannel", "BassDropMedia", "USdubstep", "UNITEDubstep"]; newSongsCommand.prototype.artists = ["Skrillex", "Doctor P", "Excision", "Flux Pavilion", "Knife Party", "Krewella", "Rusko", "Bassnectar", "Nero", "Deadmau5", "Borgore", "Zomboy"]; return newSongsCommand; })(Command); whyWootCommand = (function(_super) { __extends(whyWootCommand, _super); function whyWootCommand() { _ref2 = whyWootCommand.__super__.constructor.apply(this, arguments); return _ref2; } whyWootCommand.prototype.init = function() { this.command = '!Brutos'; this.parseType = 'startsWith'; return this.rankPrivelege = 'featured'; }; whyWootCommand.prototype.functionality = function() { var msg, nameIndex; msg = "Se tu não entrar na linha, vai tomar um ban!";; if ((nameIndex = this.msgData.message.indexOf('@')) !== -1) { return API.sendChat(this.msgData.message.substr(nameIndex) + ', ' + msg); } else { return API.sendChat(msg); } }; return whyWootCommand; })(Command); themeCommand = (function(_super) { __extends(themeCommand, _super); function themeCommand() { _ref3 = themeCommand.__super__.constructor.apply(this, arguments); return _ref3; } themeCommand.prototype.init = function() { this.command = '!temas'; this.parseType = 'startsWith'; return this.rankPrivelege = 'featured'; }; themeCommand.prototype.functionality = function() { var msg1, msg2; msg1 = "Todo tipo de musica eletronica de boa qualidade é permitida aqui. Incluindo Electro, Dubstep, Techno, Trap, EDM, "; msg1 += "Hardstyle, House e Trance. "; msg2 = "All kinds of electronic song of good quality is allowed here. Including Electro, Dubstep, Techno, Trap, EDM, "; msg2 += "Hardstyle, House and Trance. "; API.sendChat(msg1); return setTimeout((function() { return API.sendChat(msg2); }), 750); }; return themeCommand; })(Command); rulesCommand = (function(_super) { __extends(rulesCommand, _super); function rulesCommand() { _ref4 = rulesCommand.__super__.constructor.apply(this, arguments); return _ref4; } rulesCommand.prototype.init = function() { this.command = '!regras'; this.parseType = 'startsWith'; return this.rankPrivelege = 'featured'; }; rulesCommand.prototype.functionality = function() { var msg1, msg2; msg1 = "1) Tempo máximo 6 min e 30 seg. "; msg1 += "2) Não escrever em /me ou /em. "; msg1 += "3) Respeitar os moderadores da sala."; msg1 += "4) Sem flood no chat . "; msg1 += "5) Não fique pedindo cargos e sem fanbot. "; msg2 = "1) Maximum time 6 minutes and 30 seconds. "; msg2 += "2) Can't write in /me or /em. "; msg2 += "3) Respect the moderators of the room. "; msg2 += "4) Without flood in the chat and without Fanbot. "; msg2 += "5) Can't ask positions."; API.sendChat(msg1); return setTimeout((function() { return API.sendChat(msg2); }), 750); }; return rulesCommand; })(Command); roomHelpCommand = (function(_super) { __extends(roomHelpCommand, _super); function roomHelpCommand() { _ref5 = roomHelpCommand.__super__.constructor.apply(this, arguments); return _ref5; } roomHelpCommand.prototype.init = function() { this.command = '!ajuda'; this.parseType = 'startsWith'; return this.rankPrivelege = 'featured'; }; roomHelpCommand.prototype.functionality = function() { var msg1, msg2; msg1 = "Bem vindo a sala Electro, Trap e Dubstep Brasil! Ser DJ: Crie uma lista de reprodução e coloque Musica do Youtube ou soundcloud. "; msg1 += "Se é novo procure pelo seu nome na sua tela (próximo a cabine do DJ) e depois mude o nome. "; msg1 += "Para Ganhar Pontos clique em Bacana. "; msg2 = "Divirta-se! Qualquer outra duvida chame um adm da sala "; API.sendChat(msg1); return setTimeout((function() { return API.sendChat(msg2); }), 750); }; return roomHelpCommand; })(Command); sourceCommand = (function(_super) { __extends(sourceCommand, _super); function sourceCommand() { _ref6 = sourceCommand.__super__.constructor.apply(this, arguments); return _ref6; } sourceCommand.prototype.init = function() { this.command = ['!autor', '!author', '!autor']; this.parseType = 'exact'; return this.rankPrivelege = 'featured'; }; sourceCommand.prototype.functionality = function() { var msg; msg = ' BOT criado por Backus e editado por brutos para a Electro, Trap e Dubstep Brasil '; return API.sendChat(msg); }; return sourceCommand; })(Command); wootCommand = (function(_super) { __extends(wootCommand, _super); function wootCommand() { _ref7 = wootCommand.__super__.constructor.apply(this, arguments); return _ref7; } wootCommand.prototype.init = function() { this.command = '!autowoot'; this.parseType = 'startsWith'; return this.rankPrivelege = 'featured'; }; wootCommand.prototype.functionality = function() { var msg, nameIndex; msg = "Use o auto woot para evitar remoção da cabine de DJ por não estar votando. http://migre.me/fCWA2"; if ((nameIndex = this.msgData.message.indexOf('@')) !== -1) { return API.sendChat(this.msgData.message.substr(nameIndex) + ', ' + msg); } else { return API.sendChat(msg); } }; return wootCommand; })(Command); badQualityCommand = (function(_super) { __extends(badQualityCommand, _super); function badQualityCommand() { _ref8 = badQualityCommand.__super__.constructor.apply(this, arguments); return _ref8; } badQualityCommand.prototype.init = function() { this.command = '.ruim'; this.parseType = 'exact'; return this.rankPrivelege = 'bouncer'; }; badQualityCommand.prototype.functionality = function() { var msg; msg = "Não gostei da sua musica, tente melhorar da proxima vez"; return API.sendChat(msg); }; return badQualityCommand; })(Command); downloadCommand = (function(_super) { __extends(downloadCommand, _super); function downloadCommand() { _ref9 = downloadCommand.__super__.constructor.apply(this, arguments); return _ref9; } downloadCommand.prototype.init = function() { this.command = '!facebook'; this.parseType = 'exact'; return this.rankPrivelege = 'featured'; }; downloadCommand.prototype.functionality = function() { var msg; msg = " Participe do grupo e curta nossa pagina "; msg += "https://www.facebook.com/ETDPlugdj "; msg += "https://www.facebook.com/groups/DTEplugdj/ "; return API.sendChat(msg); }; return downloadCommand; })(Command); afksCommand = (function(_super) { __extends(afksCommand, _super); function afksCommand() { _ref10 = afksCommand.__super__.constructor.apply(this, arguments); return _ref10; } afksCommand.prototype.init = function() { this.command = '!afks'; this.parseType = 'exact'; return this.rankPrivelege = 'bouncer'; }; afksCommand.prototype.functionality = function() { var dj, djAfk, djs, msg, now, _i, _len; msg = ''; djs = API.getDJs(); for (_i = 0, _len = djs.length; _i < _len; _i++) { dj = djs[_i]; now = new Date(); djAfk = now.getTime() - data.users[dj.id].getLastActivity().getTime(); if (djAfk > (4 * 60 * 1000)) { if (msToStr(djAfk) !== false) { msg += dj.username + ' - ' + msToStr(djAfk); msg += '. '; } } } if (msg === '') { return API.sendChat("Ninguém está AFK"); } else { return API.sendChat('AFKs: ' + msg); } }; return afksCommand; })(Command); allAfksCommand = (function(_super) { __extends(allAfksCommand, _super); function allAfksCommand() { _ref11 = allAfksCommand.__super__.constructor.apply(this, arguments); return _ref11; } allAfksCommand.prototype.init = function() { this.command = '!allafks'; this.parseType = 'exact'; return this.rankPrivelege = 'manager'; }; allAfksCommand.prototype.functionality = function() { var msg, now, u, uAfk, usrs, _i, _len; msg = ''; usrs = API.getUsers(); for (_i = 0, _len = usrs.length; _i < _len; _i++) { u = usrs[_i]; now = new Date(); uAfk = now.getTime() - data.users[u.id].getLastActivity().getTime(); if (uAfk > (30 * 60 * 1000)) { if (msToStr(uAfk) !== false) { msg += u.username + ' - ' + msToStr(uAfk); msg += '. '; } } } if (msg === '') { return API.sendChat("Ninguém está AFK"); } else { return API.sendChat('AFKs: ' + msg); } }; return allAfksCommand; })(Command); statusCommand = (function(_super) { __extends(statusCommand, _super); function statusCommand() { _ref12 = statusCommand.__super__.constructor.apply(this, arguments); return _ref12; } statusCommand.prototype.init = function() { this.command = '!status'; this.parseType = 'exact'; return this.rankPrivelege = 'bouncer'; }; statusCommand.prototype.functionality = function() { var day, hour, launch, lt, meridian, min, month, msg, t; lt = data.launchTime; month = lt.getMonth() + 1; day = lt.getDate(); hour = lt.getHours(); meridian = hour % 12 === hour ? 'AM' : 'PM'; min = lt.getMinutes(); min = min < 10 ? '0' + min : min; t = data.totalVotingData; t['songs'] = data.songCount; launch = 'Iniciado em ' + day + '/' + month + ' ' + hour + ':' + min + ' ' + meridian + '. '; msg = launch; return API.sendChat(msg); }; return statusCommand; })(Command); unhookCommand = (function(_super) { __extends(unhookCommand, _super); function unhookCommand() { _ref13 = unhookCommand.__super__.constructor.apply(this, arguments); return _ref13; } unhookCommand.prototype.init = function() { this.command = '!unhook events all()'; this.parseType = 'exact'; return this.rankPrivelege = 'host'; }; unhookCommand.prototype.functionality = function() { API.sendChat('Unhooking all events...'); return undoHooks(); }; return unhookCommand; })(Command); dieCommand = (function(_super) { __extends(dieCommand, _super); function dieCommand() { _ref14 = dieCommand.__super__.constructor.apply(this, arguments); return _ref14; } dieCommand.prototype.init = function() { this.command = '!desligar'; this.parseType = 'exact'; return this.rankPrivelege = 'cohost'; }; dieCommand.prototype.functionality = function() { API.sendChat('Como tu é burro, cara.'); undoHooks(); API.sendChat('Por que fez isso? Que loucura.'); data.implode(); return API.sendChat('Agora o chat bot está desligado'); }; return dieCommand; })(Command); reloadCommand = (function(_super) { __extends(reloadCommand, _super); function reloadCommand() { _ref15 = reloadCommand.__super__.constructor.apply(this, arguments); return _ref15; } reloadCommand.prototype.init = function() { this.command = '!reload'; this.parseType = 'exact'; return this.rankPrivelege = 'cohost'; }; reloadCommand.prototype.functionality = function() { var pupSrc; API.sendChat('Reiniciado!'); undoHooks(); pupSrc = data.pupScriptUrl; data.implode(); return $.getScript(pupSrc); }; return reloadCommand; })(Command); lockCommand = (function(_super) { __extends(lockCommand, _super); function lockCommand() { _ref16 = lockCommand.__super__.constructor.apply(this, arguments); return _ref16; } lockCommand.prototype.init = function() { this.command = '!trava'; this.parseType = 'exact'; return this.rankPrivelege = 'bouncer'; }; lockCommand.prototype.functionality = function() { return data.lockBooth(); }; return lockCommand; })(Command); unlockCommand = (function(_super) { __extends(unlockCommand, _super); function unlockCommand() { _ref17 = unlockCommand.__super__.constructor.apply(this, arguments); return _ref17; } unlockCommand.prototype.init = function() { this.command = '!destrava'; this.parseType = 'exact'; return this.rankPrivelege = 'bouncer'; }; unlockCommand.prototype.functionality = function() { return data.unlockBooth(); }; return unlockCommand; })(Command); removeCommand = (function(_super) { __extends(removeCommand, _super); function removeCommand() { _ref33 = removeCommand.__super__.constructor.apply(this, arguments); return _ref33; } removeCommand.prototype.init = function() { this.command = '!remove'; this.parseType = 'startsWith'; return this.rankPrivelege = 'bouncer'; }; removeCommand.prototype.functionality = function() { var djs, popDj; djs = API.getDJs(); popDj = djs[djs.length - 1]; return API.moderateRemoveDJ(popDj.id); }; return removeCommand; })(Command); staffCommand = (function(_super) { __extends(staffCommand, _super); function staffCommand() { _ref32 = staffCommand.__super__.constructor.apply(this, arguments); return _ref32; } staffCommand.prototype.init = function() { this.command = '!staff'; this.parseType = 'exact'; this.rankPrivelege = 'user'; return window.lastActiveStaffTime; }; staffCommand.prototype.staff = function() { var now, staff, staffAfk, stringstaff, user, _i, _len; staff = API.getStaff(); now = new Date(); stringstaff = ""; for (_i = 0, _len = staff.length; _i < _len; _i++) { user = staff[_i]; if (user.permission > 1) { staffAfk = now.getTime() - data.users[user.id].getLastActivity().getTime(); if (staffAfk < (60 * 60 * 1000)) { stringstaff += "@" + user.username + " "; } } } if (stringstaff.length === 0) { stringstaff = "Não ha ADMs ativos no momento :'("; } return stringstaff; }; staffCommand.prototype.functionality = function() { var currentTime, millisecondsPassed, thestaff; thestaff = this.staff(); currentTime = new Date(); if (!window.lastActiveStaffTime) { API.sendChat(thestaff); return window.lastActiveStaffTime = currentTime; } else { millisecondsPassed = currentTime.getTime() - window.lastActiveStaffTime.getTime(); if (millisecondsPassed > 10000) { window.lastActiveStaffTime = currentTime; return API.sendChat(thestaff); } } }; return staffCommand; })(Command); lockskipCommand = (function(_super) { __extends(lockskipCommand, _super); function lockskipCommand() { _ref34 = lockskipCommand.__super__.constructor.apply(this, arguments); return _ref34; } lockskipCommand.prototype.init = function() { this.command = '!lockskip'; this.parseType = 'startsWith'; return this.rankPrivelege = 'bouncer'; }; lockskipCommand.prototype.functionality = function() { return data.lockBooth(function() { return setTimeout(function() {}, API.moderateForceSkip(), setTimeout(function() { return data.unlockBooth(); }, 5000), 5000); }); }; return lockskipCommand; })(Command); addCommand = (function(_super) { __extends(addCommand, _super); function addCommand() { _ref35 = addCommand.__super__.constructor.apply(this, arguments); return _ref35; } addCommand.prototype.init = function() { this.command = '!add'; this.parseType = 'startsWith'; return this.rankPrivelege = 'bouncer'; }; addCommand.prototype.functionality = function() { var msg, name, r, user; msg = this.msgData.message; if (msg.length > this.command.length + 2) { name = msg.substr(this.command.length + 2); r = new RoomHelper(); user = r.lookupUser(name); if (user !== false) { API.moderateAddDJ(user.id); return setTimeout((function() { return data.unlockBooth(); }), 5000); } } }; return addCommand; })(Command); swapCommand = (function(_super) { __extends(swapCommand, _super); function swapCommand() { _ref18 = swapCommand.__super__.constructor.apply(this, arguments); return _ref18; } swapCommand.prototype.init = function() { this.command = '!swap'; this.parseType = 'startsWith'; return this.rankPrivelege = 'bouncer'; }; swapCommand.prototype.functionality = function() { var msg, r, swapRegex, userAdd, userRemove, users; msg = this.msgData.message; swapRegex = new RegExp("^!swap @(.+) para @(.+)$"); users = swapRegex.exec(msg).slice(1); r = new RoomHelper(); if (users.length === 2) { userRemove = r.lookupUser(users[0]); userAdd = r.lookupUser(users[1]); if (userRemove === false || userAdd === false) { API.sendChat('Ha algum erro'); return false; } else { return data.lockBooth(function() { API.moderateRemoveDJ(userRemove.id); API.sendChat("Removendo " + userRemove.username + "..."); return setTimeout(function() { API.moderateAddDJ(userAdd.id); API.sendChat("Adicionando " + userAdd.username + "..."); return setTimeout(function() { return data.unlockBooth(); }, 1500); }, 1500); }); } } else { return API.sendChat("Tire o espaço entre os nomes e coloque \'para\'"); } }; return swapCommand; })(Command); popCommand = (function(_super) { __extends(popCommand, _super); function popCommand() { _ref19 = popCommand.__super__.constructor.apply(this, arguments); return _ref19; } popCommand.prototype.init = function() { this.command = '!pop'; this.parseType = 'exact'; return this.rankPrivelege = 'mod'; }; popCommand.prototype.functionality = function() { var djs, popDj; djs = API.getDJs(); popDj = djs[djs.length - 1]; return API.moderateRemoveDJ(popDj.id); }; return popCommand; })(Command); pushCommand = (function(_super) { __extends(pushCommand, _super); function pushCommand() { _ref20 = pushCommand.__super__.constructor.apply(this, arguments); return _ref20; } pushCommand.prototype.init = function() { this.command = '!push'; this.parseType = 'startsWith'; return this.rankPrivelege = 'mod'; }; pushCommand.prototype.functionality = function() { var msg, name, r, user; msg = this.msgData.message; if (msg.length > this.command.length + 2) { name = msg.substr(this.command.length + 2); r = new RoomHelper(); user = r.lookupUser(name); if (user !== false) { return API.moderateAddDJ(user.id); } } }; return pushCommand; })(Command); resetAfkCommand = (function(_super) { __extends(resetAfkCommand, _super); function resetAfkCommand() { _ref21 = resetAfkCommand.__super__.constructor.apply(this, arguments); return _ref21; } resetAfkCommand.prototype.init = function() { this.command = '!resetafk'; this.parseType = 'startsWith'; return this.rankPrivelege = 'mod'; }; resetAfkCommand.prototype.functionality = function() { var id, name, u, _ref22; if (this.msgData.message.length > 10) { name = this.msgData.message.substring(11); _ref22 = data.users; for (id in _ref22) { u = _ref22[id]; if (u.getUser().username === name) { u.updateActivity(); API.sendChat('@' + u.getUser().username + ' seu tempo AFK foi reiniciado.'); return; } } API.sendChat('' + name + ' Não pode ser encontrado'); } else { API.sendChat('Mas, wat?'); } }; return resetAfkCommand; })(Command); forceSkipCommand = (function(_super) { __extends(forceSkipCommand, _super); function forceSkipCommand() { _ref22 = forceSkipCommand.__super__.constructor.apply(this, arguments); return _ref22; } forceSkipCommand.prototype.init = function() { this.command = '!forceskip'; this.parseType = 'startsWith'; return this.rankPrivelege = 'cohost'; }; forceSkipCommand.prototype.functionality = function() { var msg, param; msg = this.msgData.message; if (msg.length > 11) { param = msg.substr(11); if (param === 'Ativar') { data.forceSkip = true; return API.sendChat("Pulo forçado ativado."); } else if (param === 'Desativar') { data.forceSkip = false; return API.sendChat("Pulo forçado desativado."); } } }; return forceSkipCommand; })(Command); overplayedCommand = (function(_super) { __extends(overplayedCommand, _super); function overplayedCommand() { _ref23 = overplayedCommand.__super__.constructor.apply(this, arguments); return _ref23; } overplayedCommand.prototype.init = function() { this.command = '!overplayed'; this.parseType = 'exact'; return this.rankPrivelege = 'bouncer'; }; overplayedCommand.prototype.functionality = function() { return API.sendCha("Acho que não, em?"); }; return overplayedCommand; })(Command); uservoiceCommand = (function(_super) { __extends(uservoiceCommand, _super); function uservoiceCommand() { _ref24 = uservoiceCommand.__super__.constructor.apply(this, arguments); return _ref24; } uservoiceCommand.prototype.init = function() { this.command = ['/uservoice()', '/idea()']; this.parseType = 'exact'; return this.rankPrivelege = 'cohost'; }; uservoiceCommand.prototype.functionality = function() { var msg; msg = 'Have an idea for the room, our bot, or an event? Awesome! Submit it to our uservoice and we\'ll get started on it: http://is.gd/IzP4bA'; msg += ' (please don\'t ask for mod)'; return API.sendChat(msg); }; return uservoiceCommand; })(Command); skipCommand = (function(_super) { __extends(skipCommand, _super); function skipCommand() { _ref25 = skipCommand.__super__.constructor.apply(this, arguments); return _ref25; } skipCommand.prototype.init = function() { this.command = '!pula'; this.parseType = 'exact'; return this.rankPrivelege = 'bouncer'; }; skipCommand.prototype.functionality = function() { return API.moderateForceSkip(); }; return skipCommand; })(Command); whyMehCommand = (function(_super) { __extends(whyMehCommand, _super); function whyMehCommand() { _ref26 = whyMehCommand.__super__.constructor.apply(this, arguments); return _ref26; } whyMehCommand.prototype.init = function() { this.command = '!cotas'; this.parseType = 'exact'; return this.rankPrivelege = 'bouncer'; }; whyMehCommand.prototype.functionality = function() { var msg; msg = "/em acaba de ativar o modo cotas! "; msg += "Roubou sua vaga na faculdade, suas mulheres e sua vez na cabine de DJ"; return API.sendChat(msg); }; return whyMehCommand; })(Command); commandsCommand = (function(_super) { __extends(commandsCommand, _super); function commandsCommand() { _ref27 = commandsCommand.__super__.constructor.apply(this, arguments); return _ref27; } commandsCommand.prototype.init = function() { this.command = '!commands'; this.parseType = 'exact'; return this.rankPrivelege = 'bouncer'; }; commandsCommand.prototype.functionality = function() { var allowedUserLevels, c, cc, cmd, msg, user, _i, _j, _len, _len1, _ref28, _ref29; allowedUserLevels = []; user = API.getUser(this.msgData.fromID); window.capturedUser = user; if (user.permission > 5) { allowedUserLevels = ['user', 'mod', 'host']; } else if (user.permission > 2) { allowedUserLevels = ['user', 'mod']; } else { allowedUserLevels = ['user']; } msg = ''; for (_i = 0, _len = cmds.length; _i < _len; _i++) { cmd = cmds[_i]; c = new cmd(''); if (_ref28 = c.rankPrivelege, __indexOf.call(allowedUserLevels, _ref28) >= 0) { if (typeof c.command === "string") { msg += c.command + ', '; } else if (typeof c.command === "object") { _ref29 = c.command; for (_j = 0, _len1 = _ref29.length; _j < _len1; _j++) { cc = _ref29[_j]; msg += cc + ', '; } } } } msg = msg.substring(0, msg.length - 2); return API.sendChat(msg); }; return commandsCommand; })(Command); disconnectLookupCommand = (function(_super) { __extends(disconnectLookupCommand, _super); function disconnectLookupCommand() { _ref28 = disconnectLookupCommand.__super__.constructor.apply(this, arguments); return _ref28; } disconnectLookupCommand.prototype.init = function() { this.command = '!dcmembros'; this.parseType = 'startsWith'; return this.rankPrivelege = 'bouncer'; }; disconnectLookupCommand.prototype.functionality = function() { var cmd, dcHour, dcLookupId, dcMeridian, dcMins, dcSongsAgo, dcTimeStr, dcUser, disconnectInstances, givenName, id, recentDisconnect, resp, u, _i, _len, _ref29, _ref30; cmd = this.msgData.message; if (cmd.length > 11) { givenName = cmd.slice(11); _ref29 = data.users; for (id in _ref29) { u = _ref29[id]; if (u.getUser().username === givenName) { dcLookupId = id; disconnectInstances = []; _ref30 = data.userDisconnectLog; for (_i = 0, _len = _ref30.length; _i < _len; _i++) { dcUser = _ref30[_i]; if (dcUser.id === dcLookupId) { disconnectInstances.push(dcUser); } } if (disconnectInstances.length > 0) { resp = u.getUser().username + ' desconectou ' + disconnectInstances.length.toString() + ' vez'; if (disconnectInstances.length === 1) { resp += '. '; } else { resp += 'es. '; } recentDisconnect = disconnectInstances.pop(); dcHour = recentDisconnect.time.getHours(); dcMins = recentDisconnect.time.getMinutes(); if (dcMins < 10) { dcMins = '0' + dcMins.toString(); } dcMeridian = dcHour % 12 === dcHour ? 'AM' : 'PM'; dcTimeStr = '' + dcHour + ':' + dcMins + ' ' + dcMeridian; dcSongsAgo = data.songCount - recentDisconnect.songCount; resp += 'Sua desconexão mais recente foi as ' + dcTimeStr + ' (' + dcSongsAgo + ' músicas atras). '; if (recentDisconnect.waitlistPosition !== void 0) { resp += 'Ele estava ' + recentDisconnect.waitlistPosition + ' músicas'; if (recentDisconnect.waitlistPosition > 1) { resp += ''; } resp += ' antes da cabine de DJ.'; } else { resp += 'Ele não estava na cabine de dj ou na lista de espera.'; } API.sendChat(resp); return; } else { API.sendChat("" + u.getUser().username + " não desconectou."); return; } } } return API.sendChat("'Este nome " + givenName + " não pode ser encontrado'."); } }; return disconnectLookupCommand; })(Command); voteRatioCommand = (function(_super) { __extends(voteRatioCommand, _super); function voteRatioCommand() { _ref29 = voteRatioCommand.__super__.constructor.apply(this, arguments); return _ref29; } voteRatioCommand.prototype.init = function() { this.command = '!voteratio'; this.parseType = 'startsWith'; return this.rankPrivelege = 'bouncer'; }; voteRatioCommand.prototype.functionality = function() { var msg, name, r, u, votes; r = new RoomHelper(); msg = this.msgData.message; if (msg.length > 12) { name = msg.substr(12); u = r.lookupUser(name); if (u !== false) { votes = r.userVoteRatio(u); msg = u.username + " :+1: " + votes['woot'].toString() + " vezes"; if (votes['woot'] === 1) { msg += ', '; } else { msg += ', '; } msg += "e :-1: " + votes['meh'].toString() + " vezes"; if (votes['meh'] === 1) { msg += '. '; } else { msg += '. '; } msg += "O seu voteratio é: " + votes['positiveRatio'].toString() + "."; return API.sendChat(msg); } else { return API.sendChat("Este nome' " + name + " não pode ser encontrado'"); } } else { return API.sendChat("Faça isso direito, newbie!"); } }; return voteRatioCommand; })(Command); avgVoteRatioCommand = (function(_super) { __extends(avgVoteRatioCommand, _super); function avgVoteRatioCommand() { _ref30 = avgVoteRatioCommand.__super__.constructor.apply(this, arguments); return _ref30; } avgVoteRatioCommand.prototype.init = function() { this.command = '!avgvoteratio'; this.parseType = 'exact'; return this.rankPrivelege = 'mod'; }; avgVoteRatioCommand.prototype.functionality = function() { var averageRatio, msg, r, ratio, roomRatios, uid, user, userRatio, votes, _i, _len, _ref31; roomRatios = []; r = new RoomHelper(); _ref31 = data.voteLog; for (uid in _ref31) { votes = _ref31[uid]; user = data.users[uid].getUser(); userRatio = r.userVoteRatio(user); roomRatios.push(userRatio['positiveRatio']); } averageRatio = 0.0; for (_i = 0, _len = roomRatios.length; _i < _len; _i++) { ratio = roomRatios[_i]; averageRatio += ratio; } averageRatio = averageRatio / roomRatios.length; msg = "Contabilidade de " + roomRatios.length.toString() + " votos por usuário, e a taxa média da sala é de " + averageRatio.toFixed(2).toString() + " votos."; return API.sendChat(msg); }; return avgVoteRatioCommand; })(Command); cmds = [cookieCommand, newSongsCommand, whyWootCommand, themeCommand, rulesCommand, roomHelpCommand, sourceCommand, wootCommand, badQualityCommand, downloadCommand, afksCommand, allAfksCommand, statusCommand, unhookCommand, dieCommand, reloadCommand, lockCommand, unlockCommand, swapCommand, popCommand, pushCommand, overplayedCommand, uservoiceCommand, whyMehCommand, skipCommand, commandsCommand, resetAfkCommand, forceSkipCommand, disconnectLookupCommand, voteRatioCommand, avgVoteRatioCommand]; chatCommandDispatcher = function(chat) { var c, cmd, _i, _len, _results; chatUniversals(chat); _results = []; for (_i = 0, _len = cmds.length; _i < _len; _i++) { cmd = cmds[_i]; c = new cmd(chat); if (c.evalMsg()) { break; } else { _results.push(void 0); } } return _results; }; updateVotes = function(obj) { data.currentwoots = obj.positive; data.currentmehs = obj.negative; return data.currentcurates = obj.curates; }; announceCurate = function(obj) { return announceCurate; }; handleUserJoin = function(user) { data.userJoin(user); data.users[user.id].updateActivity(); return handleUserJoin; }; handleNewSong = function(obj) { var songId; data.intervalMessages(); if (data.currentsong === null) { data.newSong(); } else { data.newSong(); document.getElementById("button-vote-positive").click(); } if (data.forceSkip) { songId = obj.media.id; return setTimeout(function() { var cMedia; cMedia = API.getMedia(); if (cMedia.id === songId) { return API.moderateForceSkip(); } }, obj.media.duration * 1000); } }; handleVote = function(obj) { data.users[obj.user.id].updateActivity(); return data.users[obj.user.id].updateVote(obj.vote); }; handleUserLeave = function(user) { var disconnectStats, i, u, _i, _len, _ref31; disconnectStats = { id: user.id, time: new Date(), songCount: data.songCount }; i = 0; _ref31 = data.internalWaitlist; for (_i = 0, _len = _ref31.length; _i < _len; _i++) { u = _ref31[_i]; if (u.id === user.id) { disconnectStats['waitlistPosition'] = i - 1; data.setInternalWaitlist(); break; } else { i++; } } data.userDisconnectLog.push(disconnectStats); return data.users[user.id].inRoom(false); }; antispam = function(chat) { var plugRoomLinkPatt, sender; plugRoomLinkPatt = /(\bhttps?:\/\/(www.)?plug\.dj[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig; if (plugRoomLinkPatt.exec(chat.message)) { sender = API.getUser(chat.fromID); if (!sender.ambassador && !sender.moderator && !sender.owner && !sender.superuser) { if (!data.users[chat.fromID]["protected"]) { API.sendChat("Sem divulgaçao"); return API.moderateDeleteChat(chat.chatID); } else { return API.sendChat("Eu deveria expulsa-lo, mas estamos aqui para nos divertir"); } } } }; fans = function(chat) { var msg; msg = chat.message.toLowerCase(); if (msg.indexOf('¨¨¨¨¨¨') !== -1 || msg.indexOf('¨¨¨¨¨¨') !== -1 || msg.indexOf('¨¨¨¨¨¨') !== -1 || msg.indexOf('¨¨¨¨¨¨') !== -1 || msg.indexOf(':trollface:') !== -1 || msg.indexOf('autowoot:') !== -1) { return API.moderateDeleteChat(chat.chatID); } }; beggar = function(chat) { var msg, r, responses; msg = chat.message.toLowerCase(); responses = ["@{beggar} ", "@{beggar} ", "@{beggar} ", "@{beggar} "]; r = Math.floor(Math.random() * responses.length); if (msg.indexOf('¨¨¨¨') !== -1 || msg.indexOf('¨¨¨¨') !== -1 || msg.indexOf('¨¨¨¨') !== -1 || msg.indexOf('¨¨¨¨¨¨') !== -1 || msg.indexOf('¨¨¨¨¨¨') !== -1) { return API.sendChat(responses[r].replace("{beggar}", chat.from)); } }; chatUniversals = function(chat) { data.activity(chat); antispam(chat); return beggar(chat); }; hook = function(apiEvent, callback) { return API.on(apiEvent, callback); }; unhook = function(apiEvent, callback) { return API.off(apiEvent, callback); }; apiHooks = [ { 'event': API.ROOM_SCORE_UPDATE, 'callback': updateVotes }, { 'event': API.CURATE_UPDATE, 'callback': announceCurate }, { 'event': API.USER_JOIN, 'callback': handleUserJoin }, { 'event': API.DJ_ADVANCE, 'callback': handleNewSong }, { 'event': API.VOTE_UPDATE, 'callback': handleVote }, { 'event': API.CHAT, 'callback': chatCommandDispatcher }, { 'event': API.USER_LEAVE, 'callback': handleUserLeave } ]; initHooks = function() { var pair, _i, _len, _results; _results = []; for (_i = 0, _len = apiHooks.length; _i < _len; _i++) { pair = apiHooks[_i]; _results.push(hook(pair['event'], pair['callback'])); } return _results; }; undoHooks = function() { var pair, _i, _len, _results; _results = []; for (_i = 0, _len = apiHooks.length; _i < _len; _i++) { pair = apiHooks[_i]; _results.push(unhook(pair['event'], pair['callback'])); } return _results; }; initialize(); }).call(this);
Al-Andrew
No description available
imskinner
Use Claude Code while afk using Telegram
cc-afk
Config files for my GitHub profile.
8jfw56cpcp-ctrl
No description available
geekahedron
compy.cc is a website/database for mobile game AFK Arena
cc4mp0s-afk
Profecto Feria
cc4mp0s-afk
Derivadas a un click!
All 15 repositories loaded