cleverbot-irc
Advanced tools
Comparing version 0.1.0 to 0.1.1
var CleverBot = new require('cleverbot-node') | ||
, clever = new CleverBot() | ||
, dye = require('dye') | ||
, Levenshtein = require('levenshtein') | ||
, format = require('util').format | ||
, sunCalc = require('suncalc'); | ||
, protection = require('./echo_protection') | ||
, maybeSpiceUp = require('./fullmoon_spiceup'); | ||
@@ -11,4 +9,4 @@ /** | ||
* used to notify in channel if we are ignoring a person | ||
* or in pms without the correct password | ||
*/ | ||
const ignoreMax = 3600; | ||
var insult = (function () { | ||
@@ -32,68 +30,24 @@ var insults = [ | ||
/** | ||
* Full Moon Based Zalgolizer | ||
* when moon is sufficiently full, clvr speaks with the zalgolizer | ||
* the zalgolizer grows more intense the closer to full moon it is | ||
*/ | ||
const fullMoonCutoff = 0.95; | ||
var getZalgoIntensities = function () { | ||
var len = 1 - fullMoonCutoff; | ||
var dist = sunCalc.getMoonFraction(Date.now()) - fullMoonCutoff; | ||
if (dist < 0) { | ||
// not a full moon! | ||
return [0, 0, 0]; | ||
} | ||
// full moon | ||
var max = dist/len; | ||
console.log(dye.magenta('full moon intensity at ' + max + '%')); | ||
// [0, 0, 0] at [0, fullMoonCutoff), [10, 6, 10] at full moon (=1) | ||
// linear interpolation in the range [fullMoonCutoff, 1] | ||
return [ | ||
Math.ceil(10*max), | ||
Math.ceil(6*max), | ||
Math.ceil(10*max) | ||
]; | ||
}; | ||
var repeats = {}; // maintains last said thing for a user | ||
var ignores = []; | ||
const ignoreMax = 3600; | ||
module.exports = function (gu) { | ||
gu.on(/(.*)/, function (content, from) { | ||
if (ignores.indexOf(from) >= 0) { | ||
return; // ignored person | ||
} | ||
// repeat messengers should not echo back 'basically' what cleverbot said | ||
if (repeats[from]) { | ||
var ld = new Levenshtein(repeats[from], content); | ||
if (ld.distance < content.length/8) { | ||
var ignoreTime = Math.ceil(ignoreMax*1000*Math.random()); | ||
console.log(dye.yellow( | ||
'ignoring ' + from + ' for ' + Math.floor(ignoreTime/1000) + 's' | ||
)); | ||
ignores.push(from); | ||
gu.say(from + ": " + insult()); | ||
setTimeout(function () { | ||
console.log(dye.yellow(format('unignoring', from))); | ||
ignores.splice(ignores.indexOf(from), 1); | ||
}, ignoreTime); | ||
return; | ||
gu.on(/(.*)/, function (message, user) { | ||
if (!protection.isIgnored(user)) { | ||
if (protection.isTooSimilar(user, message)) { | ||
gu.say(user + ': ' + insult()); | ||
return protection.ignore(user, ignoreMax); | ||
} | ||
} | ||
// pass data onto cleverbot | ||
clever.write(content, function (data) { | ||
// cache response for user so we can catch if they mime on next message | ||
repeats[from] = data.message; | ||
// pass message on to cleverbot | ||
clever.write(message, function (data) { | ||
var resp = data.message; | ||
// remember the last thing `user` got returned to him | ||
// so we can verify that he doesn't simply echo it back | ||
protection.remember(user, resp); | ||
// get message and zalgolize if close to full moon | ||
var resp = dye.zalgo(data.message, 0.1, getZalgoIntensities()); | ||
gu.say(from + ': ' + resp); | ||
}); | ||
// do fancy things to the message on full moons | ||
gu.say(user + ': ' + maybeSpiceUp(resp)); | ||
}); | ||
} | ||
}); | ||
}; |
@@ -5,3 +5,3 @@ { | ||
"description": "IRC bot that defers to Cleverbot", | ||
"version": "0.1.0", | ||
"version": "0.1.1", | ||
"repository": { | ||
@@ -20,5 +20,6 @@ "type": "git", | ||
"dye": "~0.2.0", | ||
"gu": "~0.0.1", | ||
"gu": "~0.0.2", | ||
"cleverbot-node": "~0.1.2", | ||
"suncalc": "~1.2.1", | ||
"irc-colors": "~1.0.3", | ||
"confortable": "~0.2.1" | ||
@@ -25,0 +26,0 @@ }, |
@@ -24,2 +24,8 @@ # cleverbot-irc | ||
## Quirks | ||
Because spare time. | ||
- `clvr` will go a little crazy close to every full moon | ||
- imitating the responses of `clvr` back to her can get you ignored for some time | ||
## Internal Highlights | ||
@@ -26,0 +32,0 @@ |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
8116
9
142
73
0
7
+ Addedirc-colors@~1.0.3
+ Addedarray-buffer-byte-length@1.0.2(transitive)
+ Addedarraybuffer.prototype.slice@1.0.4(transitive)
+ Addedasync-function@1.0.0(transitive)
+ Addedavailable-typed-arrays@1.0.7(transitive)
+ Addedcall-bind@1.0.8(transitive)
+ Addedcall-bind-apply-helpers@1.0.1(transitive)
+ Addedcall-bound@1.0.3(transitive)
+ Addeddata-view-buffer@1.0.2(transitive)
+ Addeddata-view-byte-length@1.0.2(transitive)
+ Addeddata-view-byte-offset@1.0.1(transitive)
+ Addeddefine-data-property@1.1.4(transitive)
+ Addeddefine-properties@1.2.1(transitive)
+ Addeddunder-proto@1.0.1(transitive)
+ Addedes-abstract@1.23.9(transitive)
+ Addedes-define-property@1.0.1(transitive)
+ Addedes-errors@1.3.0(transitive)
+ Addedes-object-atoms@1.1.1(transitive)
+ Addedes-set-tostringtag@2.1.0(transitive)
+ Addedes-to-primitive@1.3.0(transitive)
+ Addedfor-each@0.3.5(transitive)
+ Addedfunction-bind@1.1.2(transitive)
+ Addedfunction.prototype.name@1.1.8(transitive)
+ Addedfunctions-have-names@1.2.3(transitive)
+ Addedget-intrinsic@1.2.7(transitive)
+ Addedget-proto@1.0.1(transitive)
+ Addedget-symbol-description@1.1.0(transitive)
+ Addedglobalthis@1.0.4(transitive)
+ Addedgopd@1.2.0(transitive)
+ Addedhas-bigints@1.1.0(transitive)
+ Addedhas-property-descriptors@1.0.2(transitive)
+ Addedhas-proto@1.2.0(transitive)
+ Addedhas-symbols@1.1.0(transitive)
+ Addedhas-tostringtag@1.0.2(transitive)
+ Addedhashish@0.0.4(transitive)
+ Addedhasown@2.0.2(transitive)
+ Addedinternal-slot@1.1.0(transitive)
+ Addedirc-colors@1.0.3(transitive)
+ Addedis-array-buffer@3.0.5(transitive)
+ Addedis-async-function@2.1.1(transitive)
+ Addedis-bigint@1.1.0(transitive)
+ Addedis-boolean-object@1.2.2(transitive)
+ Addedis-callable@1.2.7(transitive)
+ Addedis-data-view@1.0.2(transitive)
+ Addedis-date-object@1.1.0(transitive)
+ Addedis-finalizationregistry@1.1.1(transitive)
+ Addedis-generator-function@1.1.0(transitive)
+ Addedis-map@2.0.3(transitive)
+ Addedis-number-object@1.1.1(transitive)
+ Addedis-regex@1.2.1(transitive)
+ Addedis-set@2.0.3(transitive)
+ Addedis-shared-array-buffer@1.0.4(transitive)
+ Addedis-string@1.1.1(transitive)
+ Addedis-symbol@1.1.1(transitive)
+ Addedis-typed-array@1.1.15(transitive)
+ Addedis-weakmap@2.0.2(transitive)
+ Addedis-weakref@1.1.1(transitive)
+ Addedis-weakset@2.0.4(transitive)
+ Addedisarray@2.0.5(transitive)
+ Addedmath-intrinsics@1.1.0(transitive)
+ Addedobject-inspect@1.13.4(transitive)
+ Addedobject-keys@1.1.1(transitive)
+ Addedobject.assign@4.1.7(transitive)
+ Addedown-keys@1.0.1(transitive)
+ Addedpossible-typed-array-names@1.1.0(transitive)
+ Addedreflect.getprototypeof@1.0.10(transitive)
+ Addedregexp.prototype.flags@1.5.4(transitive)
+ Addedsafe-array-concat@1.1.3(transitive)
+ Addedsafe-push-apply@1.0.0(transitive)
+ Addedsafe-regex-test@1.1.0(transitive)
+ Addedset-function-length@1.2.2(transitive)
+ Addedset-function-name@2.0.2(transitive)
+ Addedset-proto@1.0.0(transitive)
+ Addedside-channel@1.1.0(transitive)
+ Addedside-channel-list@1.0.0(transitive)
+ Addedside-channel-map@1.0.1(transitive)
+ Addedside-channel-weakmap@1.0.2(transitive)
+ Addedstring.prototype.trim@1.2.10(transitive)
+ Addedstring.prototype.trimend@1.0.9(transitive)
+ Addedstring.prototype.trimstart@1.0.8(transitive)
+ Addedtraverse@0.6.11(transitive)
+ Addedtyped-array-buffer@1.0.3(transitive)
+ Addedtyped-array-byte-length@1.0.3(transitive)
+ Addedtyped-array-byte-offset@1.0.4(transitive)
+ Addedtyped-array-length@1.0.7(transitive)
+ Addedtypedarray.prototype.slice@1.0.5(transitive)
+ Addedunbox-primitive@1.1.0(transitive)
+ Addedwhich-boxed-primitive@1.1.1(transitive)
+ Addedwhich-builtin-type@1.2.1(transitive)
+ Addedwhich-collection@1.0.2(transitive)
+ Addedwhich-typed-array@1.1.18(transitive)
Updatedgu@~0.0.2