Example #1
0
var projects = _.map(_.range(40), function(x, i) {
  return {
    cost_per_period: _.random(1,10),
    duration: _.random(1,10),
    value_per_period: _.random(1,10),
    i: i
  };
});
Example #2
0
 this.api.getSimilarArtists(track.artist.mbid, function(err, similar) {
     if(!err) {
         var choice = _.random(0, similar.length - 1); 
         this.api.getRandomArtistTrack(similar[choice].mbid, function(err, track) {
             if(!err) {
                 var output = dbot.t('lfm_suggestion', {
                     'user': event.user,
                     'name': track.name,
                     'artist': track.artist.name
                 });
                 var term = track.name + ' ' + track.artist.name;
                 dbot.api.youtube.search(term, function(body) {
                     if(_.isObject(body) && _.has(body, 'feed') && _.has(body.feed, 'entry')) {
                         var v = body.feed.entry[0];
                             link = v.link[0].href.match(dbot.modules.youtube.LinkRegex);
                         if(link) {
                             output += ' - http://youtu.be/' + link[2];
                         }
                     }
                     event.reply(output);
                 });
             } else {
                 event.reply('something broke');
             }
         }); 
     } else {
         event.reply('something broke');
     }
 }.bind(this));
Example #3
0
 handler: function(info, action){
   //等待下一次回复
   var retryCount = 3
   var num = Number(info.query[1]) || _.random(1,9);
   log('answer is: ' + num);
   webot.wait(info.user, function(next_info, next_action){
     var text = Number(next_info.text);
     if(text){
       if(text == num){
         return '你真聪明!'
       }else if(retryCount > 1){
         retryCount--;
         //重试
         webot.rewait(info.user);
         return (text > num ? '大了': '小了') +',还有' + retryCount + '次机会,再猜.'
       }else{
         return '好吧,你的IQ有点抓急,谜底是: ' + num
       }
     }else{
       //不是文本消息,跳过,交给下一个action
       return null
     }
   })
   return '玩玩猜数字的游戏吧, 1~9,选一个'
 }
Example #4
0
        'interpolatedQuote': function(server, channel, key, quoteTree) {
            if(!_.isUndefined(quoteTree) && quoteTree.indexOf(key) != -1) { 
                return ''; 
            } else if(_.isUndefined(quoteTree)) { 
                quoteTree = [];
            }

            var index = _.random(0, this.quotes[key].length - 1);
            var quoteString = this.quotes[key][index];

            // Parse quote interpolations
            var quoteRefs = quoteString.match(/~~([\d\w\s-]*)~~/g);
            var thisRef;

            while(quoteRefs && (thisRef = quoteRefs.shift()) !== undefined) {
                var cleanRef = dbot.cleanNick(thisRef.replace(/^~~/,'').replace(/~~$/,'').trim());
                if(cleanRef === '-nicks-') {
                    var randomNick = dbot.api.users.getRandomChannelUser(server, channel);
                    quoteString = quoteString.replace("~~" + cleanRef + "~~", randomNick);
                    quoteTree.pop();
                } else if(_.has(this.quotes, cleanRef)) {
                    quoteTree.push(key);
                    quoteString = quoteString.replace("~~" + cleanRef + "~~", 
                            this.internalAPI.interpolatedQuote(server, channel, cleanRef, quoteTree.slice()));
                    quoteTree.pop();
                }
            }

            return quoteString;
        }.bind(this),
Example #5
0
            }, function(error, response, body) {
                if(_.isObject(body) && _.has(body, 'recipes') && body.recipes.length > 0) {
                    var num = _.random(0, body.recipes.length - 1),
                        recipe = body.recipes[num];

                    event.reply(event.user + ': You should make ' + recipe.title + '. See: ' + recipe.source_url);
                }
            }.bind(this));
Example #6
0
 this.api.getQuoteCategory(key, function(category) {
     if(category) {
         var quotes = category.quotes;
         var index = _.random(0, quotes.length - 1); 
         callback(quotes[index]);
     } else {
         callback(false);
     }
 });
