kud / ed-209 Goto Github PK
View Code? Open in Web Editor NEWI'm an IRC bot!
I'm an IRC bot!
Hello,
In the readme the link is dead : "Please read the documentation" => https://github.com/putaindecode/ed-209/blob/master/docs/adding_features.md
Would throw an error in strict mode.
I've started this work by separating commands and handlers from the main code and putting them into appropriate folders.
We could still to way better as they are very similar.
My proposition is to remove the distinction between the two of them, and only have modules (not in the NPM terminology) that watch the input message stream.
When a message can be processed by a module, it gets so, without blocking further processing by other modules.
This would probably allow some handlers to respond to the same kind of messages, but I guess it's not such a problem.
We could also use this refactoring to provide some handy utility functions to the module writers. My first thought is a checkTargetsMe
that would check for a message that is addressed to the bot, it would be used to implement commands.
I think that the alert feature was a little bit useful, but not as it was implemented.
Here is my proposal:
What are your thoughts on this?
Having everything scattered as closure variables (config
, app
, client
, …) makes it really hard to give more control to the commands and handlers.
I think we should build a Bot class with proper attributes, and pass this object to command and handler callbacks. This will help to fix #2
It would also have appropriate methods such as loadConfig
so the code feels easier to read and has a better structure.
https://twitter.com/search?q=%22chapeau%20de%20roux%22
12:06 bobot ➤ :
TO DO:
basically :
var router = router()
.use(/pattern/, function(input){this.queue(input + " :)")})
.use(/pattern2/, function(input){this.queue(output + " :(")})
.mention(/alert\s([\s\S]+)/, function(input, group){
var users = irc.getUsers(channel)
this.queue(users)
this.queue(group)
})
irc.readStream()
.pipe(router)
.pipe(irc.writeStream())
See #51.
I am beginning to work on a new version of the caniuse listener. To be clear, when you will type: "bobot caniuse box-sizing", it will return the statistics directly instead of a link to the caniuse website.
I have some ideas, but they are opinionated, i need your feedback. To be organized, please answer clearly.
1 - Assume i just wrote "bobot caniuse box-sizing", what do you want to be displayed ?
Box-Sizing
IEX, FFY, ChromeZ
link to the spec or link to docs (mdn, ...)
2 - For the browsers versions, do you want a simple message with only the main browsers and an option like "--long" or "--full" to display all bowsers like opera mini, android, and so on (and we will have to define what are the main browsers later) or do you prefer all the browsers directly in the message, and no option.
3 - I am just asking to be sure but do you want to have the support, the partial support and the prefixed version of the browser to be displayed ? Something like "> IE10 (Partial: IE9, Prefixed: IE8), FF36(Prefixed: FF3.6), ..." or displayed in an other form to be determined, or you don't care at all for this information (i think we should display it, but i don't find the correct form, maybe on another line).
I have details for each question and we will continue when i see that several answers are heading in the same way. Please be clear, don't post multiple messages, edit your posts, and be fast because i will do it my way if not.
because it's a fucking pain in the arse
If #27 is implemented, there is no more need for bootstraping.
A Makefile
is then unneeded, and npm install
is the only thing we need
Hi, on the rework branch (madx/2016) there is a compile issue with nan module.
% git clone https://github.com/madx/ed-209.git
% cd ed-209
% git checkout origin/2016 -b 2016
% git rev-parse HEAD
bbb2638d138cd3294d5a539eb9e43e52a054b2ed
% node --version
v6.2.2
% npm --version
3.10.2
npm install fail.
% npm install
npm WARN deprecated [email protected]: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
> [email protected] install /tmp/ed-209/node_modules/iconv
> node-gyp rebuild
make: Entering directory '/tmp/ed-209/node_modules/iconv/build'
CC(target) Release/obj.target/libiconv/deps/libiconv/lib/iconv.o
./Release/.deps/Release/obj.target/libiconv/deps/libiconv/lib/iconv.o.d.raw { dev: 39,
mode: 33188,
nlink: 1,
uid: 1000,
gid: 100,
rdev: 0,
blksize: 4096,
ino: 167337305,
size: 6999,
blocks: 16,
atime: 2016-07-18T08:03:25.000Z,
mtime: 2016-07-18T08:03:25.000Z,
ctime: 2016-07-18T08:03:25.196Z,
birthtime: 2016-07-18T08:03:25.196Z }
AR(target) Release/obj.target/iconv.a
COPY Release/iconv.a
CXX(target) Release/obj.target/iconv/src/binding.o
In file included from ../src/binding.cc:18:0:
../../nan/nan.h:590:20: error: variable or field �AddGCEpilogueCallback� declared void
v8::Isolate::GCEpilogueCallback callback
^~~~~~~~~~~~~~~~~~
../../nan/nan.h:590:7: error: �GCEpilogueCallback� is not a member of �v8::Isolate�
v8::Isolate::GCEpilogueCallback callback
^~
../../nan/nan.h:591:18: error: expected primary-expression before �gc_type_filter�
, v8::GCType gc_type_filter = v8::kGCTypeAll) {
^~~~~~~~~~~~~~
../../nan/nan.h:596:20: error: variable or field �RemoveGCEpilogueCallback� declared void
v8::Isolate::GCEpilogueCallback callback) {
^~~~~~~~~~~~~~~~~~
../../nan/nan.h:596:7: error: �GCEpilogueCallback� is not a member of �v8::Isolate�
v8::Isolate::GCEpilogueCallback callback) {
^~
../../nan/nan.h:601:20: error: variable or field �AddGCPrologueCallback� declared void
v8::Isolate::GCPrologueCallback callback
^~~~~~~~~~~~~~~~~~
../../nan/nan.h:601:7: error: �GCPrologueCallback� is not a member of �v8::Isolate�
v8::Isolate::GCPrologueCallback callback
^~
../../nan/nan.h:602:18: error: expected primary-expression before �gc_type_filter�
, v8::GCType gc_type_filter = v8::kGCTypeAll) {
^~~~~~~~~~~~~~
../../nan/nan.h:607:20: error: variable or field �RemoveGCPrologueCallback� declared void
v8::Isolate::GCPrologueCallback callback) {
^~~~~~~~~~~~~~~~~~
../../nan/nan.h:607:7: error: �GCPrologueCallback� is not a member of �v8::Isolate�
v8::Isolate::GCPrologueCallback callback) {
^~
make: *** [iconv.target.mk:103: Release/obj.target/iconv/src/binding.o] Error 1
make: Leaving directory '/tmp/ed-209/node_modules/iconv/build'
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack at ChildProcess.onExit (/usr/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:276:23)
gyp ERR! stack at emitTwo (events.js:106:13)
gyp ERR! stack at ChildProcess.emit (events.js:191:7)
gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:204:12)
gyp ERR! System Linux 4.6.2-1-ARCH
gyp ERR! command "/usr/bin/node" "/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /tmp/ed-209/node_modules/iconv
gyp ERR! node -v v6.2.2
gyp ERR! node-gyp -v v3.3.1
gyp ERR! not ok
npm WARN install:[email protected] [email protected] install: `node-gyp rebuild`
npm WARN install:[email protected] Exit status 1
> [email protected] install /tmp/ed-209/node_modules/node-icu-charset-detector
> node-gyp rebuild
make: Entering directory '/tmp/ed-209/node_modules/node-icu-charset-detector/build'
CXX(target) Release/obj.target/node-icu-charset-detector/node-icu-charset-detector.o
In file included from ../node-icu-charset-detector.cpp:2:0:
../../nan/nan.h:590:20: error: variable or field �AddGCEpilogueCallback� declared void
v8::Isolate::GCEpilogueCallback callback
^~~~~~~~~~~~~~~~~~
../../nan/nan.h:590:7: error: �GCEpilogueCallback� is not a member of �v8::Isolate�
v8::Isolate::GCEpilogueCallback callback
^~
../../nan/nan.h:591:18: error: expected primary-expression before �gc_type_filter�
, v8::GCType gc_type_filter = v8::kGCTypeAll) {
^~~~~~~~~~~~~~
../../nan/nan.h:596:20: error: variable or field �RemoveGCEpilogueCallback� declared void
v8::Isolate::GCEpilogueCallback callback) {
^~~~~~~~~~~~~~~~~~
../../nan/nan.h:596:7: error: �GCEpilogueCallback� is not a member of �v8::Isolate�
v8::Isolate::GCEpilogueCallback callback) {
^~
../../nan/nan.h:601:20: error: variable or field �AddGCPrologueCallback� declared void
v8::Isolate::GCPrologueCallback callback
^~~~~~~~~~~~~~~~~~
../../nan/nan.h:601:7: error: �GCPrologueCallback� is not a member of �v8::Isolate�
v8::Isolate::GCPrologueCallback callback
^~
../../nan/nan.h:602:18: error: expected primary-expression before �gc_type_filter�
, v8::GCType gc_type_filter = v8::kGCTypeAll) {
^~~~~~~~~~~~~~
../../nan/nan.h:607:20: error: variable or field �RemoveGCPrologueCallback� declared void
v8::Isolate::GCPrologueCallback callback) {
^~~~~~~~~~~~~~~~~~
../../nan/nan.h:607:7: error: �GCPrologueCallback� is not a member of �v8::Isolate�
v8::Isolate::GCPrologueCallback callback) {
^~
make: *** [node-icu-charset-detector.target.mk:86: Release/obj.target/node-icu-charset-detector/node-icu-charset-detector.o] Error 1
make: Leaving directory '/tmp/ed-209/node_modules/node-icu-charset-detector/build'
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack at ChildProcess.onExit (/usr/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:276:23)
gyp ERR! stack at emitTwo (events.js:106:13)
gyp ERR! stack at ChildProcess.emit (events.js:191:7)
gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:204:12)
gyp ERR! System Linux 4.6.2-1-ARCH
gyp ERR! command "/usr/bin/node" "/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /tmp/ed-209/node_modules/node-icu-charset-detector
gyp ERR! node -v v6.2.2
gyp ERR! node-gyp -v v3.3.1
gyp ERR! not ok
npm WARN install:[email protected] [email protected] install: `node-gyp rebuild`
npm WARN install:[email protected] Exit status 1
[email protected] /tmp/ed-209
��� [email protected]
��, [email protected]
� ��, [email protected]
� � ��, [email protected]
� � � ��� [email protected]
� � � ��� [email protected]
� � ��, [email protected]
� � � ��, [email protected]
� � � ��� [email protected]
� � ��� [email protected]
� � ��� [email protected]
� � ��� [email protected]
� � ��, [email protected]
� � � ��� [email protected]
� � � ��, [email protected]
� � � ��, [email protected]
� � � ��� [email protected]
� � ��, [email protected]
� � � ��� [email protected]
� � ��� [email protected]
� � ��� [email protected]
� � ��� [email protected]
� � ��� [email protected]
� ��, [email protected]
� � ��� [email protected]
� � ��� [email protected]
� ��, [email protected]
� � ��, [email protected]
� � � ��� [email protected]
� � ��, [email protected]
� � � ��� [email protected]
� � ��, [email protected]
� � ��, [email protected]
� � ��� [email protected]
� ��� [email protected]
� ��, [email protected]
� � ��, [email protected]
� � � ��, [email protected]
� � � ��� [email protected]
� � � ��, [email protected]
� � � � ��, [email protected]
� � � � � ��� [email protected]
� � � � ��� [email protected]
� � � � ��, [email protected]
� � � � � ��, [email protected]
� � � � � � ��� [email protected]
� � � � � ��� [email protected]
� � � � ��� [email protected]
� � � � ��, [email protected]
� � � � � ��� [email protected]
� � � � � ��, [email protected]
� � � � � � ��� [email protected]
� � � � � ��, [email protected]
� � � � � ��, [email protected]
� � � � � � ��� [email protected]
� � � � � ��, [email protected]
� � � � � ��� [email protected]
� � � � ��, [email protected]
� � � � � ��, [email protected]
� � � � � � ��� [email protected]
� � � � � ��, [email protected]
� � � � � ��, [email protected]
� � � � � � ��, [email protected]
� � � � � � � ��, [email protected]
� � � � � � � ��� [email protected]
� � � � � � ��� [email protected]
� � � � � � ��, [email protected]
� � � � � � ��� [email protected]
� � � � � ��� [email protected]
� � � � ��, [email protected]
� � � � � ��, [email protected]
� � � � � � ��� [email protected]
� � � � � ��� [email protected]
� � � � ��� [email protected]
� � � ��� [email protected]
� � ��� [email protected]
� � ��� [email protected]
� � ��, [email protected]
� � ��� [email protected]
� ��� [email protected]
� ��, [email protected]
� � ��, [email protected]
� � � ��� [email protected]
� � � ��, [email protected]
� � � ��, [email protected]
� � � � ��� [email protected]
� � � ��� [email protected]
� � � ��, [email protected]
� � � � ��, [email protected]
� � � � � ��, [email protected]
� � � � � ��� [email protected]
� � � � � ��� [email protected]
� � � � � ��� [email protected]
� � � � � ��� [email protected]
� � � � ��� [email protected]
� � � � ��� [email protected]
� � � ��, [email protected]
� � � � ��� [email protected]
� � � ��� [email protected]
� � � ��� [email protected]
� � � ��, [email protected]
� � � � ��� [email protected]
� � � ��� [email protected]
� � � ��, [email protected]
� � � � ��, [email protected]
� � � � � ��� [email protected]
� � � � ��� [email protected]
� � � ��, [email protected]
� � � � ��� [email protected]
� � � � ��� [email protected]
� � � ��, [email protected]
� � � ��� [email protected]
� � � ��� [email protected]
� � ��� [email protected]
� � ��� [email protected]
� � ��� [email protected]
� � ��, [email protected]
� � � ��� [email protected]
� � ��, [email protected]
� � � ��� [email protected]
� � ��, [email protected]
� � ��, [email protected]
� � � ��� [email protected]
� � � ��� [email protected]
� � � ��� [email protected]
� � � ��� [email protected]
� � � ��� [email protected]
� � � ��� [email protected]
� � ��� [email protected]
� ��, [email protected]
� � ��� [email protected]
� ��� [email protected]
� ��� [email protected]
� ��, [email protected]
� � ��, [email protected]
� � � ��� [email protected]
� � ��� [email protected]
� ��� [email protected]
� ��� [email protected]
� ��, [email protected]
� � ��� [email protected]
� � ��� [email protected]
� ��� [email protected]
� ��� [email protected]
� ��, [email protected]
� � ��� [email protected]
� � ��� [email protected]
� � ��, [email protected]
� � � ��� [email protected]
� � ��� [email protected]
� � ��, [email protected]
� � � ��� [email protected]
� � ��� [email protected]
� � ��� [email protected]
� � ��, [email protected]
� � � ��� [email protected]
� � ��, [email protected]
� � � ��, [email protected]
� � � � ��� [email protected]
� � � � ��, [email protected]
� � � � � ��� [email protected]
� � � � ��� [email protected]
� � � � ��� [email protected]
� � � ��, [email protected]
� � � ��� [email protected]
� � ��, [email protected]
� � � ��� [email protected]
� � � ��� [email protected]
� � � ��� [email protected]
� � � ��� [email protected]
� � ��, [email protected]
� � � ��� [email protected]
� � � ��, [email protected]
� � � � ��� [email protected]
� � � � ��� [email protected]
� � � � ��� [email protected]
� � � ��, [email protected]
� � � ��� [email protected]
� � � ��� [email protected]
� � � ��, [email protected]
� � � � ��� [email protected]
� � � ��� [email protected]
� � � ��, [email protected]
� � � � ��� [email protected]
� � � ��� [email protected]
� � � ��� [email protected]
� � � ��� [email protected]
� � ��� [email protected]
� � ��� [email protected]
� � ��� [email protected]
� � ��, [email protected]
� � � ��� [email protected]
� � ��� [email protected]
� � ��� [email protected]
� � ��� [email protected]
� � ��� [email protected]
� � ��� [email protected]
� � ��� [email protected]
� ��� [email protected]
� ��� [email protected]
� ��, [email protected]
� ��� [email protected]
��, [email protected]
� ��� [email protected]
� ��� [email protected]
� ��� [email protected]
� ��� [email protected]
� ��, [email protected]
� � ��� [email protected]
� � ��� [email protected]
� � ��� [email protected]
� � ��� [email protected]
� ��� [email protected]
� ��� [email protected]
� ��� [email protected]
� ��� [email protected]
� ��� [email protected]
� ��� [email protected]
� ��, [email protected]
� � ��� [email protected]
� ��� [email protected]
� ��, [email protected]
� � ��, [email protected]
� � � ��� [email protected]
� � ��� [email protected]
� ��� [email protected]
� ��� [email protected]
� ��, [email protected]
� � ��� [email protected]
� ��� [email protected]
� ��� [email protected]
� ��, [email protected]
� � ��, [email protected]
� � ��� [email protected]
� � ��� [email protected]
� � ��, [email protected]
� � ��� [email protected]
� ��, [email protected]
� ��� [email protected]
��, [email protected]
� ��� [email protected]
� ��� [email protected]
� ��, [email protected]
� � ��� [email protected]
� ��� [email protected]
� ��� [email protected]
��, [email protected]
� ��, [email protected]
� � ��� [email protected]
� � ��� [email protected]
� ��� [email protected]
� ��� [email protected]
� ��, [email protected]
� � ��, [email protected]
� � � ��� [email protected]
� � � ��, [email protected]
� � � ��� [email protected]
� � ��� [email protected]
� � ��, [email protected]
� � � ��� [email protected]
� � ��, [email protected]
� � ��, [email protected]
� � � ��� [email protected]
� � ��� [email protected]
� ��, [email protected]
� � ��� [email protected]
� � ��, [email protected]
� � ��, [email protected]
� � ��� [email protected]
� ��, [email protected]
� � ��� [email protected]
� � ��� [email protected]
� � ��, [email protected]
� � ��� [email protected]
� ��, [email protected]
� � ��� [email protected]
� � ��� [email protected]
� ��� [email protected]
� ��, [email protected]
� � ��� [email protected]
� � ��� [email protected]
� ��, [email protected]
� � ��� [email protected]
� ��, [email protected]
� � ��, [email protected]
� � � ��, [email protected]
� � � ��� [email protected]
� � � ��� [email protected]
� � � ��� [email protected]
� � � ��� [email protected]
� � ��� [email protected]
� ��� [email protected]
� ��, [email protected]
� � ��� [email protected]
� � ��� [email protected]
� � ��� [email protected]
� � ��� [email protected]
� � ��, [email protected]
� � ��, [email protected]
� � ��� [email protected]
� ��, [email protected]
� ��� [email protected]
� ��� [email protected]
� ��� [email protected]
� ��� [email protected]
��, [email protected]
� ��� [email protected]
��, [email protected] invalid
� ��, [email protected]
� � ��� [email protected]
� ��� [email protected]
� ��� [email protected]
� ��, [email protected]
� � ��, [email protected]
� � � ��, [email protected]
� � � � ��� [email protected]
� � � ��, [email protected]
� � � � ��� [email protected]
� � � � ��� [email protected]
� � � ��, [email protected]
� � � ��� [email protected]
� � � ��� [email protected]
� � � ��� [email protected]
� � ��� [email protected]
� ��, [email protected]
� � ��, [email protected]
� � ��� [email protected]
� � ��� [email protected]
� ��, [email protected]
� � ��, [email protected]
� � ��� [email protected]
� � ��� [email protected]
� � ��� [email protected]
� � ��� [email protected]
� � ��� [email protected]
� � ��� [email protected]
� � ��� [email protected]
� ��, [email protected]
� � ��, [email protected]
� � ��� [email protected]
� ��� [email protected]
� ��, [email protected]
� ��, [email protected]
� � ��, [email protected]
� � � ��� [email protected]
� � ��� [email protected]
� � ��, [email protected]
� � � ��� [email protected]
� � � ��� [email protected]
� � ��� [email protected]
� ��� [email protected]
� ��, [email protected]
� � ��, [email protected]
� � ��, [email protected]
� � � ��, [email protected]
� � � � ��� [email protected]
� � � � ��� [email protected]
� � � ��� [email protected]
� � � ��� [email protected]
� � � ��� [email protected]
� � � ��� [email protected]
� � � ��� [email protected]
� � � ��� [email protected]
� � � ��� [email protected]
� � � ��� [email protected]
� � � ��� [email protected]
� � ��, [email protected]
� � ��, [email protected]
� � ��� [email protected]
� � ��� [email protected]
� ��, [email protected]
� � ��, [email protected]
� � ��� [email protected]
� ��, [email protected]
� � ��� [email protected]
� ��� [email protected]
��� [email protected]
npm WARN optional Skipping failed optional dependency /chokidar/fsevents:
npm WARN notsup Not compatible with your operating system or architecture: [email protected]
npm WARN [email protected] No repository field.
npm WARN [email protected] license should be a valid SPDX license expression
npm install 19.00s user 1.38s system 69% cpu 29.452 total
Missing few modules the bot fail to start.
% npm start
> [email protected] start /tmp/ed-209
> nodemon index.js
[nodemon] 1.9.2
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting `node index.js`
/tmp/ed-209/index.js:3
import fs from 'fs'
^^^^^^
SyntaxError: Unexpected token import
at Object.exports.runInThisContext (vm.js:53:16)
at Module._compile (module.js:513:28)
at Object.Module._extensions..js (module.js:550:10)
at Module.load (module.js:458:32)
at tryModuleLoad (module.js:417:12)
at Function.Module._load (module.js:409:3)
at Module.runMain (module.js:575:10)
at run (node.js:348:7)
at startup (node.js:140:9)
at node.js:463:3
[nodemon] app crashed - waiting for file changes before starting...
I think we could use a Travis module to check any issue with updated node packages breaking something.
Sorry for the encoding, I'm too lazy today to fix it.
bot.addListener = function(name, listener) {
this.listeners[name] = listener
}
vs
bot.addListener = addListener
function addListener(name, listener) {
this.listeners[name] = listener
}
vs
var addListener = function(name, listener) {
this.listeners[name] = listener
}
bot.addListener = addListener
// Imports
var irc = require('irc'),
fs = require('fs'),
path = require('path'),
util = require('util'),
bot = require('./bot.js'),
config,
client,
botInstance,
i, l
vs
// Imports
var irc = require('irc')
, fs = require('fs')
, path = require('path')
, util = require('util')
, bot = require('./bot.js')
, config, client, botInstance, i, l
vs
// Imports
var
irc = require('irc'),
fs = require('fs'),
path = require('path'),
util = require('util'),
bot = require('./bot.js'),
config, client, botInstance, i, l
if(url.search(/photo/) > 0) {
// …
}
else if(url.search(/status/) > 0) {
// …
}
vs
if(url.search(/photo/) > 0){
// …
} else if(url.search(/status/) > 0){
// …
}
vs
if(url.search(/photo/) > 0){
// …
} else {
if(url.search(/status/) > 0){
// …
}
}
and
response.on("data", function(chunk) {
dom += chunk
})
vs
response.on("data", function(chunk){
dom += chunk
})
$tweet = $('.opened-tweet').find('.js-tweet-text').first()
vs
$tweet = $(".opened-tweet").find(".js-tweet-text").first()
The current Apache-like available/enabled mechanism does not suit our needs.
We need to have a configuration object referencing the enabled listeners/plugins, with the ability to enable, disable and reload them when the code has changed.
The automatic git pull + nodemon technique for autoreload could then be removed and we could add an explicit reload command, coupled to automatic pulling of changes.
11:44 _kud ➤ www.youtube.com/watch?v=aqbOhp771QY
11:44 bobot ➤ Error: [TypeError: Cannot read property '0' of null]
Does not really make sense these days...
Repo name should be deprecated and use a new one.
Who want to take care of this repo?
At the current state, documentation is very sparse and incomplete.
We need to add more doc so newcomers could explore and understand the code more easily.
With client.say(to, app[cmd].apply(app, params));
, it is impossible to return value from asynchrone calls.
var app = {
...
foo: function() {
myFunc({
url: 'http://foo.com',
done: function (res) {
/* I want to send `res` to my client */
}
});
}
...
}
At the moment we do :
bobot: js '"yo" + " " + "les" + " " + "jeunes"'
But we should better do :
bobot: js "yo" + " " + "les" + " " + "jeunes"
We could use persistence for some commands like reminders, memos or that kind of stuff.
If the preliminary work on #4 is done, we could add the persistence layer to the bot class so modules can use it.
I've given a try to NeDB and it seems to be a good fit (in memory + disk sync for persistence, Mongo-like interface)
Add a CKC command that returns a random CKC tweet.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.