// ==UserScript==
// @name LuoguEmojiSender
// @namespace https://github.com/Maxmilite/LuoguEmojiSender
// @version 1.3.1
// @description 一款可以帮助您在洛谷轻松发送 QQ 表情信息的插件.
// @author Maxmilite
// @match https://www.luogu.com.cn/*
// @match http://www.luogu.com.cn/*
// ==/UserScript==
(function () {
// -------------------------此处为用户修改配置区--------------------------------
// 此项定义前后缀功能,用于表情的识别,以默认配置为例
// 如果在此配置下,当且仅当输入的内容为大括号包裹的qq表情代码(即 "{/代码}")时才会进行替换操作。
// 当然,您可以直接将其设置为空字符串,来达到无缝衔接的效果
const prefix = "{", suffix = "}";
// 此处为用户个性化设置区,输入格式按照 JSON 格式输入
// 格式:" "表情代码": "", "
// 请注意,如果不是最后一行,该行后必须添加逗号。
// 样例:" "/亲亲": ")", "
const userElement = {
}
// -------------------------上方为用户修改配置区--------------------------------
// 1.1 更新内容:
// 优化操作逻辑,增加用户配置区
// 1.2 更新内容:
// 增加了更多的 QQ 图片,更改了图床
// 1.3 更新内容:
// 进一步优化操作逻辑,修复了图片加载的一个BUG,现在可以无忧无虑使用无缝模式了
// 1.3.0.1 更新内容:
// 紧急修复一个由菜刀表情引发的严重BUG
const replaceElement = {
"/aini": "",
"/aiq": "",
"/am": "",
"/azgc": "",
"/baiy": "",
"/bangbangt": "",
"/banzz": "",
"/baojin": "",
"/bb": "",
"/bkx": "",
"/bl": "",
"/bobo": "",
"/bp": "",
"/bq": "",
"/bs": "",
"/bt": "",
"/bu": "",
"/bz": "",
// "/cd": "",
"/cengyiceng": "",
"/cg": "",
"/ch": "",
"/chi": "",
"/cj": "",
"/cp": "",
"/cs": "",
"/cy": "",
"/dan": "",
"/dao": "",
"/db": "",
"/dg": "",
"/dgg": "",
"/dk": "",
"/dl": "",
"/doge": "",
"/dx": "",
"/dy": "",
"/dz": "",
"/ee": "",
"/emm": "",
"/fad": "",
"/fade": "",
"/fan": "",
"/fd": "",
"/fendou": "",
"/fj": "",
"/fn": "",
"/fw": "",
"/gg": "",
"/gy": "",
"/gz": "",
"/hanx": "",
"/haob": "",
"/hb": "",
"/hc": "",
"/hd": "",
"/hec": "",
"/hhd": "",
"/hn": "",
"/hp": "",
"/hq": "",
"/hsh": "",
"/ht": "",
"/huaix": "",
"/hx": "",
"/jd": "",
"/jh": "",
"/jiaybb": "",
"/jiaybs": "",
"/jie": "",
"/jk": "",
"/jw": "",
"/jx": "",
"/ka": "",
"/kb": "",
"/kel": "",
"/kf": "",
"/kg": "",
"/kk": "",
"/kl": "",
"/kt": "",
"/kuk": "",
"/kun": "",
"/kzht": "",
"/lb": "",
"/lengh": "",
"/lh": "",
"/ll": "",
"/lm": "",
"/lq": "",
"/lw": "",
"/lyj": "",
"/mdfq": "",
"/mg": "",
"/mm": "",
"/ng": "",
"/nkt": "",
"/oh": "",
"/oy": "",
"/pch": "",
"/pj": "",
"/pp": "",
"/pt": "",
"/px": "",
"/qd": "",
"/qiang": "",
"/qiao": "",
"/qq": "",
"/qt": "",
"/ruo": "",
"/sa": "",
"/se": "",
"/sh": "",
"/shd": "",
"/shl": "",
"/shuai": "",
"/shui": "",
"/shxi": "",
"/sr": "",
"/tiao": "",
"/tl": "",
"/tnl": "",
"/tp": "",
"/ts": "",
"/tsh": "",
"/tt": "",
"/tuu": "",
"/tx": "",
"/ty": "",
"/tyt": "",
"/wbk": "",
"/whl": "",
"/wl": "",
"/wn": "",
"/wosl": "",
"/wq": "",
"/ws": "",
"/wul": "",
"/wx": "",
"/wzm": "",
"/xhx": "",
"/xia": "",
"/xig": "",
"/xin": "",
"/xjj": "",
"/xk": "",
"/xs": "",
"/xu": "",
"/xw": "",
"/xy": "",
"/xyx": "",
"/yao": "",
"/yb": "",
"/yhh": "",
"/yiw": "",
"/yl": "",
"/youl": "",
"/youtj": "",
"/yt": "",
"/yun": "",
"/yx": "",
"/zhd": "",
"/zhem": "",
"/zhh": "",
"/zhm": "",
"/zhq": "",
"/zj": "",
"/zk": "",
"/zq": "",
"/zt": "",
"/zuotj": ""
};
function main() {
let stringTochange = new String, sourceString = new String, newString = new String;
if (typeof markdownPalettes != "undefined")
stringToChange = markdownPalettes.content, sourceString = markdownPalettes.content;
else if (document.getElementById("feed-content") != null)
stringToChange = document.getElementById("feed-content").value, sourceString = document.getElementById("feed-content").value;
else
return false;
for (let i in replaceElement) {
newString = prefix + i + suffix;
stringToChange = stringToChange.replaceAll(newString, replaceElement[i]);
}
for (let i in userElement) {
newString = prefix + i + suffix;
stringToChange = stringToChange.replaceAll(newString, userElement[i]);
}
if (typeof markdownPalettes != "undefined")
markdownPalettes.content = stringToChange;
else if (document.getElementById("feed-content") != null)
document.getElementById("feed-content").value = stringToChange;
if (stringToChange == sourceString)
return false;
else
return true;
}
// It seemed this function didn't work :(
// To be fixed
function moveEnd() {
var move = jQuery.Event("keydown");
move.keyCode = 35;
move.which = 35;
$(window).trigger(move);
}
document.addEventListener("keydown", function () {
if (main() == true) {
moveEnd();
}
})
document.addEventListener("click", function () {
if (main() == true) {
moveEnd();
}
})
})();