GithubHelp home page GithubHelp logo

ed-209's Introduction

Hi 👋, I'm Erwann Mest

a senior software engineer specialised in front-end and javascript 👨‍💻
working in london since 2022 🚀

Connect with me:

_kud

Languages and Tools:

css3 cypress figma framer git graphql html5 javascript jest nextjs nodejs puppeteer react reactnative typescript

ed-209's People

Contributors

bigorneau avatar bloodyowl avatar kud avatar madx avatar moox avatar nyalab avatar owlycode avatar piec avatar rhannequin avatar shahor avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

ed-209's Issues

Refactor commands and handlers

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.

Add alert again

I think that the alert feature was a little bit useful, but not as it was implemented.

Here is my proposal:

  • Add an event listener that reacts to "nicks " in a private message
  • The event listeners returns the list of nicks for the given channel
  • The user can copy-paste the nicks

What are your thoughts on this?

Build a Bot class

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.

new version

  • create readable stream from irc for each channel
  • create writable stream to irc for each channel
  • create a through router
  • profit!

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())

WIP ~ caniusev2 ~ need ideas

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 ?

  • a single message like "Box-sizing: IEX, FFY, ChromeZ"
  • multiple messages (i prefer this one) with:

    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.

Do not rely on make

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

[2016 rework] npm install fail with node 6

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...

See node-iconv issue #157.

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.

Define coding style guidelines

Method declaration

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

Variable initialization

// 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

Spacing

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
})

Quotes

$tweet = $('.opened-tweet').find('.js-tweet-text').first()

vs

$tweet = $(".opened-tweet").find(".js-tweet-text").first()

Change how we load plugins

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.

Bug on youtube listener

11:44 _kud ➤ www.youtube.com/watch?v=aqbOhp771QY
11:44 bobot ➤ Error: [TypeError: Cannot read property '0' of null]

Document all the things

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.

Can't send response from asynchrone calls

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 */
      }
    });
  }
  ...
}

Add a persistence layer

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.