Example #7
0
 }, function(err, response, body) {
     if(!_.isUndefined(body) && body.data && body.data[0] != undefined) {
         var num = _.random(0, body.data.length - 1);
         this.api.getGalleryInfo(body.data[num].id, function(gal) {
             event.reply('['+this.config.outputPrefix + '] ' + local + ': ' + gal.data.link + ' [' + 
                 this.internalAPI.galleryInfoString(gal) + ']');
         }.bind(this));
     }
 }.bind(this));
Example #8
0
 '~rq': function(event) {
     if(_.keys(quotes).length > 0) {
         var category = _.keys(quotes)[_.random(0, _.size(quotes) -1)];
         event.reply(category + ': ' +
         this.internalAPI.interpolatedQuote(event.server, event.channel.name, event.user, category));
     } else {
         event.reply(dbot.t('no_results'));
     }
 },
Example #9
0
File: api.js Project: treesus/dbot
 'getRandomChannelUser': function(server, cName, callback) {
     if(_.has(dbot.instance.connections[server].channels, cName)) {
         var nicks = _.keys(dbot.instance.connections[server].channels[cName].nicks);
         var randomUser = nicks[_.random(0, nicks.length -1)]
         callback(randomUser);
     } else {
         callback(false);
     }
 },
Example #10
0
 }, function(err, res, body) {
     if(_.has(body, 'toptracks') && _.has(body.toptracks, 'track')) {
         var tracks = body.toptracks.track;
             choice = _.random(0, tracks.length - 1),
             track = tracks[choice];
         callback(null, track);
     } else {
         callback('idk', body);
     }
 });
Example #11
0
 }, function(err) {
     if(!err && channel) {
         if(!_.isUndefined(channel.users)) {
             var randomUser = channel.users[_.random(0, channel.users.length - 1)];
             this.api.getUser(randomUser, callback);
         } else {
             callback(false);
         }
     } 
 }.bind(this));
Example #12
0
    handler: function(info){
      //等待下一次回复
      var num = Number(info.param[1]) || _.random(1,9);

      verbose('answer is: ' + num);

      info.session.guess_answer = num;

      info.wait('wait_guess');
      return '玩玩猜数字的游戏吧, 1~9,选一个';
    }
Example #13
0
 }, function(err, response, body) {
     if(!_.isUndefined(body) && body.data && body.data[0] != undefined) {
         var num = _.random(0, body.data.length - 1);
         this.api.getGalleryInfo(body.data[num].id, function(gal) {
             event.reply(dbot.t('imgurinfo',  { 
                 'info': this.internalAPI.galleryInfoString(gal)
             }) + ' - ' + gal.data.link);
         }.bind(this));
     } else {
         event.reply(dbot.t('imgur_noresults'));
     }
 }.bind(this));
Example #14
0
            }, function(error, response, body) {
                if(_.isObject(body) && _.has(body, 'recipes') && body.recipes.length > 0) {
                    var num = _.random(0, body.recipes.length - 1),
                        recipe = body.recipes[num];

                    event.reply(dbot.t('recipe', {
                        'title': recipe.title,
                        'link': recipe.source_url 
                    }));
                } else {
                    event.reply(dbot.t('no_recipe'));
                }
            }.bind(this));
