meshchat 0.8.0 → 0.10.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 +4 -4
- data/README.md +39 -11
- data/lib/meshchat.rb +48 -42
- data/lib/meshchat/configuration.rb +14 -0
- data/lib/meshchat/configuration/app_config.rb +63 -0
- data/lib/meshchat/configuration/database.rb +41 -0
- data/lib/meshchat/{config → configuration}/hash_file.rb +7 -6
- data/lib/meshchat/configuration/identity.rb +79 -0
- data/lib/meshchat/{config → configuration}/settings.rb +22 -26
- data/lib/meshchat/debug.rb +69 -0
- data/lib/meshchat/encryption.rb +7 -2
- data/lib/meshchat/encryption/aes_rsa.rb +2 -1
- data/lib/meshchat/encryption/passthrough.rb +5 -3
- data/lib/meshchat/locale/en.yml +14 -0
- data/lib/meshchat/models/node.rb +140 -0
- data/lib/meshchat/network.rb +19 -0
- data/lib/meshchat/network/dispatcher.rb +83 -0
- data/lib/meshchat/network/errors.rb +11 -0
- data/lib/meshchat/network/incoming.rb +13 -0
- data/lib/meshchat/network/incoming/message_decryptor.rb +51 -0
- data/lib/meshchat/network/incoming/message_processor.rb +75 -0
- data/lib/meshchat/network/incoming/request_processor.rb +30 -0
- data/lib/meshchat/network/local.rb +12 -0
- data/lib/meshchat/network/local/connection.rb +58 -0
- data/lib/meshchat/network/local/server.rb +69 -0
- data/lib/meshchat/network/message.rb +34 -0
- data/lib/meshchat/network/message/base.rb +139 -0
- data/lib/meshchat/network/message/chat.rb +9 -0
- data/lib/meshchat/network/message/disconnect.rb +21 -0
- data/lib/meshchat/network/message/emote.rb +9 -0
- data/lib/meshchat/network/message/factory.rb +80 -0
- data/lib/meshchat/network/message/node_list.rb +75 -0
- data/lib/meshchat/network/message/node_list_diff.rb +18 -0
- data/lib/meshchat/network/message/node_list_hash.rb +32 -0
- data/lib/meshchat/network/message/ping.rb +31 -0
- data/lib/meshchat/network/message/ping_reply.rb +12 -0
- data/lib/meshchat/network/message/whisper.rb +28 -0
- data/lib/meshchat/network/remote.rb +13 -0
- data/lib/meshchat/network/remote/connection.rb +28 -0
- data/lib/meshchat/network/remote/relay.rb +109 -0
- data/lib/meshchat/network/remote/relay_pool.rb +52 -0
- data/lib/meshchat/ui.rb +13 -0
- data/lib/meshchat/ui/cli.rb +48 -0
- data/lib/meshchat/ui/cli/base.rb +39 -0
- data/lib/meshchat/ui/cli/input_factory.rb +50 -0
- data/lib/meshchat/ui/cli/keyboard_line_input.rb +14 -0
- data/lib/meshchat/ui/command.rb +51 -0
- data/lib/meshchat/ui/command/base.rb +77 -0
- data/lib/meshchat/ui/command/bind.rb +47 -0
- data/lib/meshchat/ui/command/chat.rb +31 -0
- data/lib/meshchat/ui/command/config.rb +37 -0
- data/lib/meshchat/ui/command/emote.rb +23 -0
- data/lib/meshchat/ui/command/exit.rb +16 -0
- data/lib/meshchat/ui/command/help.rb +20 -0
- data/lib/meshchat/ui/command/identity.rb +16 -0
- data/lib/meshchat/ui/command/import.rb +42 -0
- data/lib/meshchat/ui/command/irb.rb +22 -0
- data/lib/meshchat/ui/command/offline.rb +23 -0
- data/lib/meshchat/ui/command/online.rb +18 -0
- data/lib/meshchat/ui/command/ping.rb +65 -0
- data/lib/meshchat/ui/command/ping_all.rb +19 -0
- data/lib/meshchat/ui/command/send_disconnect.rb +20 -0
- data/lib/meshchat/ui/command/server.rb +22 -0
- data/lib/meshchat/ui/command/share.rb +16 -0
- data/lib/meshchat/ui/command/whisper.rb +40 -0
- data/lib/meshchat/ui/display.rb +78 -0
- data/lib/meshchat/ui/display/base.rb +58 -0
- data/lib/meshchat/ui/display/manager.rb +59 -0
- data/lib/meshchat/ui/notifier.rb +9 -0
- data/lib/meshchat/ui/notifier/base.rb +33 -0
- data/lib/meshchat/version.rb +3 -2
- metadata +150 -80
- data/lib/meshchat/cli.rb +0 -188
- data/lib/meshchat/cli/base.rb +0 -13
- data/lib/meshchat/cli/input.rb +0 -37
- data/lib/meshchat/command/base.rb +0 -80
- data/lib/meshchat/command/bind.rb +0 -44
- data/lib/meshchat/command/chat.rb +0 -30
- data/lib/meshchat/command/config.rb +0 -34
- data/lib/meshchat/command/emote.rb +0 -20
- data/lib/meshchat/command/exit.rb +0 -13
- data/lib/meshchat/command/help.rb +0 -17
- data/lib/meshchat/command/identity.rb +0 -13
- data/lib/meshchat/command/import.rb +0 -41
- data/lib/meshchat/command/init.rb +0 -34
- data/lib/meshchat/command/irb.rb +0 -23
- data/lib/meshchat/command/listen.rb +0 -13
- data/lib/meshchat/command/offline.rb +0 -20
- data/lib/meshchat/command/online.rb +0 -15
- data/lib/meshchat/command/ping.rb +0 -65
- data/lib/meshchat/command/ping_all.rb +0 -15
- data/lib/meshchat/command/send_disconnect.rb +0 -15
- data/lib/meshchat/command/server.rb +0 -20
- data/lib/meshchat/command/share.rb +0 -13
- data/lib/meshchat/command/stop_listening.rb +0 -13
- data/lib/meshchat/command/whisper.rb +0 -38
- data/lib/meshchat/database.rb +0 -30
- data/lib/meshchat/display.rb +0 -33
- data/lib/meshchat/display/base.rb +0 -60
- data/lib/meshchat/display/manager.rb +0 -55
- data/lib/meshchat/instance.rb +0 -40
- data/lib/meshchat/message.rb +0 -41
- data/lib/meshchat/message/base.rb +0 -97
- data/lib/meshchat/message/chat.rb +0 -19
- data/lib/meshchat/message/disconnect.rb +0 -13
- data/lib/meshchat/message/emote.rb +0 -9
- data/lib/meshchat/message/node_list.rb +0 -63
- data/lib/meshchat/message/node_list_diff.rb +0 -15
- data/lib/meshchat/message/node_list_hash.rb +0 -33
- data/lib/meshchat/message/ping.rb +0 -32
- data/lib/meshchat/message/ping_reply.rb +0 -9
- data/lib/meshchat/message/relay.rb +0 -43
- data/lib/meshchat/message/whisper.rb +0 -36
- data/lib/meshchat/models/entry.rb +0 -104
- data/lib/meshchat/net/client.rb +0 -83
- data/lib/meshchat/net/listener/errors.rb +0 -11
- data/lib/meshchat/net/listener/request.rb +0 -48
- data/lib/meshchat/net/listener/request_processor.rb +0 -50
- data/lib/meshchat/net/listener/server.rb +0 -114
- data/lib/meshchat/net/request.rb +0 -29
- data/lib/meshchat/notifier/base.rb +0 -31
data/lib/meshchat/cli.rb
DELETED
@@ -1,188 +0,0 @@
|
|
1
|
-
require 'meshchat/cli/input'
|
2
|
-
require 'meshchat/cli/base'
|
3
|
-
require 'meshchat/command/base'
|
4
|
-
require 'meshchat/command/chat'
|
5
|
-
require 'meshchat/command/identity'
|
6
|
-
require 'meshchat/command/irb'
|
7
|
-
require 'meshchat/command/config'
|
8
|
-
require 'meshchat/command/ping'
|
9
|
-
require 'meshchat/command/ping_all'
|
10
|
-
require 'meshchat/command/server'
|
11
|
-
require 'meshchat/command/whisper'
|
12
|
-
require 'meshchat/command/exit'
|
13
|
-
require 'meshchat/command/listen'
|
14
|
-
require 'meshchat/command/stop_listening'
|
15
|
-
require 'meshchat/command/send_disconnect'
|
16
|
-
require 'meshchat/command/help'
|
17
|
-
require 'meshchat/command/bind'
|
18
|
-
require 'meshchat/command/online'
|
19
|
-
require 'meshchat/command/offline'
|
20
|
-
require 'meshchat/command/init'
|
21
|
-
require 'meshchat/command/share'
|
22
|
-
require 'meshchat/command/import'
|
23
|
-
require 'meshchat/command/emote'
|
24
|
-
|
25
|
-
|
26
|
-
module MeshChat
|
27
|
-
# A user interface is responsible for for creating a client
|
28
|
-
# and sending messages to that client
|
29
|
-
class CLI
|
30
|
-
COMMAND_MAP = {
|
31
|
-
MeshChat::Command::Base::CONFIG => MeshChat::Command::Config,
|
32
|
-
MeshChat::Command::Base::PING => MeshChat::Command::Ping,
|
33
|
-
MeshChat::Command::Base::PING_ALL => MeshChat::Command::PingAll,
|
34
|
-
MeshChat::Command::Base::STOP_LISTENING => MeshChat::Command::StopListening,
|
35
|
-
MeshChat::Command::Base::SERVERS => MeshChat::Command::Server,
|
36
|
-
MeshChat::Command::Base::SERVER => MeshChat::Command::Server,
|
37
|
-
MeshChat::Command::Base::EXIT => MeshChat::Command::Exit,
|
38
|
-
MeshChat::Command::Base::QUIT => MeshChat::Command::Exit,
|
39
|
-
MeshChat::Command::Base::LISTEN => MeshChat::Command::Listen,
|
40
|
-
MeshChat::Command::Base::IDENTITY => MeshChat::Command::Identity,
|
41
|
-
MeshChat::Command::Base::IRB => MeshChat::Command::IRB,
|
42
|
-
MeshChat::Command::Base::INIT => MeshChat::Command::Init,
|
43
|
-
MeshChat::Command::Base::SHARE => MeshChat::Command::Share,
|
44
|
-
MeshChat::Command::Base::IMPORT => MeshChat::Command::Import,
|
45
|
-
MeshChat::Command::Base::EXPORT => MeshChat::Command::Share,
|
46
|
-
MeshChat::Command::Base::ONLINE => MeshChat::Command::Online,
|
47
|
-
MeshChat::Command::Base::OFFLINE => MeshChat::Command::Offline,
|
48
|
-
MeshChat::Command::Base::HELP => MeshChat::Command::Help,
|
49
|
-
MeshChat::Command::Base::BIND => MeshChat::Command::Bind,
|
50
|
-
MeshChat::Command::Base::SEND_DISCONNECT => MeshChat::Command::SendDisconnect,
|
51
|
-
MeshChat::Command::Base::EMOTE => MeshChat::Command::Emote,
|
52
|
-
MeshChat::Command::Base::CHAT => MeshChat::Command::Chat
|
53
|
-
|
54
|
-
}
|
55
|
-
|
56
|
-
|
57
|
-
attr_accessor :_input_device
|
58
|
-
|
59
|
-
class << self
|
60
|
-
|
61
|
-
delegate :server_location, :listen_for_commands,
|
62
|
-
:shutdown, :start_server, :client, :server,
|
63
|
-
:check_startup_settings, :create_input, :close_server,
|
64
|
-
to: :instance
|
65
|
-
|
66
|
-
def create(input_klass)
|
67
|
-
@input_klass = input_klass
|
68
|
-
@instance = new(input_klass)
|
69
|
-
end
|
70
|
-
|
71
|
-
def get_input
|
72
|
-
instance.get_input
|
73
|
-
end
|
74
|
-
|
75
|
-
def instance
|
76
|
-
# default input collector
|
77
|
-
@instance ||= new
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
|
82
|
-
def initialize(input_klass = nil)
|
83
|
-
input_klass ||= MeshChat::CLI::Base
|
84
|
-
# instantiate the interface with which we are communicated with
|
85
|
-
self._input_device = input_klass.new
|
86
|
-
# this will allow our listener / server to print exceptions,
|
87
|
-
# rather than silently fail
|
88
|
-
Thread.abort_on_exception = true
|
89
|
-
end
|
90
|
-
|
91
|
-
def listen_for_commands
|
92
|
-
process_input while true
|
93
|
-
end
|
94
|
-
|
95
|
-
def process_input
|
96
|
-
msg = get_input
|
97
|
-
create_input(msg)
|
98
|
-
rescue SystemExit, Interrupt
|
99
|
-
close_program
|
100
|
-
rescue Exception => e
|
101
|
-
Display.error e.class.name
|
102
|
-
Display.error e.message.colorize(:red)
|
103
|
-
Display.error e.backtrace.join("\n").colorize(:red)
|
104
|
-
end
|
105
|
-
|
106
|
-
def get_input
|
107
|
-
_input_device.get_input
|
108
|
-
end
|
109
|
-
|
110
|
-
def create_input(msg)
|
111
|
-
Display.debug("input: #{msg}")
|
112
|
-
handler = Input.create(msg)
|
113
|
-
handler.handle
|
114
|
-
rescue => e
|
115
|
-
Display.error e.message
|
116
|
-
Display.error e.class.name
|
117
|
-
Display.error e.backtrace.join("\n").colorize(:red)
|
118
|
-
end
|
119
|
-
|
120
|
-
def start_server
|
121
|
-
|
122
|
-
unless Settings.valid?
|
123
|
-
Display.alert("settings not fully valid\n")
|
124
|
-
errors = Settings.errors
|
125
|
-
errors.each do |error|
|
126
|
-
Display.alert(" - #{error}")
|
127
|
-
end
|
128
|
-
|
129
|
-
if errors.present?
|
130
|
-
Display.info('set these with /config set <field> <value>')
|
131
|
-
end
|
132
|
-
|
133
|
-
return
|
134
|
-
end
|
135
|
-
|
136
|
-
Thread.abort_on_exception = false
|
137
|
-
Thin::Logging.silent = true
|
138
|
-
|
139
|
-
Thread.new do
|
140
|
-
# boot sinatra
|
141
|
-
MeshChat::Net::Listener::Server.run!(
|
142
|
-
port: MeshChat::Settings['port'],
|
143
|
-
# logger: MeshChat::Display,
|
144
|
-
show_exceptions: true,
|
145
|
-
server: :thin,
|
146
|
-
dump_errors: true,
|
147
|
-
threaded: true
|
148
|
-
)
|
149
|
-
end
|
150
|
-
end
|
151
|
-
|
152
|
-
def close_server
|
153
|
-
puts 'shutting down server'
|
154
|
-
if @server.present?
|
155
|
-
server = @server.pop
|
156
|
-
server.try(:server).try(:close)
|
157
|
-
end
|
158
|
-
puts 'no longer listening...'
|
159
|
-
end
|
160
|
-
|
161
|
-
def server_location
|
162
|
-
Settings.location
|
163
|
-
end
|
164
|
-
|
165
|
-
def check_startup_settings
|
166
|
-
start_server if Settings['autolisten']
|
167
|
-
end
|
168
|
-
|
169
|
-
def close_program
|
170
|
-
exit
|
171
|
-
end
|
172
|
-
|
173
|
-
# save config and exit
|
174
|
-
def shutdown
|
175
|
-
# close_server
|
176
|
-
Display.info 'saving config...'
|
177
|
-
Settings.save
|
178
|
-
Display.info 'notifying of disconnection...'
|
179
|
-
send_disconnect
|
180
|
-
Display.alert "\n\nGoodbye. \n\nThank you for using #{MeshChat.name}"
|
181
|
-
exit
|
182
|
-
end
|
183
|
-
|
184
|
-
def send_disconnect
|
185
|
-
MeshChat::Command::SendDisconnect.new('/senddisconnect')
|
186
|
-
end
|
187
|
-
end
|
188
|
-
end
|
data/lib/meshchat/cli/base.rb
DELETED
@@ -1,13 +0,0 @@
|
|
1
|
-
module MeshChat
|
2
|
-
class CLI
|
3
|
-
class Base
|
4
|
-
# override this to alter how input is gathered
|
5
|
-
#
|
6
|
-
# the returned value of this method should be a whole line / command
|
7
|
-
# that will be passed to MeshChat::CLI.create_input
|
8
|
-
def get_input
|
9
|
-
gets
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
data/lib/meshchat/cli/input.rb
DELETED
@@ -1,37 +0,0 @@
|
|
1
|
-
module MeshChat
|
2
|
-
class CLI
|
3
|
-
class Input
|
4
|
-
WHISPER = '@'
|
5
|
-
COMMAND = '/'
|
6
|
-
attr_accessor :_input
|
7
|
-
|
8
|
-
class << self
|
9
|
-
def is_command?(input)
|
10
|
-
input[0, 1] == COMMAND
|
11
|
-
end
|
12
|
-
|
13
|
-
def is_whisper?(input)
|
14
|
-
input[0, 1] == WHISPER
|
15
|
-
end
|
16
|
-
|
17
|
-
def create(input)
|
18
|
-
klass =
|
19
|
-
if is_command?(input)
|
20
|
-
Command::Base
|
21
|
-
elsif is_whisper?(input)
|
22
|
-
Command::Whisper
|
23
|
-
else
|
24
|
-
Command::Chat
|
25
|
-
end
|
26
|
-
|
27
|
-
Display.debug("INPUT: Detected '#{klass.name}' from '#{input}'")
|
28
|
-
klass.new(input)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
def initialize(input)
|
33
|
-
self._input = input.chomp
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
@@ -1,80 +0,0 @@
|
|
1
|
-
module MeshChat
|
2
|
-
class Command
|
3
|
-
class Base < CLI::Input
|
4
|
-
attr_accessor :_input
|
5
|
-
|
6
|
-
# Commands
|
7
|
-
SET = 'set'
|
8
|
-
CONFIG = 'config'
|
9
|
-
DISPLAY = 'display'
|
10
|
-
EXIT = 'exit'
|
11
|
-
QUIT = 'quit'
|
12
|
-
LISTEN = 'listen'
|
13
|
-
STOP_LISTENING = 'stoplistening'
|
14
|
-
CONNECT = 'connect'
|
15
|
-
CHAT = 'chat'
|
16
|
-
ADD = 'add'
|
17
|
-
REMOVE = 'remove'
|
18
|
-
RM = 'rm'
|
19
|
-
SERVERS = 'servers'
|
20
|
-
SERVER = 'server'
|
21
|
-
WHO = 'who'
|
22
|
-
PING = 'ping'
|
23
|
-
PING_ALL = 'pingall'
|
24
|
-
IDENTITY = 'identity'
|
25
|
-
IRB = 'c'
|
26
|
-
INIT = 'init'
|
27
|
-
SHARE = 'share'
|
28
|
-
IMPORT = 'import'
|
29
|
-
EXPORT = 'export'
|
30
|
-
ONLINE = 'online'
|
31
|
-
OFFLINE = 'offline'
|
32
|
-
HELP = 'help'
|
33
|
-
BIND = 'bind'
|
34
|
-
SEND_DISCONNECT = 'senddisconnect'
|
35
|
-
EMOTE = 'me'
|
36
|
-
|
37
|
-
def handle
|
38
|
-
klass = CLI::COMMAND_MAP[command]
|
39
|
-
Display.debug("INPUT: #{klass.name} from #{command} derived from #{_input}")
|
40
|
-
if klass
|
41
|
-
klass.new(_input).handle
|
42
|
-
else
|
43
|
-
Display.alert 'not implemented...'
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
protected
|
48
|
-
|
49
|
-
def corresponding_message_class
|
50
|
-
my_kind = self.class.name.demodulize
|
51
|
-
message_root_name = MeshChat::Message.name
|
52
|
-
message_class_name = "#{message_root_name}::#{my_kind}"
|
53
|
-
|
54
|
-
Display.debug("Corresponding: #{message_class_name}")
|
55
|
-
|
56
|
-
message_class_name.constantize
|
57
|
-
end
|
58
|
-
|
59
|
-
def command_string
|
60
|
-
@command_string ||= _input[1, _input.length]
|
61
|
-
end
|
62
|
-
|
63
|
-
def command_args
|
64
|
-
@command_args ||= command_string.split(' ')
|
65
|
-
end
|
66
|
-
|
67
|
-
def command
|
68
|
-
@command ||= command_args.first
|
69
|
-
end
|
70
|
-
|
71
|
-
def sub_command_args
|
72
|
-
@sub_command_args ||= command_args[2..3]
|
73
|
-
end
|
74
|
-
|
75
|
-
def sub_command
|
76
|
-
@sub_command ||= command_args[1]
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
@@ -1,44 +0,0 @@
|
|
1
|
-
require 'socket'
|
2
|
-
require 'open-uri'
|
3
|
-
|
4
|
-
module MeshChat
|
5
|
-
class Command
|
6
|
-
class Bind < Command::Base
|
7
|
-
def self.description
|
8
|
-
'helper for choosing what ip address to use for yourself'
|
9
|
-
end
|
10
|
-
|
11
|
-
def handle
|
12
|
-
options = ip_addresses
|
13
|
-
option_numbers = []
|
14
|
-
Display.success 'Choose an ip:'
|
15
|
-
options.each_with_index do |ip, index|
|
16
|
-
Display.info "#{index}: #{ip}"
|
17
|
-
option_numbers << index
|
18
|
-
end
|
19
|
-
|
20
|
-
selected = MeshChat::CLI.get_input
|
21
|
-
|
22
|
-
if option_numbers.include?(selected.to_i)
|
23
|
-
Display.success Settings.set('ip', with: options[selected.to_i])
|
24
|
-
else
|
25
|
-
Display.alert 'Invalid selection'
|
26
|
-
handle # repeat
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def ip_addresses
|
31
|
-
local = Socket.getifaddrs.map { |i| i.addr.ip_address if i.addr.ipv4? }.compact
|
32
|
-
# get public
|
33
|
-
begin
|
34
|
-
remote_ip = open('http://whatismyip.akamai.com').read
|
35
|
-
local << remote_ip
|
36
|
-
rescue => e
|
37
|
-
Display.fatal e.message
|
38
|
-
Display.alert 'public ip lookup failed'
|
39
|
-
end
|
40
|
-
local
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
@@ -1,30 +0,0 @@
|
|
1
|
-
module MeshChat
|
2
|
-
class Command
|
3
|
-
class Chat < Command::Base
|
4
|
-
def handle
|
5
|
-
servers = Node.online
|
6
|
-
if !servers.empty?
|
7
|
-
m = corresponding_message_class.new(
|
8
|
-
message: _input
|
9
|
-
)
|
10
|
-
|
11
|
-
show_myself(m)
|
12
|
-
|
13
|
-
# if sending to all, iterate thorugh list of
|
14
|
-
# servers, and send to each one
|
15
|
-
# TODO: do this async so that one server doesn't block
|
16
|
-
# the rest of the servers from receiving the messages
|
17
|
-
servers.each do |entry|
|
18
|
-
Net::Client.send(node: entry, message: m)
|
19
|
-
end
|
20
|
-
else
|
21
|
-
Display.warning 'you have no servers'
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def show_myself(message)
|
26
|
-
Display.chat message.display
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
@@ -1,34 +0,0 @@
|
|
1
|
-
module MeshChat
|
2
|
-
class Command
|
3
|
-
class Config < Command::Base
|
4
|
-
def self.description
|
5
|
-
'interface for setting and displaying various config options'
|
6
|
-
end
|
7
|
-
|
8
|
-
def handle
|
9
|
-
case sub_command
|
10
|
-
when SET
|
11
|
-
if is_valid_set_command?
|
12
|
-
key, value = config_set_args
|
13
|
-
|
14
|
-
Display.info Settings.set(key, with: value)
|
15
|
-
else
|
16
|
-
Display.alert 'set requires a key and a value'
|
17
|
-
end
|
18
|
-
when DISPLAY
|
19
|
-
Display.info Settings.display
|
20
|
-
else
|
21
|
-
Display.alert 'config command not implemented...'
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def config_set_args
|
26
|
-
command_args[2..3]
|
27
|
-
end
|
28
|
-
|
29
|
-
def is_valid_set_command?
|
30
|
-
sub_command == SET && command_args.length == 4
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
module MeshChat
|
2
|
-
class Command
|
3
|
-
class Emote < Command::Chat
|
4
|
-
def self.description
|
5
|
-
'send an emote to the current chat'
|
6
|
-
end
|
7
|
-
|
8
|
-
def initialize(input)
|
9
|
-
input = input.chomp
|
10
|
-
emote_message = input.gsub(/\A\/me /, '').chomp
|
11
|
-
self._input = emote_message
|
12
|
-
end
|
13
|
-
|
14
|
-
def show_myself(message)
|
15
|
-
Display.info message.display
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|