您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
A private group chat panel
当前为
- // ==UserScript==
- // @name IdlePixel Group Chat
- // @namespace lbtechnology.info
- // @version 1.0.0
- // @description A private group chat panel
- // @author Lux-Ferre
- // @license MIT
- // @match *://idle-pixel.com/login/play*
- // @grant none
- // @require https://greasyfork.org/scripts/441206-idlepixel/code/IdlePixel+.js?anticache=20220905
- // @require https://update.greasyfork.org/scripts/484046/1307183/IdlePixel%2B%20Custom%20Handling.js
- // ==/UserScript==
- (function() {
- 'use strict';
- class GroupChatPlugin extends IdlePixelPlusPlugin {
- constructor() {
- super("groupChat", {
- about: {
- name: GM_info.script.name,
- version: GM_info.script.version,
- author: GM_info.script.author,
- description: GM_info.script.description
- },
- config: [
- {
- id: "memberList",
- label: "Members List (comma separated list)",
- type: "string"
- },
- {
- id: "password",
- label: "Password",
- type: "string"
- },
- ]
- });
- }
- createPanel(){
- IdlePixelPlus.addPanel("groupchat", "Group Chat Panel", function() {
- return `
- <div class="groupChatUIContainer w-100">
- <div id="groupChatInfoModule" class="row groupChatUIModule">
- <div class="col">
- <div class="row">
- <div class="col-1 text-end align-self-center"><label class="col-form-label" for="groupChatMembersList">Members:</label></div>
- <div class="col-8 d-flex"><input id="groupChatMemberList" class="w-100" type="text" readonly /></div>
- <div class="col-1 text-end align-self-center"><label class="col-form-label" for="groupChatPassword">Password:</label></div>
- <div class="col-2 d-flex"><input id="groupChatPassword" class="w-100" type="text" readonly /></div>
- </div>
- </div>
- </div>
- <div id="groupChatChatModule" class="row groupChatUIModule">
- <div class="col">
- <div class="row">
- <div id="groupChatChatFormContainer" class="col">
- <div id="groupChatChatBox" class="overflow-auto"></div>
- <form onsubmit="event.preventDefault(); IdlePixelPlus.plugins.groupChat.sendGroupChat();">
- <div class="row d-flex flex-fill">
- <div class="col-11"><input id="groupChatChatIn" class="form-control w-100" type="text" /></div>
- <div class="col-1"><input id="groupChatChatButton" class="w-100 h-100" type="submit" value="Send" /></div>
- </div>
- </form>
- </div>
- </div>
- </div>
- </div>
- </div>
- `
- });
- }
- addStyles(){
- $("head").append(`
- <style id="styles-groupchat">
- .groupChatUIModule {
- border: outset 2px;
- }
- .groupChatUIContainer {
- width: 100%;
- height: 100%;
- padding: 5px;
- margin: 0;
- }
- #groupChatChatBox {
- width: 100%;
- height: 70vh;
- margin-top: 10px;
- }
- #groupChatChatBox {
- border: inset 1px;
- }
- </style>
- `)
- }
- onLogin() {
- const onlineCount = $(".top-bar .gold:not(#top-bar-admin-link)");
- onlineCount.before(`
- <a href="#" class="hover float-end link-no-decoration" onclick="event.preventDefault(); IdlePixelPlus.setPanel('groupchat')" title="Group Chat Panel">Group Chat </a>
- `);
- this.createPanel()
- this.addStyles()
- this.createNotification()
- this.updatePanelInfo()
- }
- onPanelChanged(panelBefore, panelAfter){
- if (panelAfter==="groupchat"){
- $("#groupChatNotification").hide()
- }
- }
- onConfigsChanged() {
- this.updatePanelInfo();
- }
- onCustomMessageReceived(player, content, callbackId) {
- const customData = Customs.parseCustom(player, content, callbackId)
- const correctPassword = this.getConfig("password");
- if(customData.plugin==="groupchat") {
- if(customData.command==="chat"){
- const splitData = customData.payload.split(";")
- const givenPassword = splitData[0]
- const message = splitData.slice(1).join(";")
- if(givenPassword===correctPassword){
- this.addGroupChatMessage(player, message)
- }
- }
- }
- }
- updatePanelInfo(){
- const memberListField = $("#groupChatMemberList")
- const passwordField = $("#groupChatPassword")
- memberListField.val(this.getConfig("memberList"))
- passwordField.val(this.getConfig("password"))
- }
- createNotification(){
- const notificationString = `
- <div id="groupChatNotification" class="notification hover" onclick="IdlePixelPlus.setPanel('groupchat')">
- <img src="https://d1xsc8x7nc5q8t.cloudfront.net/images/diamond.png" class="w20" alt="">
- <span class="font-small color-yellow">Group Chat</span>
- </div>
- `
- const notificationElement = $.parseHTML(notificationString)
- const notificationBar = $("#notifications-area")
- notificationBar.append(notificationElement)
- $("#groupChatNotification").hide()
- }
- showNotification(){
- if(Globals.currentPanel === "panel-groupchat"){return;}
- $("#groupChatNotification").show()
- }
- getMemberList(){
- const stringifiedNameList = this.getConfig("memberList").toLowerCase()
- // Remove trailing commas
- if(stringifiedNameList.charAt(stringifiedNameList.length - 1) === ","){
- stringifiedNameList = stringifiedNameList.slice(0, -1);
- }
- const nameList = stringifiedNameList.split(",")
- // Remove empty entry (handles when no names have been given)
- if (nameList[0] === ""){
- nameList.shift()
- }
- return nameList.slice(0, 8)
- }
- sendGroupChat(){
- const chatIn = $("#groupChatChatIn")
- const chat_message = chatIn.val()
- chatIn.val("")
- const password = this.getConfig("password")
- const memberList = this.getMemberList()
- memberList.forEach(member => {
- Customs.sendBasicCustom(member, "groupchat", "chat", `${password};${chat_message}`)
- })
- }
- addGroupChatMessage(sender, message) {
- const newMessageString = `
- <div class="">
- <span class="color-green">${Chat._get_time()}</span>
- <span><strong>${sender}: </strong></span>
- <span>${sanitize_input(message)}</span>
- </div>
- `
- const newMessageElement = $.parseHTML(newMessageString)
- const chatBox = $("#groupChatChatBox")
- chatBox.append(newMessageElement);
- chatBox.scrollTop(chatBox[0].scrollHeight);
- this.showNotification()
- }
- }
- const plugin = new GroupChatPlugin();
- IdlePixelPlus.registerPlugin(plugin);
- })();