Example #15
0
Action.exec = function(info, action, cb){
  action = Action.is(action) ? action : new Action(action)

  log('action [%s] exec', action.name);

  var fn = action.handler;
  
  //为空则跳过
  if(_.isNull(fn) || _.isUndefined(fn)){
    warn('handler is null')
    return cb();
  }

  //为数组则直接返回随机的一个子元素
  if( _.isArray(fn) && fn.length>=1){
    log('handler is array: [%s], choose one', fn)
    fn = fn[_.random(0,fn.length-1)];
  }

  //为字符串则直接返回
  if( _.isString(fn)){
    log('handler is string: [%s]', fn)
    if(info.query){
      fn = Utils.formatStr(fn, info.query)
      log('replace with capture group: %s -> %s', info.query, fn)
    }
    return cb(null, fn);
  }

  //为函数时
  if(_.isFunction(fn)){
    fn = fn || action
    log('handler is function, length=%d', fn.length)
    //只定义了一个参数时直接调用, 否则通过回调
    if(fn.length <= 2){
      //返回false则执行下一个action
      return cb(null, fn(info, action)); 
    }else{
      return fn(info, action, cb);
    }
  }

  log('handler is nth, %s', action)
  return cb();
};
Example #16
0
Rule.exec = function(info, rule, cb){
  rule = Rule.is(rule) ? rule : new Rule(rule);

  log('rule [%s] exec', rule.name);

  var fn = rule.handler;
  
  //为空则跳过
  if(!fn) {
    warn('handler not defined.');
    return cb();
  }

  //为数组则直接返回随机的一个子元素
  if ( _.isArray(fn) && fn.length >= 1) {
    log('handler is array: [%s], choose one', fn);
    fn = fn[_.random(0, fn.length-1)];
  }

  //为字符串则直接返回
  if (_.isString(fn)) {
    log('handler is string: [%s]', fn);
    if (info.param) {
      fn = utils.formatStr(fn, info.param);
      log('format message with captured group: %s -> %s', info.param, fn);
    }
    return cb(null, fn);
  }

  //为函数时
  if (_.isFunction(fn)) {
    fn = fn || rule;
    log('handler is function, length=%d', fn.length);
    //只定义了一个参数时直接调用, 否则通过回调
    if (fn.length < 2) {
      //返回false则执行下一个rule
      return cb(null, fn.call(rule, info));
    } else {
      return fn.call(rule, info, cb);
    }
  }

  log('handler is nth, %s', rule);
  return cb();
};
Example #17
0
        'getRandomImage': function(callback) {
            var random = function(len) {
                var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
                return len ? chars.charAt(~~(Math.random()*chars.length)) + random(len-1) : "";
            };

            var ext = [ 'gif', 'png', 'jpg' ];
            var testSlug = random(5);
            var testUrl = 'http://puu.sh/' +
                testSlug +
                '.' + ext[_.random(0, ext.length - 1)];

            request(testUrl, function(error, response, body) {
                if(!error && response.statusCode === 200 && body.length > 500) {
                    callback(testUrl);
                } else {
                    this.api.getRandomImage(callback);
                }
            }.bind(this));
        }
Example #18
0
    this.listener = function(event) {
        var match = event.message.match(new RegExp(dbot.config.name + ': what should i (have|eat|make)\\??( for (dinner|lunch|breakfast))?\\??', 'i'));
        if(match) {
            var page = _.random(0, 200);
            request.get('http://food2fork.com/api/search', {
                'qs': { 
                    'key': this.config.api_key,
                    'page': page
                },
                'json': true
            }, function(error, response, body) {
                if(_.isObject(body) && _.has(body, 'recipes') && body.recipes.length > 0) {
                    var num = _.random(0, body.recipes.length - 1),
                        recipe = body.recipes[num];

                    event.reply(event.user + ': You should make ' + recipe.title + '. See: ' + recipe.source_url);
                }
            }.bind(this));
        }
    }.bind(this);
Example #19
0
 'getRandomImage': function(callback) {
     var random = function(len) {
         var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
         return len ? chars.charAt(~~(Math.random()*chars.length)) + random(len-1) : "";
     };
     
     var ext = [ 'gif', 'png', 'jpg' ];
     var testSlug = random(5);
     var testUrl = 'http://i.imgur.com/' + 
         testSlug +
         '.' + ext[_.random(0, ext.length - 1)];
     this.db.totalHttpRequests += 1;
     var image = request(testUrl, function(error, response, body) {
         // 492 is body.length of a removed image
         if(!error && response.statusCode == 200 && body.length != 492) {
             this.db.totalImages += 1;
             callback(testUrl, testSlug);
         } else {
             this.api.getRandomImage(callback);
         }
     }.bind(this)); 
 },
