最笨的IRC机器人

2022-02-13 14:16:50

我是一名IRC超级用户,在过去10年左右的时间里,我每天24小时在10+网络上的200多个频道里闲逛。由于IRC标准化且简单,IRC爱好者的一个常见消遣就是创建机器人。在我常去的一个社交渠道里,我们花了6年时间逐步打造了世界上最愚蠢的IRC机器人:wormy。

首先,沃米患有高度精神分裂症。虽然它以单个机器人的形式出现,但实际上它是一个结合了7个独立机器人连接的保镖。这个数字一度更高——多达11个——但一些机器人被整合了。

<@sircmpwn>。机器人<;沃米>;自2017年起提供文本/html,您的真实[";ps";]要查看命令列表,请尝试`。帮助`<;沃米>;负';包裹追踪机器人r10。b563abc(建于2020-06-06T12:02:13Z,https://git.sr.ht/~减号/包裹追踪机器人)<;沃米>;负';骰子机器人r16。498a0b8(建于2020-02-04T20:16:14Z,https://git.sr.ht/~minus/dice irc bot)<;沃米>;jsbot的特点是通过设计执行任意代码,并且错误地导致缓冲区溢出;沃米>;Radiobot通过互联网实时向您发送请求,接听1-800-GUD-SONGS<;沃米>;urlbot:直播视频直接传到你的眼球<;沃米>;o/SirCmpwn让我这样他就不会';别忘得太多

这些机器人为频道成员提供了多种功能,例如检查要递送的包裹的追踪号码,为我们的私人互联网广播请求歌曲,读取频道中提到的URL的模拟类型和标题,或者将查询输入Wolfram Alpha。

<;沃米>;正在播放:8369492小さき者への贖罪の為のソナタ 作者:阿里项目禁書 (4m42s FLAC)<;沃米>;正在播放:1045361アキノサクラ 来自魔法时刻的Wakana(佛罗里达州500万分之一)#live♥ 负<;沃米>;现在播放:d0b1cb3 Forevermore by F,来自Cafe de Touhou 3(佛罗里达州4m9s)♥ 悍马12007<;沃米>;现在播放:0911e90 Moeru San Shimai由岩崎Taku创作,来自Tengen Toppa Gurren Lagann原声带-CD01(3m3s FLAC)<;沃米>;现在播放的是:由优生teikoku创作的ac1a17e叛军歌,来自叛军歌(5m15s MP3)♥ 负<;沃米>;现在播放:A5AB39从Aki进入拳击场是一个令人向往的梦想-秋- (4m38s FLAC)♥ 减

去年,随着一个真正愚蠢的机器人jsbot的推出,事情真的开始了。这个机器人增加了一个。js命令,该命令执行任意JavaScript(使用Fabrice Bellard的quickjs)表达式,并将其字符串化结果发送到通道。

然而,我们很快意识到,我们实际上创建的是一个连接到IRC的persistentJavaScript环境。这使得以最不实用的方式编写更多的IRC机器人成为可能:一次编写一行JavaScript语句到IRC消息中,并希望它能工作。

一个由布莱恩·坎特里尔(BryanCantrill)启发的“特写”记录了频道中每次使用“操”一词的情况。然后,每当有人说“wtf”时,bot都会通过打印一条记录的消息来提供一个使用“fuck”这个词的例子。下面是它的制作过程:

<;sircmpwn>。js let wtf=[]&书信电报;沃米>=>;未定义<;sircmpwn>。js on(/fuck/,msg=>;wtf.push(msg.text))<;沃米>=>;25<;sircmpwn>。js on(/^what-fuck$/,msg=>;msg.reply(wtf[Math.floor(Math.random()*wtf.length)])<;沃米>=>;26

这里有一个记录每当有人说“foo++”或“foo--”时的记录,并记录分数:

.js on(/^([a-zA-Z0-9_]+)(\+\+\+-)$/,(msg,thing,op)=>;{if(分数类型[事物]===";未定义";)分数[事物]=0;得分(事物)+=op==="++" ? 1 : -1; 味精。回复(${thing}:${scores[thing]})});。js on(/\.分数(.*)/,(信息,项目)=>;味精。回复(分数[项目]);。js let BEST=()=>;对象参赛作品(分数)。排序((a,b)=>;a[1]-b[1])。切片(0,5)。映射(s=>;`s[0]}:${s[1]}`)。加入(";,";);。js let best=()=>;对象参赛作品(分数)。排序((a,b)=>;b[1]-a[1])。切片(0,5)。映射(s=>;`s[0]}:${s[1]}`)。加入(";,";);。js on(/^.best$/,msg=>;msg.reply(best());。js on(/^.best$/,msg=>;msg.reply(best());

用可怕的一行程序编写的其他“功能”包括国际单位制转换、重写不受欢迎的URL(例如:m.wikipedia.org=>;en.wikipedia.org),用“?”回答“wormy you Piect”\_(ツ)_/“”,并给出明显的回应“给我做个三明治”。

最后,我们突然想到,我们有24个愚蠢的IRC机器人,在某台服务器上的一个长期过程中,不仅存储它们的状态,还存储它们的代码。有一段时间,这个问题的答案是在MotD中添加“不要重新启动这个服务器kthx”,但最终我们做了一些神奇的废话,以使某些变量:

让persistent={};函数writePersistent(){let fd=std.open(";persist.json";,";w";);fd。puts(JSON.stringify(persistent));fd。关闭();}让persist_handler={set:(obj,prop,val)=>;{obj[prop]=val;writepersist();},};设p=std。loadFile(";persist.json";);if(p!==null){persistent=JSON.parse(p);Object.keys(persistent).map(key=>;{let proxy=new proxy(persistent[key],persistent_handler);persistent[key]=proxy;exports[key]=proxy;}出口。persist=(名称,obj)=>;{let proxy=new proxy(obj,persist_handler);persistent[name]=proxy;writePersistent();return proxy;};

不管怎样,这个故事没有寓意。我们只是有一个愚蠢的IRC机器人,我想我会和你分享。如果你想在自己的频道上安装一个愚蠢的IRC机器人,那么可以在sourcehut上使用jsbot。我非常反感它,并否认对其后果负有任何责任。