mchat 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/Gemfile +16 -0
- data/Gemfile.lock +34 -0
- data/LICENSE.txt +21 -0
- data/README.md +115 -0
- data/Rakefile +21 -0
- data/assets/preview.png +0 -0
- data/bin/console +15 -0
- data/bin/setup +8 -0
- data/exe/mchat +62 -0
- data/exe/mchat_repl +8 -0
- data/exe/mchat_timeline +8 -0
- data/exe/mchat_uninstall +8 -0
- data/lib/mchat/api.rb +131 -0
- data/lib/mchat/command.rb +29 -0
- data/lib/mchat/commands/bossmode.rb +34 -0
- data/lib/mchat/commands/channel.rb +87 -0
- data/lib/mchat/commands/channel_new.rb +61 -0
- data/lib/mchat/commands/clear.rb +34 -0
- data/lib/mchat/commands/default.rb +39 -0
- data/lib/mchat/commands/guide.rb +33 -0
- data/lib/mchat/commands/help.rb +55 -0
- data/lib/mchat/commands/join.rb +47 -0
- data/lib/mchat/commands/leave.rb +43 -0
- data/lib/mchat/commands/message.rb +53 -0
- data/lib/mchat/commands/name.rb +47 -0
- data/lib/mchat/commands/quit.rb +38 -0
- data/lib/mchat/comps/font.rb +38 -0
- data/lib/mchat/comps/message.rb +18 -0
- data/lib/mchat/comps/timeline_api.rb +17 -0
- data/lib/mchat/comps/user_config.rb +55 -0
- data/lib/mchat/comps/welcome.rb +23 -0
- data/lib/mchat/fake_log.txt +29 -0
- data/lib/mchat/logger.rb +21 -0
- data/lib/mchat/repl.rb +245 -0
- data/lib/mchat/store.rb +94 -0
- data/lib/mchat/timeline.rb +108 -0
- data/lib/mchat/version.rb +5 -0
- data/lib/mchat.rb +12 -0
- data/sig/mchat.rbs +4 -0
- metadata +89 -0
@@ -0,0 +1,34 @@
|
|
1
|
+
module Mchat
|
2
|
+
module Command
|
3
|
+
# Command Clear
|
4
|
+
module Clear
|
5
|
+
def self.configure(repl)
|
6
|
+
CommandConditions.push({
|
7
|
+
name: 'clear',
|
8
|
+
description: "c[lear]\t\tclean mchat screen",
|
9
|
+
help_condition: ['clear','c'],
|
10
|
+
help_doc: :clear_help_doc,
|
11
|
+
command_condition: ['/clear', '/c'],
|
12
|
+
command_run: :clear_command_run
|
13
|
+
})
|
14
|
+
end
|
15
|
+
module InstanceMethods
|
16
|
+
def clear_help_doc
|
17
|
+
_puts %Q(
|
18
|
+
#{"Help: Clear".style.bold}
|
19
|
+
|
20
|
+
command: /clear
|
21
|
+
explain: clear chat screen.
|
22
|
+
|
23
|
+
)
|
24
|
+
end
|
25
|
+
|
26
|
+
def clear_command_run(repl = nil)
|
27
|
+
timeline_clear
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
mount_command :clear, Clear
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Mchat
|
2
|
+
module Command
|
3
|
+
module Default
|
4
|
+
CommandConditions.push({
|
5
|
+
name: 'default',
|
6
|
+
description: "default\t\tdefault model, send message",
|
7
|
+
help_condition: ['default'],
|
8
|
+
help_doc: :default_help_doc,
|
9
|
+
command_condition: [/([^\s].*)/],
|
10
|
+
command_run: :default_command_run
|
11
|
+
})
|
12
|
+
module InstanceMethods
|
13
|
+
def default_help_doc
|
14
|
+
_puts %Q(
|
15
|
+
#{"Help: Default Mode".style.bold}
|
16
|
+
|
17
|
+
if you have joined `channel`
|
18
|
+
and you have a `name` in channel
|
19
|
+
|
20
|
+
you can send message without /m command, that's default mode.
|
21
|
+
|
22
|
+
)
|
23
|
+
end
|
24
|
+
|
25
|
+
def default_command_run(words)
|
26
|
+
if _current_channel && _current_nickname && words
|
27
|
+
return message_command_run(words)
|
28
|
+
else
|
29
|
+
_puts "Oops.. This is `Default Mode`:".style.warn
|
30
|
+
_puts "if you join channel and have name, it will send message.".style.warn
|
31
|
+
_puts "Do nothing. maybe you need join channel or use commands. try /h for more.".style.warn
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
mount_command :default, Default
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Mchat
|
2
|
+
module Command
|
3
|
+
module Guide
|
4
|
+
CommandConditions.push({
|
5
|
+
name: 'guide',
|
6
|
+
description: "guide\t\tguide & HOWTO",
|
7
|
+
help_condition: ['guide'],
|
8
|
+
help_doc: :guide_help_doc,
|
9
|
+
command_condition: ['/guide'],
|
10
|
+
command_run: :guide_command_run
|
11
|
+
})
|
12
|
+
|
13
|
+
module InstanceMethods
|
14
|
+
def guide_help_doc
|
15
|
+
_puts %Q(
|
16
|
+
#{"Help: Guide".style.bold}
|
17
|
+
|
18
|
+
Mchat is a tiny chat software.
|
19
|
+
Howto:
|
20
|
+
.....
|
21
|
+
|
22
|
+
)
|
23
|
+
end
|
24
|
+
|
25
|
+
def guide_command_run
|
26
|
+
_puts "TODO run command guide"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
mount_command :guide, Guide
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module Mchat
|
2
|
+
module Command
|
3
|
+
module Help
|
4
|
+
def self.configure(repl)
|
5
|
+
CommandConditions.push({
|
6
|
+
name: 'help',
|
7
|
+
description: "h[elp]\t\tfind help",
|
8
|
+
help_condition: ['help','h'],
|
9
|
+
help_doc: :help_help_doc,
|
10
|
+
command_condition: ['/help', /\/help (.*)/, '/h', /\/h (.*)/],
|
11
|
+
command_run: :help_command_run
|
12
|
+
})
|
13
|
+
end
|
14
|
+
module InstanceMethods
|
15
|
+
def help_help_doc
|
16
|
+
cmd_list = ""
|
17
|
+
CommandConditions.each do |c|
|
18
|
+
cmd_list << "#{c[:description]}\n"
|
19
|
+
end
|
20
|
+
|
21
|
+
_puts %Q(
|
22
|
+
#{"Help: Index".style.bold}
|
23
|
+
|
24
|
+
Choose subject to help:
|
25
|
+
|
26
|
+
#{cmd_list}
|
27
|
+
|
28
|
+
e.g:
|
29
|
+
type `/h guide` you will find guide guide.
|
30
|
+
)
|
31
|
+
end
|
32
|
+
|
33
|
+
def help_command_run(subject = nil)
|
34
|
+
if !subject
|
35
|
+
return help_help_doc
|
36
|
+
end
|
37
|
+
subject = subject && subject.strip
|
38
|
+
catch :halt do
|
39
|
+
CommandConditions.each do |command|
|
40
|
+
help_condition = command[:help_condition]
|
41
|
+
help_condition.each do |hc|
|
42
|
+
if hc.match(subject)
|
43
|
+
catch_subject = $1 ? $1 : nil
|
44
|
+
_dispatch(command[:help_doc], catch_subject)
|
45
|
+
throw :halt
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
mount_command :help, Help
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Mchat
|
2
|
+
module Command
|
3
|
+
# Command Join
|
4
|
+
module Join
|
5
|
+
CommandConditions.push({
|
6
|
+
name: 'join',
|
7
|
+
description: "j[oin]\t\tjoin the channel",
|
8
|
+
help_condition: ['join','j'],
|
9
|
+
help_doc: :join_help_doc,
|
10
|
+
command_condition: ['/join', /\/join (.*)/, '/j', /\/j (.*)/],
|
11
|
+
command_run: :join_command_run
|
12
|
+
})
|
13
|
+
|
14
|
+
module InstanceMethods
|
15
|
+
def join_help_doc
|
16
|
+
_puts %Q(
|
17
|
+
#{"Help: Join".style.bold}
|
18
|
+
|
19
|
+
command: /join <channel_name>
|
20
|
+
explain: join the channel
|
21
|
+
|
22
|
+
)
|
23
|
+
end
|
24
|
+
|
25
|
+
def join_command_run(channel_name = nil)
|
26
|
+
if !channel_name
|
27
|
+
_puts "channel_name missing !\n type`/join <channel_name>`".style.warn
|
28
|
+
else
|
29
|
+
# TODO channel password
|
30
|
+
# TODO channel 白名单
|
31
|
+
resp = _api.get_channels
|
32
|
+
all_channels = resp.fetch("data")
|
33
|
+
|
34
|
+
if all_channels.any? channel_name
|
35
|
+
_mchat_action("join channel: #{channel_name}")
|
36
|
+
_set_current_channel channel_name
|
37
|
+
fetch_channel_task
|
38
|
+
else
|
39
|
+
_puts "Channel: #{channel_name} not found!".style.warn
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
mount_command :join, Join
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Mchat
|
2
|
+
module Command
|
3
|
+
# Command Join
|
4
|
+
module Leave
|
5
|
+
def self.configure(repl)
|
6
|
+
CommandConditions.push({
|
7
|
+
name: 'leave',
|
8
|
+
description: "l[eave]]\tleave channel",
|
9
|
+
help_condition: ['leave','l'],
|
10
|
+
help_doc: :leave_help_doc,
|
11
|
+
command_condition: ['/leave', /\/leave (.*)/, '/l', /\/l (.*)/],
|
12
|
+
command_run: :leave_command_run
|
13
|
+
})
|
14
|
+
end
|
15
|
+
module InstanceMethods
|
16
|
+
def leave_help_doc
|
17
|
+
_puts %Q(
|
18
|
+
#{"Help: Leave".style.bold}
|
19
|
+
|
20
|
+
command: /leave
|
21
|
+
explain: leave channel and delete your name.
|
22
|
+
)
|
23
|
+
end
|
24
|
+
|
25
|
+
def leave_command_run
|
26
|
+
if _current_nickname
|
27
|
+
resp = _api.leave_channel( _current_channel , _current_nickname)
|
28
|
+
code = resp.fetch("code")
|
29
|
+
if code == StatusCode::Success
|
30
|
+
_puts "#{_current_nickname} leave success.".style.primary
|
31
|
+
_set_current_nickname nil
|
32
|
+
else
|
33
|
+
_puts "leave request connect fail. try again.".style.warn
|
34
|
+
end
|
35
|
+
else
|
36
|
+
_puts "You use leave".style.warn
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
mount_command :leave, Leave
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module Mchat
|
2
|
+
module Command
|
3
|
+
# Command Message
|
4
|
+
module Message
|
5
|
+
def self.configure(repl)
|
6
|
+
CommandConditions.push({
|
7
|
+
name: 'message',
|
8
|
+
description: "m[essage]\tsend message in channel",
|
9
|
+
help_condition: ['message','m'],
|
10
|
+
help_doc: :message_help_doc,
|
11
|
+
command_condition: ['/message', /\/message (.*)/, '/m', /\/m (.*)/],
|
12
|
+
command_run: :message_command_run
|
13
|
+
})
|
14
|
+
end
|
15
|
+
module InstanceMethods
|
16
|
+
def message_help_doc
|
17
|
+
_puts %Q(
|
18
|
+
#{"Help: Message".style.bold}
|
19
|
+
|
20
|
+
command: /message <message>
|
21
|
+
explain: send your message
|
22
|
+
|
23
|
+
)
|
24
|
+
end
|
25
|
+
|
26
|
+
def message_command_run(words)
|
27
|
+
if !_current_channel
|
28
|
+
_puts "You are not in channel, so you cannot message.".style.warn
|
29
|
+
_puts "type `/n[ame] <your name>` before chat".style.warn
|
30
|
+
elsif !_current_nickname
|
31
|
+
_puts "You must register a name to this channel".style.warn
|
32
|
+
_puts "type `/n[ame] <your name>` before chat".style.warn
|
33
|
+
elsif _current_channel && _current_nickname
|
34
|
+
resp = _api.create_channel_message(_current_channel, _current_nickname, words)
|
35
|
+
code = resp.fetch("code")
|
36
|
+
|
37
|
+
if code != StatusCode::Success
|
38
|
+
_puts warn "Send Message Fail:"
|
39
|
+
_puts "quote----"
|
40
|
+
_puts "#{words}"
|
41
|
+
_puts "---------"
|
42
|
+
else
|
43
|
+
_puts "send success"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
# TODO send to server
|
47
|
+
# _puts2("#{Message.new(words).display}")
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
mount_command :message, Message
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Mchat
|
2
|
+
module Command
|
3
|
+
# Command Join
|
4
|
+
module Name
|
5
|
+
def self.configure(repl)
|
6
|
+
CommandConditions.push({
|
7
|
+
name: 'name',
|
8
|
+
description: "n[ame]\t\tset name in channel",
|
9
|
+
help_condition: ['name','n'],
|
10
|
+
help_doc: :name_help_doc,
|
11
|
+
command_condition: ['/name', /\/name (.*)/, '/n', /\/n (.*)/],
|
12
|
+
command_run: :name_command_run
|
13
|
+
})
|
14
|
+
end
|
15
|
+
module InstanceMethods
|
16
|
+
def name_help_doc
|
17
|
+
_puts %Q(
|
18
|
+
#{"Help: Name".style.bold}
|
19
|
+
|
20
|
+
command: /name <your name in channel>
|
21
|
+
explain: give your name in channel for chatting.
|
22
|
+
|
23
|
+
)
|
24
|
+
end
|
25
|
+
|
26
|
+
def name_command_run(user_name = nil)
|
27
|
+
if _current_nickname
|
28
|
+
_puts "You have `name` and active in this channel now.".style.warn
|
29
|
+
_puts "Please leave this channel then change your name.".style.warn
|
30
|
+
else
|
31
|
+
resp = _api.join_channel( _current_channel , user_name)
|
32
|
+
code = resp.fetch("code")
|
33
|
+
if code == StatusCode::Success
|
34
|
+
_puts "#{user_name} is avalibale.".style.primary
|
35
|
+
_set_current_nickname user_name
|
36
|
+
channel_heartbeat_task
|
37
|
+
else
|
38
|
+
_set_current_nickname nil
|
39
|
+
_puts "#{user_name} has been used in channel: #{_current_channel}\ntry rename.".style.warn
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
mount_command :name, Name
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Mchat
|
2
|
+
module Command
|
3
|
+
module Quit
|
4
|
+
def self.configure(repl)
|
5
|
+
CommandConditions.push({
|
6
|
+
name: 'quit',
|
7
|
+
description: "q[uit]\t\tquit mchat",
|
8
|
+
help_condition: ['quit','q'],
|
9
|
+
help_doc: :quit_help_doc,
|
10
|
+
command_condition: ['/quit', '/q'],
|
11
|
+
command_run: :quit_command_run
|
12
|
+
})
|
13
|
+
end
|
14
|
+
|
15
|
+
module InstanceMethods
|
16
|
+
def quit_help_doc
|
17
|
+
_puts QuitDoc
|
18
|
+
end
|
19
|
+
|
20
|
+
def quit_command_run(words=nil)
|
21
|
+
_dispatch :leave_command_run
|
22
|
+
_puts "Bye :D"
|
23
|
+
sleep 1
|
24
|
+
timeline_close_window
|
25
|
+
exit 0
|
26
|
+
end
|
27
|
+
end
|
28
|
+
QuitDoc = %Q(
|
29
|
+
#{"Help: Quit".style.bold}
|
30
|
+
|
31
|
+
command: /q
|
32
|
+
explain: quit the mchat.
|
33
|
+
|
34
|
+
)
|
35
|
+
end
|
36
|
+
mount_command :quit, Quit
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require "rainbow"
|
2
|
+
|
3
|
+
module Mchat
|
4
|
+
class StyleFont
|
5
|
+
def initialize(text)
|
6
|
+
@text = Rainbow(text)
|
7
|
+
end
|
8
|
+
|
9
|
+
def primary
|
10
|
+
@text.bold.cyan
|
11
|
+
end
|
12
|
+
|
13
|
+
def jade
|
14
|
+
@text.bold.green
|
15
|
+
end
|
16
|
+
|
17
|
+
def sea
|
18
|
+
@text.bold.blue
|
19
|
+
end
|
20
|
+
|
21
|
+
def warn
|
22
|
+
@text.bold.yellow
|
23
|
+
end
|
24
|
+
|
25
|
+
def danger
|
26
|
+
@text.bold.red
|
27
|
+
end
|
28
|
+
|
29
|
+
def bold
|
30
|
+
@text.bold
|
31
|
+
end
|
32
|
+
end
|
33
|
+
module Style
|
34
|
+
def style
|
35
|
+
::Mchat::StyleFont.new(self)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Mchat
|
2
|
+
class Message
|
3
|
+
def initialize(message, format = :std)
|
4
|
+
@message = message
|
5
|
+
@format = format
|
6
|
+
end
|
7
|
+
|
8
|
+
def display
|
9
|
+
if @format == :std
|
10
|
+
# Time format https://devdocs.io/ruby~3/datetime#method-i-strftime
|
11
|
+
tstring = Time.at(@message['timestamp'].to_i).strftime("%H:%M:%S")
|
12
|
+
username = @message['user_name']
|
13
|
+
content = @message['content']
|
14
|
+
"[#{tstring.style.sea}] #{username.style.jade}: #{content.strip}\n"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require_relative '../timeline'
|
2
|
+
|
3
|
+
module Mchat
|
4
|
+
module TimelineApi
|
5
|
+
def timeline_clear
|
6
|
+
_chat_screen_print(TimelineCommand.new(:clear))
|
7
|
+
end
|
8
|
+
|
9
|
+
def timeline_bossmode
|
10
|
+
_chat_screen_print(TimelineCommand.new(:bossmode))
|
11
|
+
end
|
12
|
+
|
13
|
+
def timeline_close_window
|
14
|
+
_chat_screen_print(TimelineCommand.new(:close_window))
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
|
3
|
+
module Mchat
|
4
|
+
module UserConfig
|
5
|
+
CONFIG_DIR = Pathname.new(Dir.home).join('.mchat')
|
6
|
+
CONFIG_PATH = Pathname.new(Dir.home).join('.mchat').join('mchatrc')
|
7
|
+
def user_config_exist?
|
8
|
+
File.exist? CONFIG_PATH
|
9
|
+
end
|
10
|
+
def create_user_config
|
11
|
+
require 'fileutils'
|
12
|
+
FileUtils.mkdir_p(CONFIG_DIR) unless File.exist?(CONFIG_DIR)
|
13
|
+
File.open(CONFIG_PATH, 'w') do |f|
|
14
|
+
init_config = %Q(
|
15
|
+
# Mchat user config
|
16
|
+
# use yaml syntax
|
17
|
+
|
18
|
+
wait_prefix: ">>"
|
19
|
+
display_welcome: true
|
20
|
+
clear_repl_everytime: true
|
21
|
+
server: "localhost:4567"
|
22
|
+
|
23
|
+
)
|
24
|
+
f << init_config
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def read_user_config
|
29
|
+
if !user_config_exist?
|
30
|
+
create_user_config
|
31
|
+
end
|
32
|
+
|
33
|
+
require 'yaml'
|
34
|
+
opt = YAML.load(File.open(CONFIG_PATH))
|
35
|
+
return opt
|
36
|
+
end
|
37
|
+
|
38
|
+
def first_time_use
|
39
|
+
if !user_config_exist?
|
40
|
+
read_user_config
|
41
|
+
puts "Mchat first run TIPS".style.jade
|
42
|
+
puts ""
|
43
|
+
puts "Mchat not found user config, maybe this is your first time run Mchat."
|
44
|
+
init_config = "~/.mchat".style.warn
|
45
|
+
puts "Mchat has help your create config to #{init_config}"
|
46
|
+
server_field = "<server> field".style.warn
|
47
|
+
puts "Before you run mchat, edit your config file, change #{server_field} to yours:"
|
48
|
+
puts "vim #{CONFIG_PATH.to_s}".style.warn
|
49
|
+
puts "make sure your server works, before run Mchat. :D"
|
50
|
+
|
51
|
+
exit 0
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Mchat
|
2
|
+
module Welcome
|
3
|
+
def welcome(switch)
|
4
|
+
if switch
|
5
|
+
display_ascii_art
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
def display_ascii_art
|
10
|
+
# https://rubygems.org/gems/artii
|
11
|
+
content = <<-'EOF'
|
12
|
+
__ __ _ _
|
13
|
+
| \/ | | | | |
|
14
|
+
| \ / | ___| |__ __ _| |_
|
15
|
+
| |\/| |/ __| '_ \ / _` | __|
|
16
|
+
| | | | (__| | | | (_| | |_
|
17
|
+
|_| |_|\___|_| |_|\__,_|\__|
|
18
|
+
|
19
|
+
EOF
|
20
|
+
content.style.jade
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
npm WARN ERESOLVE overriding peer dependency
|
2
|
+
npm WARN While resolving: @babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.16.7
|
3
|
+
npm WARN Found: @babel/core@7.12.3
|
4
|
+
npm WARN node_modules/@babel/core
|
5
|
+
npm WARN @babel/core@"7.12.3" from the root project
|
6
|
+
npm WARN 102 more (@babel/helper-compilation-targets, ...)
|
7
|
+
npm WARN
|
8
|
+
npm WARN Could not resolve dependency:
|
9
|
+
npm WARN peer @babel/core@"^7.13.0" from @babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.16.7
|
10
|
+
npm WARN node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining
|
11
|
+
npm WARN @babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@"^7.16.7" from @babel/preset-env@7.16.11
|
12
|
+
npm WARN node_modules/@babel/preset-env
|
13
|
+
npm WARN
|
14
|
+
npm WARN Conflicting peer dependency: @babel/core@7.18.10
|
15
|
+
npm WARN node_modules/@babel/core
|
16
|
+
npm WARN peer @babel/core@"^7.13.0" from @babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.16.7
|
17
|
+
npm WARN node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining
|
18
|
+
npm WARN @babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@"^7.16.7" from @babel/preset-env@7.16.11
|
19
|
+
npm WARN node_modules/@babel/preset-env
|
20
|
+
npm WARN deprecated source-map-resolve@0.6.0: See https://github.com/lydell/source-map-resolve#deprecated
|
21
|
+
npm WARN deprecated source-map-resolve@0.5.3: See https://github.com/lydell/source-map-resolve#deprecated
|
22
|
+
npm WARN deprecated source-map-resolve@0.5.3: See https://github.com/lydell/source-map-resolve#deprecated
|
23
|
+
npm WARN deprecated fsevents@1.2.13: fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.
|
24
|
+
npm WARN deprecated fsevents@1.2.13: fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.
|
25
|
+
npm WARN deprecated chokidar@2.1.8: Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies
|
26
|
+
npm WARN deprecated chokidar@2.1.8: Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies
|
27
|
+
npm WARN deprecated rollup-plugin-babel@4.4.0: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-babel.
|
28
|
+
npm WARN deprecated querystring@0.2.1: The querystring API is considered Legacy. new code should use the URLSearchParams API instead.
|
29
|
+
npm WARN deprecated querystring@0.2.0: The querystring API is considered Legacy. new code should use the URLSearchParams API instead.
|
data/lib/mchat/logger.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
class Logger
|
2
|
+
def initialize(switch)
|
3
|
+
@switch = switch
|
4
|
+
if @switch == :on
|
5
|
+
@output = File.absolute_path("#{__dir__}/../../log")
|
6
|
+
@f = File.open("#{@output}/#{Time.now.to_s}.log","w+")
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def log(component, info)
|
11
|
+
@f << "[#{component}]: #{Time.now.to_s}: #{info}\n" if @switch == :on
|
12
|
+
end
|
13
|
+
|
14
|
+
def close
|
15
|
+
@f.close if @switch == :on
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
LoggerMan = Logger.new(:off)
|
20
|
+
|
21
|
+
at_exit { LoggerMan.close }
|