This commit is contained in:
Jean Ouina 2020-05-31 20:19:20 +02:00
parent abdc9efa15
commit 8f6664add2
11 changed files with 114 additions and 351 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -418,14 +418,33 @@ function applyBadges(id, user, chat){
distant.getBadges(user.id)
.then(badges => {
badges.forEach(badge => {
const props = {size: "16px", className: "bd-logo"}
const props = {
svg: {
size: "16px",
className: "bd-logo",
width: "16px",
}
}
badge.scopes.forEach(scope => {
// TODO: implement scope for badges (user, channel, etc)
if(scope === "user"){// require user
props.user = user
}
})
if(!badge.href){
props.Anchor = Anchor
props.href = {
className: chat ? "bd-chat-badge" : "bd-member-badge",
title: badge.name,
target: "_blank"
}
}
const element = BDV2.React.createElement(TooltipWrap, {color: "black", side: "top", text: badge.name},
BDV2.React.createElement(Anchor, {className: chat ? "bd-chat-badge" : "bd-member-badge", href: badge.href, title: badge.name, target: "_blank"},
BDV2.React.createElement(badge.component, props)
)
badge.href ? BDV2.react.createElement(Anchor, {
href: badge.href,
className: chat ? "bd-chat-badge" : "bd-member-badge",
title: badge.name,
target: "_blank"
}, BDV2.React.createElement(badge.component, props)) : BDV2.React.createElement(badge.component, props)
)
const div2 = document.createElement("div")
BDV2.reactDom.render(element, div2)

View File

@ -1,4 +1,6 @@
import BugHunterBadge from "../svg/bug_hunter"
import LightcordUserBadge from "../svg/LightcordUser";
import nodeFetch from "node-fetch"
export function uuidv4() { // Generate UUID (No crypto rng)
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
@ -8,6 +10,7 @@ export function uuidv4() { // Generate UUID (No crypto rng)
}
const awaitingBadgesPromises = {}
let badgesToFetch = []
export default new class DistantServer {
constructor(){
@ -63,14 +66,30 @@ export default new class DistantServer {
if(badge.defaultUsers.includes(user))badges.push(badge)
}
const fetchedBadges = await new Promise((resolve) => {
handleRequest(Routes.badges(user), "GET")
.then(async res => {
if(res.status !== 200){// Couldn't fetch badges: server error
return resolve([]) // no badge fetched
}
return resolve(await res.json())
}).catch(() => {// Couldn't fetch badges: error
return resolve([]) // no badge fetched
badgesToFetch.push([user, resolve])
setImmediate(() => {
let users = badgesToFetch
if(users.length === 0)return
badgesToFetch = []
handleRequest(Routes.badges, "POST", JSON.stringify(users.map(e => e[0])))
.then(async res => {
if(res.status !== 200){// Couldn't fetch badges: server error
users.forEach(data => {
data[1]([])// resolve no badge fetched
})
}
const responseBody = await res.json()
console.log(responseBody)
for(let user of responseBody){
let promise = users.find(promise => promise[0] === user.user_id)
promise[1](user.badges)
}
}).catch((err) => {// Couldn't fetch badges: error
console.error(err)
users.forEach(data => {
data[1]([])// resolve no badge fetched
})
})
})
})
for(let badge of fetchedBadges){
@ -91,13 +110,17 @@ export default new class DistantServer {
}
}
const handleRequest = function(route, method){
return fetch(`${Constants.SERVER_URL}/api/v1${route}`, {
const handleRequest = function(route, method, data){
console.log(`Sending request on ${route} with method ${method} and body`, data)
return nodeFetch(`${Constants.SERVER_URL}/api/v1${route}`, {
method,
headers: {
"CLIENT": "Lightcord",
"Authorization": window.Lightcord.Api.Authorization || "None::Anonymous"
}
},
...(data ? {
body: data
} : {})
})
}
@ -107,20 +130,15 @@ export const Constants = {
{
name: "Lightcord User",
id: "01cfa7b0-7cdb-4b0e-8258-9c6a78235c93",
defaultUsers: [
"696481194443014174"
],
defaultUsers: [],
scopes: [
"user"
],
component: BugHunterBadge,
href: "https://github.com/lightcord/lightcord/wiki/badges/bug_hunter"
component: LightcordUserBadge
}, {
name: "Lightcord Bug Hunter",
id: "f04698f5-816b-41e3-bd01-92291193d7a5",
defaultUsers: [
"696481194443014174"
],
defaultUsers: [],
scopes: [],
component: BugHunterBadge,
href: "https://github.com/lightcord/lightcord/wiki/badges/bug_hunter"
@ -129,6 +147,6 @@ export const Constants = {
}
export const Routes = {
badges: user => `/${user}/badges`,
badges: `/users/badges`,
delete: `/delete`
}

View File

@ -0,0 +1,26 @@
import BDV2 from "../modules/v2"
let profilModule = BDModules.get(e => e.default && e.default.open && e.default.fetchMutualFriends)[0]
export default class LightcordUserBadge extends React.Component {
render(){
const props = this.props
delete props.href.target
console.log(props)
return (
<props.Anchor href={"/users/"+props.user.id} {...props.href} onClick={(ev) => {
ev.preventDefault()
if(!profilModule)profilModule = BDModules.get(e => e.default && e.default.open && e.default.fetchMutualFriends)[0]
profilModule.default.open(props.user.id)
}}>
<svg viewBox="0 0 31.3 29.5" {...props.svg} height="100%">
<path d="M22.8 1s12 8.2 7.4 19.7S16.6 29 20 25.6s-4-5.6-8.7-10L22.8 1" fill="rgba(227,6,19,.6)" />
<path d="M22.1 12.3c-2.5 3.2-6.1 4.8-8.9 4.3L3.6 28.8c-.7.9-1.9 1-2.8.3-.9-.7-1-1.9-.4-2.8L10 14.1c-1.3-2.5-.6-6.4 2-9.7 3.2-4 8-5.5 10.8-3.4s2.4 7.2-.7 11.3z" fill="#e30613" />
</svg>
</props.Anchor>
)
}
}

View File

@ -1,8 +1,9 @@
export default class BugHunterBadge extends React.Component {
render(){
const props = this.props
return (
<svg viewBox="0 0 31.3 29.5" {...props} height="100%" width={props.size}>
<svg viewBox="0 0 31.3 29.5" {...props.svg} height="100%">
<path d="M22.8 1s12 8.2 7.4 19.7S16.6 29 20 25.6s-4-5.6-8.7-10L22.8 1" fill="rgba(227,6,19,.6)" />
<path d="M22.1 12.3c-2.5 3.2-6.1 4.8-8.9 4.3L3.6 28.8c-.7.9-1.9 1-2.8.3-.9-.7-1-1.9-.4-2.8L10 14.1c-1.3-2.5-.6-6.4 2-9.7 3.2-4 8-5.5 10.8-3.4s2.4 7.2-.7 11.3z" fill="#e30613" />
</svg>

View File

@ -50,12 +50,14 @@ async function privateInit(){
}catch(e){
const React = ModuleLoader.get(e => !["Component", "PureComponent", "Children", "createElement", "cloneElement"].map(c => !!e[c]).includes(false))[0]
window.React = React
require.cache["react"] = React
}
try{
window.ReactDOM = require("react-dom")
}catch(e){
const ReactDOM = ModuleLoader.get(e => e.findDOMNode)[0]
window.ReactDOM = ReactDOM
require.cache["react-dom"] = ReactDOM
}
let original = ModuleLoader.get((e) => e.createSound)[0].createSound

@ -1 +0,0 @@
Subproject commit 1ff160b257662689a0abc76731ed643bf69fb3cf

View File

@ -1,157 +1,5 @@
{
"files": [
"node_modules\\.yarn-integrity",
"node_modules\\.bin\\rimraf",
"node_modules\\any-promise\\.jshintrc",
"node_modules\\any-promise\\.npmignore",
"node_modules\\any-promise\\implementation.js",
"node_modules\\any-promise\\index.js",
"node_modules\\any-promise\\LICENSE",
"node_modules\\any-promise\\loader.js",
"node_modules\\any-promise\\optional.js",
"node_modules\\any-promise\\package.json",
"node_modules\\any-promise\\README.md",
"node_modules\\any-promise\\register-shim.js",
"node_modules\\any-promise\\register.js",
"node_modules\\any-promise\\register\\bluebird.js",
"node_modules\\any-promise\\register\\es6-promise.js",
"node_modules\\any-promise\\register\\lie.js",
"node_modules\\any-promise\\register\\native-promise-only.js",
"node_modules\\any-promise\\register\\pinkie.js",
"node_modules\\any-promise\\register\\promise.js",
"node_modules\\any-promise\\register\\q.js",
"node_modules\\any-promise\\register\\rsvp.js",
"node_modules\\any-promise\\register\\vow.js",
"node_modules\\any-promise\\register\\when.js",
"node_modules\\balanced-match\\.npmignore",
"node_modules\\balanced-match\\index.js",
"node_modules\\balanced-match\\LICENSE.md",
"node_modules\\balanced-match\\package.json",
"node_modules\\balanced-match\\README.md",
"node_modules\\brace-expansion\\index.js",
"node_modules\\brace-expansion\\LICENSE",
"node_modules\\brace-expansion\\package.json",
"node_modules\\brace-expansion\\README.md",
"node_modules\\cld\\.gitignore",
"node_modules\\cld\\index.js",
"node_modules\\cld\\LICENSE",
"node_modules\\cld\\package.json",
"node_modules\\cld\\README.md",
"node_modules\\cld\\bin\\postinstall.js",
"node_modules\\cld\\build\\Release\\cld.node",
"node_modules\\cld\\deps\\cld\\LICENSE",
"node_modules\\cld\\node_modules\\.bin\\rimraf",
"node_modules\\concat-map\\index.js",
"node_modules\\concat-map\\LICENSE",
"node_modules\\concat-map\\package.json",
"node_modules\\concat-map\\example\\map.js",
"node_modules\\event-kit\\api.json",
"node_modules\\event-kit\\LICENSE.md",
"node_modules\\event-kit\\package.json",
"node_modules\\event-kit\\README.md",
"node_modules\\event-kit\\dist\\composite-disposable.js",
"node_modules\\event-kit\\dist\\disposable.js",
"node_modules\\event-kit\\dist\\emitter.js",
"node_modules\\event-kit\\dist\\event-kit.js",
"node_modules\\fs.realpath\\index.js",
"node_modules\\fs.realpath\\LICENSE",
"node_modules\\fs.realpath\\old.js",
"node_modules\\fs.realpath\\package.json",
"node_modules\\fs.realpath\\README.md",
"node_modules\\glob\\common.js",
"node_modules\\glob\\glob.js",
"node_modules\\glob\\LICENSE",
"node_modules\\glob\\package.json",
"node_modules\\glob\\README.md",
"node_modules\\glob\\sync.js",
"node_modules\\inflight\\inflight.js",
"node_modules\\inflight\\LICENSE",
"node_modules\\inflight\\package.json",
"node_modules\\inflight\\README.md",
"node_modules\\inherits\\inherits.js",
"node_modules\\inherits\\inherits_browser.js",
"node_modules\\inherits\\LICENSE",
"node_modules\\inherits\\package.json",
"node_modules\\inherits\\README.md",
"node_modules\\keyboard-layout\\.node-version",
"node_modules\\keyboard-layout\\LICENSE.md",
"node_modules\\keyboard-layout\\package.json",
"node_modules\\keyboard-layout\\README.md",
"node_modules\\keyboard-layout\\build\\Release\\keyboard-layout-manager.node",
"node_modules\\keyboard-layout\\lib\\keyboard-layout.js",
"node_modules\\minimatch\\LICENSE",
"node_modules\\minimatch\\minimatch.js",
"node_modules\\minimatch\\package.json",
"node_modules\\minimatch\\README.md",
"node_modules\\nan\\CHANGELOG.md",
"node_modules\\nan\\include_dirs.js",
"node_modules\\nan\\LICENSE.md",
"node_modules\\nan\\package.json",
"node_modules\\nan\\README.md",
"node_modules\\nan\\doc\\asyncworker.md",
"node_modules\\nan\\doc\\buffers.md",
"node_modules\\nan\\doc\\callback.md",
"node_modules\\nan\\doc\\converters.md",
"node_modules\\nan\\doc\\errors.md",
"node_modules\\nan\\doc\\json.md",
"node_modules\\nan\\doc\\maybe_types.md",
"node_modules\\nan\\doc\\methods.md",
"node_modules\\nan\\doc\\new.md",
"node_modules\\nan\\doc\\node_misc.md",
"node_modules\\nan\\doc\\object_wrappers.md",
"node_modules\\nan\\doc\\persistent.md",
"node_modules\\nan\\doc\\scopes.md",
"node_modules\\nan\\doc\\script.md",
"node_modules\\nan\\doc\\string_bytes.md",
"node_modules\\nan\\doc\\v8_internals.md",
"node_modules\\nan\\doc\\v8_misc.md",
"node_modules\\nan\\tools\\1to2.js",
"node_modules\\nan\\tools\\package.json",
"node_modules\\nan\\tools\\README.md",
"node_modules\\once\\LICENSE",
"node_modules\\once\\once.js",
"node_modules\\once\\package.json",
"node_modules\\once\\README.md",
"node_modules\\path-is-absolute\\index.js",
"node_modules\\path-is-absolute\\license",
"node_modules\\path-is-absolute\\package.json",
"node_modules\\path-is-absolute\\readme.md",
"node_modules\\rimraf\\bin.js",
"node_modules\\rimraf\\LICENSE",
"node_modules\\rimraf\\package.json",
"node_modules\\rimraf\\README.md",
"node_modules\\rimraf\\rimraf.js",
"node_modules\\rimraf\\node_modules\\glob\\changelog.md",
"node_modules\\rimraf\\node_modules\\glob\\common.js",
"node_modules\\rimraf\\node_modules\\glob\\glob.js",
"node_modules\\rimraf\\node_modules\\glob\\LICENSE",
"node_modules\\rimraf\\node_modules\\glob\\package.json",
"node_modules\\rimraf\\node_modules\\glob\\README.md",
"node_modules\\rimraf\\node_modules\\glob\\sync.js",
"node_modules\\spellchecker\\.gitignore",
"node_modules\\spellchecker\\.npmignore",
"node_modules\\spellchecker\\LICENSE.md",
"node_modules\\spellchecker\\package-lock.json",
"node_modules\\spellchecker\\package.json",
"node_modules\\spellchecker\\README.md",
"node_modules\\spellchecker\\build\\Release\\spellchecker.node",
"node_modules\\spellchecker\\lib\\spellchecker.js",
"node_modules\\spellchecker\\vendor\\hunspell\\AUTHORS",
"node_modules\\spellchecker\\vendor\\hunspell\\BUGS",
"node_modules\\spellchecker\\vendor\\hunspell\\ChangeLog",
"node_modules\\spellchecker\\vendor\\hunspell\\COPYING",
"node_modules\\spellchecker\\vendor\\hunspell\\README",
"node_modules\\spellchecker\\vendor\\hunspell\\THANKS",
"node_modules\\spellchecker\\vendor\\hunspell\\src\\hunspell\\README",
"node_modules\\underscore\\LICENSE",
"node_modules\\underscore\\package.json",
"node_modules\\underscore\\README.md",
"node_modules\\underscore\\underscore-min.js",
"node_modules\\underscore\\underscore.js",
"node_modules\\wrappy\\LICENSE",
"node_modules\\wrappy\\package.json",
"node_modules\\wrappy\\README.md",
"node_modules\\wrappy\\wrappy.js",
"files": [
"index.js",
"manifest.json"
]

View File

@ -1,161 +0,0 @@
{
"name": "discord_spellcheck",
"version": "1.0.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"any-promise": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
"integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8="
},
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
},
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"cld": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/cld/-/cld-2.6.0.tgz",
"integrity": "sha512-2U8Uiv7Bvl1v4fNWFGB3RYtPvhUWXQJ1MoNKJNVuoALfandEt9oVqK64S+3ZLvQPjDiYjsohtTep/wIs0xOXkw==",
"requires": {
"glob": "^5.0.10",
"node-addon-api": "*",
"rimraf": "^2.4.0",
"underscore": "^1.6.0"
}
},
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
},
"event-kit": {
"version": "2.5.3",
"resolved": "https://registry.npmjs.org/event-kit/-/event-kit-2.5.3.tgz",
"integrity": "sha512-b7Qi1JNzY4BfAYfnIRanLk0DOD1gdkWHT4GISIn8Q2tAf3LpU8SP2CMwWaq40imYoKWbtN4ZhbSRxvsnikooZQ=="
},
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
},
"glob": {
"version": "5.0.15",
"resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
"integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
"requires": {
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "2 || 3",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
}
},
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"requires": {
"once": "^1.3.0",
"wrappy": "1"
}
},
"inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"keyboard-layout": {
"version": "2.0.16",
"resolved": "https://registry.npmjs.org/keyboard-layout/-/keyboard-layout-2.0.16.tgz",
"integrity": "sha512-eGrxmlV6jbm/mbPEOpYGuH53XEC7wIUj9ZxKcT2z9QHJ/RwrT9iVkvxka9zRxqHZHwQzcffgsa5OxoVAKnhK9w==",
"requires": {
"event-kit": "^2.0.0",
"nan": "^2.13.2"
}
},
"minimatch": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"requires": {
"brace-expansion": "^1.1.7"
}
},
"nan": {
"version": "2.14.1",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz",
"integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw=="
},
"node-addon-api": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.0.0.tgz",
"integrity": "sha512-sSHCgWfJ+Lui/u+0msF3oyCgvdkhxDbkCS6Q8uiJquzOimkJBvX6hl5aSSA7DR1XbMpdM8r7phjcF63sF4rkKg=="
},
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"requires": {
"wrappy": "1"
}
},
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
},
"rimraf": {
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
"integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
"requires": {
"glob": "^7.1.3"
},
"dependencies": {
"glob": {
"version": "7.1.6",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
"integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.0.4",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
}
}
}
},
"spellchecker": {
"version": "3.7.0",
"resolved": "https://registry.npmjs.org/spellchecker/-/spellchecker-3.7.0.tgz",
"integrity": "sha512-saQT4BR9nivbK70s0YjyIlSbZzO6bfWRULcGL2JU7fi7wotOnWl70P0QoUwwLywNQJQ47osgCo6GmOlqzRTxbQ==",
"requires": {
"any-promise": "^1.3.0",
"nan": "^2.14.0"
}
},
"underscore": {
"version": "1.10.2",
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.10.2.tgz",
"integrity": "sha512-N4P+Q/BuyuEKFJ43B9gYuOj4TQUHXX+j2FqguVOpjkssLUUrnJofCcBccJSCoeturDoZU6GorDTHSvUDlSQbTg=="
},
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
}
}
}

View File

@ -4,9 +4,6 @@
"description": "",
"main": "index.js",
"dependencies": {
"cld": "2.6.0",
"keyboard-layout": "2.0.16",
"spellchecker": "3.7.0"
},
"devDependencies": {},
"scripts": {