Example #20
0
        'getRandomImage': function(callback) {
            var random = function(len) {
                var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
                return len ? chars.charAt(~~(Math.random()*chars.length)) + random(len-1) : "";
            };
            
            var ext = [ 'gif', 'png', 'jpg' ];
            var testSlug = random(5);
            var testUrl = 'http://i.imgur.com/' + 
                testSlug +
                '.' + ext[_.random(0, ext.length - 1)],
		fbman = false;
            dbot.db.imgur.totalHttpRequests += 1;

            request(testUrl, function(error, response, body) {
                // 492 is body.length of a removed image
                if(!error && response.statusCode == 200 && body.length != 492) {
                    dbot.db.imgur.totalImages += 1;
                    var hash = crypto.createHash('md5').update(body).digest("hex");
                    if(_.has(dbot.modules, 'quotes')){
                        // autoadd: {"abcdef": "facebookman"}
                        if(_.has(dbot.config.modules.imgur.autoadd,hash)){
				fbman = true;
                            var category = this.config.autoadd[hash];
                            if (_.contains(category, testUrl)){
                                // there's probably less than 62^5 chance of this happening
                            } else {
                                dbot.api.quotes.addQuote(category, testUrl,
                                    dbot.config.name, function() { });
                            }
                        }
                    }
                    callback(testUrl, testSlug, hash, fbman);
                } else {
                    this.api.getRandomImage(callback);
                }
            }.bind(this));
        },
Example #21
0
                setTimeout(function() {
                    var puzzle = this.puzzles[_.random(0, this.puzzles.length -1)],
                        solutions = _.filter(this.dict, function(word) {
                            if(puzzle.type === 'start') {
                                return word.match('^' + puzzle.part);
                            } else if(puzzle.type === 'end') {
                                return word.match(puzzle.part + '$');
                            }
                        });

                    this.game = {
                        'puzzle': puzzle,
                        'solutions': solutions,
                        'channel': event.channel.name,
                        'found': [],
                        'scores': {}
                    };

                    if(puzzle.type === 'start') {
                        event.reply('NAME ALL THE WORDS YOU CAN THINK OF THAT START WITH ' + puzzle.part);
                    } else if(puzzle.type === 'end') {
                        event.reply('NAME ALL THE WORDS YOU CAN THINK OF THAT END IN ' + puzzle.part);
                    }

                    setTimeout(function() {
                        if(!_.isNull(this.game)) {
                            if(this.game.found.length > 0) {
                                var winner = _.invert(this.game.scores)[_.max(this.game.scores)];
                                event.reply('GAME OVER. THE WINNER IS ' + winner.toUpperCase() + ' WITH ' + this.game.scores[winner]);
                                event.reply(this.game.solutions.length - this.game.found.length + ' solutions remained.'); 
                            } else {
                                event.reply('NO SOLUTIONS FOUND. YOU ARE ALL RUBBISH.');
                            }
                            this.game = null;
                        }
                    }.bind(this), 40000);
                }.bind(this), 5000);
Example #22
0
 _.times(5, function() {
     var choice = _.random(0, common.length - 1);
     if(!_.include(examples, common[choice])) {
         examples.push(common[choice]);
     }
 });
Example #23
0
/**
 * Created by tsq on 14-8-14.
 */
var _ = require("underscore")._;

//noConflict: 把_变量的控制权预留给它原有的所有,返回一个引用给underscore对象
// random _.random(min, max)
// 返回一个介于 min 和 max 之间(包含)的整数. 如果直传一个参数, 将会返回一个介于 0 和参数之间的整数
console.log(_.random(0, 100));

//mixin_.mixin(object) 
//允许您继承 Underscore 并加入您自己的功能函数. 传参 {名称: 函数} 来定义您的函数, 加入到 Underscore 对象中, 就像面向对象的封装.
_.mixin({
    capitalize: function(string, age){
        return string + age
    }
});
console.log(_('faf', 8).capitalize());

//unqueId 产生一个全局唯一id,以参数作为前缀
console.log(_.uniqueId('contact_'));
console.log(_.uniqueId('contact_'));
console.log(_.uniqueId('contact_'));
console.log(_.uniqueId('contact_'));

