summaryrefslogtreecommitdiff
path: root/handlers.js
blob: 6769b53f2d5bcfddd2866d01db2b702c0398bcd7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
var linkify = require("linkifyjs");
var linkifyHtml = require('linkifyjs/html');
var util = require("./util.js")

var numChans = 1;
var channels;
var client;
var myNick = ""
module.exports.setChannels = function(myChannels) {
  channels = myChannels;
}
module.exports.handleCommands = function(myClient) {
    client = myClient;
    client.on('registered', function(event) {
        channels.forEach(function(channelStr) {
          joinChannel(channelStr, true);
        });
    });
    client.on('message', function(event) {
      receiveMsg(event.target, event.nick, event.message)
    })

    client.on('userlist', function(event) {

        if($(".ui.tab[data-tab='"+channel+"']").length == 0) {
          joinChannel(channel, false)
        }
        event.users.forEach(function (user) {
          var nick = user.nick
          var mode = ""
          user.modes.forEach(function (modeChar) {
            if (modeChar === "o") {
              mode = "@"
            } else if (modeChar === "h") {
              mode = "%"
            } else if (modeChar === "v") {
              mode = "+"
            }
          })
          if($(".ui.users[data-tab='"+channel+"'] [data-nick="+nick+"]").length == 0) {
            $(".ui.users[data-tab='"+channel+"']").append("<div class=item data-nick="+nick+">"+mode+nick+"</div>")
          }
        })
    });

}

function joinChannel(channel, sendJoin) {

    var channelObj = client.channel(channel);
  if (sendJoin) {
    channelObj.join();
    channelObj.say("beep");
  }
  chanId = $(".active.chat").attr("data-id")

  $(".active").removeClass("active");

  $(".ui.menu").append("<a class='active item' data-id='"+numChans+"' data-tab='"+channel+"'>"+channel+"</a>");
  $("#chan-container").append("<div class='ui active tab' data-id='"+numChans+"' data-tab='"+channel+"'></div>");

  var chanTab = $("[data-tab='"+ channel +"'].tab");

  chanTab.append("<div class='ui selection list users' data-id='"+numChans+"' data-tab='"+channel+"'></div>");
  chanTab.append("<div class='ui segment chat' data-id='"+numChans+"' data-tab='"+channel+"'></div>");
  chanTab.append("<div class='ui topic' data-id='"+numChans+"' data-tab='"+channel+"'></div>");

  $('.menu .item').tab({history:false});

  numChans++;
}

function receiveMsg(target, from, message) {
  // message = message.autoLink( {
  //   callback: function(url) {
  //     return /\.(gif|png|jpe?g)$/i.test(url) ? '<img src="' + url + '">' : null;
  //   },
  //   target: "_blank"
  // });
  // console.log(message.autoLink());

  console.log(from + ' => '+ target +': ' + message);

  if (target === client.user.nick) {
      target = from
  }
  var chatTab = $("[data-tab='"+ target +"'].chat");

  if (chatTab.length == 0) {
      $(".ui.menu").append("<a class='item' data-id='"+numChans+"' data-tab='"+target+"'>"+target+"</a>");
      $("#chan-container").append("<div class='ui tab' data-id='"+numChans+"' data-tab='"+target+"'></div>");
      chanTab = $("[data-tab="+target+"].tab");
      chanTab.append("<div class='ui segment chat' data-id='"+numChans+"' data-tab='"+target+"'></div>");

      $('.menu .item').tab({history:false});
      numChans++;
      chatTab = $("[data-tab="+ target +"].chat");
  }

  message = linkifyHtml(message);

  chatTab.append("<p class='chat-line'>&lt;" + from + "&gt; " + message +"</p>");
  var imgMatch = message.match(/[a-z0-9\-]+[\.:]\S+\.(gif|png|jpe?g|bmp)/);
  var vidMatch = message.match(/[a-z0-9\-]+[\.:]\S+\.(webm|mp4)/);
  var audioMatch = message.match(/[a-z0-9\-]+[\.:]\S+\.(mp3|wav|ogg)/);
  var youtubeMatch = message.match(/(https?\:\/\/)?(www\.)?(youtube\.com|youtu\.be)\/(watch\?v=)?[a-z0-9A-Z_\-]+/);
  if (imgMatch != null && imgMatch.length > 0) {
    var image = util.imagify(imgMatch[0],target);
    chatTab.append("<p class=chat-line>"+image+"</p>");
  }
  if (vidMatch != null && vidMatch.length > 0) {
    chatTab.append("<p class=chat-line><video controls><source src="+vidMatch[0]+"></video></p>");
  }
  if (audioMatch != null && audioMatch.length > 0) {
    chatTab.append("<p class=chat-line><audio controls><source src="+audioMatch[0]+"></audio></p>");
  }
  if (youtubeMatch != null && youtubeMatch.length > 0) {
    youtubeParts = youtubeMatch[0].split("/");
    youtubeId = youtubeParts[youtubeParts.length-1];
    youtubeId = youtubeId.replace("watch?v=","");
    chatTab.append("<p class=chat-line><iframe width='480' height='270' src='https://www.youtube.com/embed/"+youtubeId+"' frameborder='0' allowfullscreen></iframe></p>");
  }

  chatTab.scrollTop(chatTab.prop("scrollHeight"));
}