// Replaces the n-word with "n-word" const Socket = require('../socket'); const Space = require('../space'); const comb = require('../utils/comb'); const Search = require('../tools/search'); const Queue = require('../tools/queue'); const maketiles = require('../utils/maketiles'); const vec = require('../utils/vec'); const wwrap = require('../utils/writewrap'); const id = require('../utils/ident'); var main = new Socket(); wwrap.call(main); id.call(main); var search = new Search(); var ids = []; var idcall = []; var wq = new Queue(1000, 200, (w,max) =>{ let globid = main.write(w); let id; while (id = ids.shift()) { if (id > max) break; let run = idcall.shift(); main.on(globid, ()=>{run();main.off(this)}); } }); main.on('init',(send)=>{ main.sender = send; wq.enable(); }); var expire = {}; main.on('tileUpdate', (send, source, tiles)=>{ if (send === main.sender) return; let tiledata = maketiles(tiles); for (let loc of tiledata.locs) { let spc = tiledata.tilespaces[loc]; if (search.has(loc)){ clearTimeout(expire[loc]); search.del(loc); } search.add(loc, spc); expire[loc] = setTimeout(() => {search.del(loc); delete expire[loc];}, 300*1000); } }); makeclean('I am racist', '[Nn] *[Ii] *[Gg] *[Gg] *([Ee] *[Rr]|[Aa])'); makeclean('I am ableist', '[Rr] *[Ee] *[Tt] *[Aa] *[Rr] *[Dd]'); let lecture = {}; function makeclean(resp, reg){ let response = new Space().adhoc(resp); let regex = new RegExp(reg,'g'); function clean(coord, send, space){ let out; if (!lecture[send]){ response.loc = coord; out = response; lecture[send] = true; setTimeout(() => {delete lecture[send];}, 1000); }else{ out = new Space().adhoc(space.print().replace(regex, match=>' '.repeat(match.length))).comb(space, comb.sub); } ids.push(wq.enqueue(out.towrite())); idcall.push(() => {search.update(response);}); } search.match([reg], clean); }