//escape,unescape:转义HTML字符串,反转到HTML字符串

console.log(_.escape('Curly, Larry & Moe'));
//=> Curly, Larry &amp; Moe
console.log(_.unescape('Curly, Larry &amp; Moe'));
//=> Curly, Larry & Moe
Example #24
0
 '~rq': function(event) {
     var category = _.keys(quotes)[_.random(0, _.size(quotes) -1)];
     event.reply(category + ': ' + this.internalAPI.interpolatedQuote(event.server, event.channel.name, category));
 },
Example #25
0
    random: function(req, res){
        var url = [
            'http://www.22mm.cc/mm/qingliang/',
            'http://www.22mm.cc/mm/jingyan/',
            'http://www.22mm.cc/mm/bagua/',
            'http://www.22mm.cc/mm/suren/'
        ];
        var r1 = _.random(0, 3);
        var r2 = _.random(2, 25);
        var u = url[r1] + 'index_' + r2 + '.html';
        request(u, function (error, re, body) {
            if (!error && re.statusCode == 200) {
                var $ = cheerio.load(body);
                var li = $('li');
//                console.log("li.length:", li.length);
                var arr = [];
                li.each(function (index, ele) {
                    var text = $(this).text();
                    var src = $('img', this).attr('src');
                    var href = $('a', this).attr('href');
//                    console.log("href:", href);
                    var obj = {
                        src: src,
                        href: href,
                        text: text
                    };
                    arr.push(obj);
                });

//                res.json( _.last(arr, 32));
                var max = arr.length -1;
                var randomIndex = _.random(0, max);
                var firstUrl = 'http://www.22mm.cc' + arr[randomIndex].href;
//                var firstUrl = 'http://www.22mm.cc/mm/qingliang/aabage_bceaib.html';
                request(firstUrl, function (error, re, body) {
                    if (!error && re.statusCode == 200) {
//        console.log("body:", body);
                        var $ = cheerio.load(body);
                        var div = $('#box-inner');
                        var strong = $('.diblcok').text();
                        var c = strong.indexOf('/');
                        strong = strong.substr(c+1);
//                        console.log("strong", strong);
                        var script = div.children()[2];
                        var src = $(script).text();
//        console.log("src", src);
                        var a = src.lastIndexOf('=');
                        var b = src.lastIndexOf('\"');

                        var s = src.substring(a+2, b);
                        var s = s.replace('big', 'pic');
                        var total = parseInt(strong) + 1;
//                        console.log("total", total);
                        var firstPic = s;
//                        console.log("firstPic", firstPic);
                        firstUrl = firstUrl.replace('.html', '');
//                        console.log("firstUrl", firstUrl);
                        var array = [];
                        for (var v = 2; v < total; v++) {
                            array.push(firstUrl + "-" + v + ".html");
                        }
//                        console.log("array", array);
                        async.map(array, function(url, callback) {
//                            console.log("url", url);
                            request(url, function (error, res, body) {
                                if (!error && res.statusCode == 200) {
                                    var $ = cheerio.load(body);
                                    var div = $('#box-inner');
                                    var strong = $('.diblcok').text();
                                    var c = strong.indexOf('/');
                                    strong = strong.substr(c+1);
                                    var script = div.children()[2];
                                    var src = $(script).text();
                                    var a = src.lastIndexOf('=');
                                    var b = src.lastIndexOf('\"');
                                    var s = src.substring(a+2, b);
                                    var s = s.replace('big', 'pic');
                                    var total = strong;
                                    callback(null, s);
                                }
                            });
                        }, function(err,results) {
//                            console.log("err", err);
//                            console.log("results", results);
                            results.push(firstPic);
                            res.json(results);

                        });


                    }
                })
            }
        })
    }
Example #26
0
 }, function(err) {
     var cIndex = _.random(0, _.size(categories) -1); 
     var qIndex = _.random(0, categories[cIndex].quotes.length - 1); 
     event.reply(categories[cIndex].name + ': ' + categories[cIndex].quotes[qIndex]);
 });