1 | 'use strict';
|
2 |
|
3 | require("core-js/modules/es.array.filter.js");
|
4 | require("core-js/modules/es.array.index-of.js");
|
5 | require("core-js/modules/es.array.map.js");
|
6 | require("core-js/modules/es.array.slice.js");
|
7 | require("core-js/modules/es.array.splice.js");
|
8 | require("core-js/modules/es.object.to-string.js");
|
9 | var _ = {
|
10 | map: require('lodash/map')
|
11 | };
|
12 | var Helper = {
|
13 | parseMask: parseMask,
|
14 | parseWhoFlags: parseWhoFlags,
|
15 | splitOnce: splitOnce
|
16 | };
|
17 | module.exports = Helper;
|
18 | function parseMask(mask) {
|
19 | var nick = '';
|
20 | var user = '';
|
21 | var host = '';
|
22 | var sep1 = mask.indexOf('!');
|
23 | var sep2 = mask.indexOf('@');
|
24 | if (sep1 === -1 && sep2 === -1) {
|
25 |
|
26 | if (mask.indexOf('.') > -1) {
|
27 | host = mask;
|
28 | } else {
|
29 | nick = mask;
|
30 | }
|
31 | } else if (sep1 === -1 && sep2 !== -1) {
|
32 |
|
33 | nick = mask.substring(0, sep2);
|
34 | host = mask.substring(sep2 + 1);
|
35 | } else if (sep1 !== -1 && sep2 === -1) {
|
36 |
|
37 | nick = mask.substring(0, sep1);
|
38 | user = mask.substring(sep1 + 1);
|
39 | } else {
|
40 |
|
41 | nick = mask.substring(0, sep1);
|
42 | user = mask.substring(sep1 + 1, sep2);
|
43 | host = mask.substring(sep2 + 1);
|
44 | }
|
45 | return {
|
46 | nick: nick,
|
47 | user: user,
|
48 | host: host
|
49 | };
|
50 | }
|
51 | function parseWhoFlags(flagsParam, networkOptions) {
|
52 |
|
53 |
|
54 |
|
55 | var unparsedFlags = flagsParam.split('');
|
56 |
|
57 |
|
58 | var parsedFlags = {};
|
59 |
|
60 |
|
61 | var hasThenRemove = function hasThenRemove(flag) {
|
62 | var flagIdx = unparsedFlags.indexOf(flag);
|
63 | if (flagIdx > -1) {
|
64 | unparsedFlags.splice(flagIdx, 1);
|
65 | return true;
|
66 | }
|
67 | return false;
|
68 | };
|
69 |
|
70 |
|
71 | parsedFlags.away = !hasThenRemove('H');
|
72 | parsedFlags.away = hasThenRemove('G');
|
73 |
|
74 |
|
75 | var bot_mode_token = networkOptions.BOT;
|
76 | if (bot_mode_token) {
|
77 | parsedFlags.bot = hasThenRemove(bot_mode_token);
|
78 | }
|
79 |
|
80 |
|
81 | parsedFlags.registered = hasThenRemove('r');
|
82 | parsedFlags.operator = hasThenRemove('*');
|
83 | parsedFlags.secure = hasThenRemove('s');
|
84 |
|
85 |
|
86 | var chan_prefixes = networkOptions.PREFIX.filter(function (f) {
|
87 | return hasThenRemove(f.symbol);
|
88 | });
|
89 |
|
90 | parsedFlags.channel_modes = _.map(chan_prefixes, 'mode');
|
91 | return {
|
92 | parsedFlags: parsedFlags,
|
93 | unparsedFlags: unparsedFlags
|
94 | };
|
95 | }
|
96 | function splitOnce(input, separator) {
|
97 | if (typeof input !== 'string' || typeof separator !== 'string') {
|
98 | throw new TypeError('input and separator must be strings');
|
99 | }
|
100 | var splitPos;
|
101 | if (separator === '') {
|
102 |
|
103 |
|
104 |
|
105 | splitPos = input.indexOf(separator, 1);
|
106 | if (splitPos === input.length) {
|
107 |
|
108 | splitPos = -1;
|
109 | }
|
110 | } else {
|
111 |
|
112 | splitPos = input.indexOf(separator);
|
113 | }
|
114 |
|
115 |
|
116 | if (splitPos < 0) {
|
117 | return [input];
|
118 | }
|
119 |
|
120 |
|
121 | return [input.slice(0, splitPos), input.slice(splitPos + separator.length)];
|
122 | } |
\ | No newline at end of file |