ssc.bot 0.1.1 → 0.2.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.
@@ -1,23 +1,11 @@
1
- #!/usr/bin/env ruby
2
1
  # encoding: UTF-8
3
2
  # frozen_string_literal: true
4
3
 
5
4
  #--
6
5
  # This file is part of SSC.Bot.
7
- # Copyright (c) 2020 Jonathan Bradley Whited (@esotericpig)
8
- #
9
- # SSC.Bot is free software: you can redistribute it and/or modify
10
- # it under the terms of the GNU Lesser General Public License as published by
11
- # the Free Software Foundation, either version 3 of the License, or
12
- # (at your option) any later version.
13
- #
14
- # SSC.Bot is distributed in the hope that it will be useful,
15
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
16
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
- # GNU Lesser General Public License for more details.
18
- #
19
- # You should have received a copy of the GNU Lesser General Public License
20
- # along with SSC.Bot. If not, see <https://www.gnu.org/licenses/>.
6
+ # Copyright (c) 2020-2021 Jonathan Bradley Whited
7
+ #
8
+ # SPDX-License-Identifier: LGPL-3.0-or-later
21
9
  #++
22
10
 
23
11
 
@@ -25,41 +13,40 @@ require 'attr_bool'
25
13
 
26
14
  require 'ssc.bot/chat_log/message'
27
15
 
28
-
29
16
  module SSCBot
30
17
  class ChatLog
31
18
  ###
32
- # @author Jonathan Bradley Whited (@esotericpig)
19
+ # @author Jonathan Bradley Whited
33
20
  # @since 0.1.0
34
21
  ###
35
22
  class PlayerMessage < Message
36
23
  attr_reader :message
37
24
  attr_reader :name
38
-
25
+
39
26
  def initialize(line,type:,name:,message:)
40
27
  super(line,type: type)
41
-
28
+
42
29
  @message = message
43
30
  @name = name
44
31
  end
45
32
  end
46
-
33
+
47
34
  ###
48
- # @author Jonathan Bradley Whited (@esotericpig)
35
+ # @author Jonathan Bradley Whited
49
36
  # @since 0.1.0
50
37
  ###
51
38
  class ChatMessage < PlayerMessage
52
39
  attr_reader :channel
53
-
40
+
54
41
  def initialize(line,channel:,name:,message:)
55
42
  super(line,type: :chat,name: name,message: message)
56
-
43
+
57
44
  @channel = channel
58
45
  end
59
46
  end
60
-
47
+
61
48
  ###
62
- # @author Jonathan Bradley Whited (@esotericpig)
49
+ # @author Jonathan Bradley Whited
63
50
  # @since 0.1.0
64
51
  ###
65
52
  class FreqMessage < PlayerMessage
@@ -67,27 +54,27 @@ class ChatLog
67
54
  super(line,type: :freq,name: name,message: message)
68
55
  end
69
56
  end
70
-
57
+
71
58
  ###
72
- # @author Jonathan Bradley Whited (@esotericpig)
59
+ # @author Jonathan Bradley Whited
73
60
  # @since 0.1.0
74
61
  ###
75
62
  class KillMessage < Message
76
63
  attr_reader :bounty
77
64
  attr_reader :killed
78
65
  attr_reader :killer
79
-
66
+
80
67
  def initialize(line,killed:,bounty:,killer:)
81
68
  super(line,type: :kill)
82
-
69
+
83
70
  @bounty = bounty
84
71
  @killed = killed
85
72
  @killer = killer
86
73
  end
87
74
  end
88
-
75
+
89
76
  ###
90
- # @author Jonathan Bradley Whited (@esotericpig)
77
+ # @author Jonathan Bradley Whited
91
78
  # @since 0.1.0
92
79
  ###
93
80
  class PrivateMessage < PlayerMessage
@@ -95,9 +82,9 @@ class ChatLog
95
82
  super(line,type: type,name: name,message: message)
96
83
  end
97
84
  end
98
-
85
+
99
86
  ###
100
- # @author Jonathan Bradley Whited (@esotericpig)
87
+ # @author Jonathan Bradley Whited
101
88
  # @since 0.1.0
102
89
  ###
103
90
  class PubMessage < PlayerMessage
@@ -105,9 +92,9 @@ class ChatLog
105
92
  super(line,type: :pub,name: name,message: message)
106
93
  end
107
94
  end
108
-
95
+
109
96
  ###
110
- # @author Jonathan Bradley Whited (@esotericpig)
97
+ # @author Jonathan Bradley Whited
111
98
  # @since 0.1.0
112
99
  ###
113
100
  class QFindMessage < Message
@@ -119,10 +106,11 @@ class ChatLog
119
106
  attr_reader :player
120
107
  attr_reader? :private
121
108
  attr_reader :zone
122
-
123
- def initialize(line,find_type:,arena: nil,days: nil,hours: nil,more: false,player: nil,private: false,zone: nil)
124
- super(line,type: %s{?find})
125
-
109
+
110
+ def initialize(line,find_type:,arena: nil,days: nil,hours: nil,more: false,player: nil,private: false,
111
+ zone: nil)
112
+ super(line,type: %s(?find))
113
+
126
114
  @arena = arena
127
115
  @days = days
128
116
  @find_type = find_type
@@ -133,55 +121,55 @@ class ChatLog
133
121
  @zone = zone
134
122
  end
135
123
  end
136
-
124
+
137
125
  ###
138
- # @author Jonathan Bradley Whited (@esotericpig)
126
+ # @author Jonathan Bradley Whited
139
127
  # @since 0.1.0
140
128
  ###
141
129
  class QLogMessage < Message
142
130
  attr_reader :filename
143
131
  attr_reader :log_type # [:open,:close]
144
-
132
+
145
133
  def initialize(line,log_type:,filename: nil)
146
- super(line,type: %s{?log})
147
-
134
+ super(line,type: %s(?log))
135
+
148
136
  @filename = filename
149
137
  @log_type = log_type
150
138
  end
151
139
  end
152
-
140
+
153
141
  ###
154
- # @author Jonathan Bradley Whited (@esotericpig)
142
+ # @author Jonathan Bradley Whited
155
143
  # @since 0.1.0
156
144
  ###
157
145
  class QNamelenMessage < Message
158
146
  attr_reader :namelen
159
-
147
+
160
148
  def initialize(line,namelen:)
161
- super(line,type: %s{?namelen})
162
-
149
+ super(line,type: %s(?namelen))
150
+
163
151
  @namelen = namelen
164
152
  end
165
153
  end
166
-
154
+
167
155
  ###
168
- # @author Jonathan Bradley Whited (@esotericpig)
156
+ # @author Jonathan Bradley Whited
169
157
  # @since 0.1.0
170
158
  ###
171
159
  class RemoteMessage < PrivateMessage
172
160
  attr_reader? :own
173
161
  attr_reader? :squad
174
-
162
+
175
163
  def initialize(line,own:,squad:,name:,message:)
176
164
  super(line,type: :remote,name: name,message: message)
177
-
165
+
178
166
  @own = own
179
167
  @squad = squad
180
168
  end
181
169
  end
182
-
170
+
183
171
  ###
184
- # @author Jonathan Bradley Whited (@esotericpig)
172
+ # @author Jonathan Bradley Whited
185
173
  # @since 0.1.0
186
174
  ###
187
175
  class TeamMessage < PlayerMessage
@@ -1,23 +1,11 @@
1
- #!/usr/bin/env ruby
2
1
  # encoding: UTF-8
3
2
  # frozen_string_literal: true
4
3
 
5
4
  #--
6
5
  # This file is part of SSC.Bot.
7
- # Copyright (c) 2020 Jonathan Bradley Whited (@esotericpig)
8
- #
9
- # SSC.Bot is free software: you can redistribute it and/or modify
10
- # it under the terms of the GNU Lesser General Public License as published by
11
- # the Free Software Foundation, either version 3 of the License, or
12
- # (at your option) any later version.
13
- #
14
- # SSC.Bot is distributed in the hope that it will be useful,
15
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
16
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
- # GNU Lesser General Public License for more details.
18
- #
19
- # You should have received a copy of the GNU Lesser General Public License
20
- # along with SSC.Bot. If not, see <https://www.gnu.org/licenses/>.
6
+ # Copyright (c) 2020-2021 Jonathan Bradley Whited
7
+ #
8
+ # SPDX-License-Identifier: LGPL-3.0-or-later
21
9
  #++
22
10
 
23
11
 
@@ -28,25 +16,24 @@ require 'ssc.bot/chat_log/message_parsable'
28
16
  require 'ssc.bot/chat_log/message_parser'
29
17
  require 'ssc.bot/chat_log/messages'
30
18
 
31
-
32
19
  module SSCBot
33
20
  ###
34
- # @author Jonathan Bradley Whited (@esotericpig)
21
+ # @author Jonathan Bradley Whited
35
22
  # @since 0.1.0
36
23
  ###
37
24
  class ChatLogFile < SSCFile
38
25
  include ChatLog::MessageParsable
39
-
40
- def initialize(filename,mode=DEFAULT_MODE,parser: ChatLog::MessageParser.new(),**file_kargs)
26
+
27
+ def initialize(filename,mode=DEFAULT_MODE,parser: ChatLog::MessageParser.new,**file_kargs)
41
28
  super(filename,mode,**file_kargs)
42
-
29
+
43
30
  @parser = parser
44
31
  end
45
-
46
- def parse_line()
47
- line = get_line()
48
-
49
- return line.nil?() ? nil : parse(line)
32
+
33
+ def parse_line
34
+ line = read_uline
35
+
36
+ return line.nil? ? nil : parse(line)
50
37
  end
51
38
  end
52
39
  end
@@ -0,0 +1,55 @@
1
+ # encoding: UTF-8
2
+ # frozen_string_literal: true
3
+
4
+ #--
5
+ # This file is part of SSC.Bot.
6
+ # Copyright (c) 2020-2021 Jonathan Bradley Whited
7
+ #
8
+ # SPDX-License-Identifier: LGPL-3.0-or-later
9
+ #++
10
+
11
+
12
+ require 'forwardable'
13
+
14
+ require 'ssc.bot/chat_log'
15
+ require 'ssc.bot/user'
16
+
17
+ module SSCBot
18
+ ###
19
+ # Chat Log + User
20
+ #
21
+ # @author Jonathan Bradley Whited
22
+ # @since 0.1.2
23
+ ###
24
+ class Clu
25
+ include Forwardable
26
+
27
+ attr_reader :bots
28
+ attr_reader :chat_log
29
+ attr_reader :msg_sender
30
+
31
+ def initialize(chat_log,msg_sender)
32
+ super()
33
+
34
+ @bots = {}
35
+ @chat_log = chat_log
36
+ @msg_sender = msg_sender
37
+
38
+ def_delegators(:@bots,:[])
39
+ def_delegator(:@bots,:key?,:bot?)
40
+ def_delegators(:@chat_log,*(@chat_log.public_methods - public_methods))
41
+ def_delegators(:@msg_sender,*(@msg_sender.public_methods - public_methods))
42
+ end
43
+
44
+ def add_bot(bot_class)
45
+ bot = @bots[bot_class]
46
+
47
+ if bot.nil?
48
+ bot = bot_class.new(self)
49
+ @bots[bot_class] = bot
50
+ end
51
+
52
+ return bot
53
+ end
54
+ end
55
+ end
data/lib/ssc.bot/error.rb CHANGED
@@ -1,59 +1,37 @@
1
- #!/usr/bin/env ruby
2
1
  # encoding: UTF-8
3
2
  # frozen_string_literal: true
4
3
 
5
4
  #--
6
5
  # This file is part of SSC.Bot.
7
- # Copyright (c) 2020 Jonathan Bradley Whited (@esotericpig)
8
- #
9
- # SSC.Bot is free software: you can redistribute it and/or modify
10
- # it under the terms of the GNU Lesser General Public License as published by
11
- # the Free Software Foundation, either version 3 of the License, or
12
- # (at your option) any later version.
13
- #
14
- # SSC.Bot is distributed in the hope that it will be useful,
15
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
16
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
- # GNU Lesser General Public License for more details.
18
- #
19
- # You should have received a copy of the GNU Lesser General Public License
20
- # along with SSC.Bot. If not, see <https://www.gnu.org/licenses/>.
6
+ # Copyright (c) 2020-2021 Jonathan Bradley Whited
7
+ #
8
+ # SPDX-License-Identifier: LGPL-3.0-or-later
21
9
  #++
22
10
 
23
11
 
24
12
  module SSCBot
25
13
  ###
26
- # @author Jonathan Bradley Whited (@esotericpig)
14
+ # @author Jonathan Bradley Whited
27
15
  # @since 0.1.0
28
16
  ###
29
17
  class Error < ::StandardError; end
30
-
18
+
31
19
  ###
32
- # @author Jonathan Bradley Whited (@esotericpig)
20
+ # @author Jonathan Bradley Whited
33
21
  # @since 0.1.0
34
22
  ###
35
23
  class AbstractMethodError < Error
36
24
  def initialize(msg=nil)
37
- if msg.nil?()
38
- method_name = caller[1]
39
-
40
- if !method_name.nil?()
41
- index = method_name.rindex('`')
42
-
43
- if !index.nil?() && (index += 1) < method_name.length
44
- method_name = method_name[index..-2]
45
-
46
- msg = "abstract method{#{method_name}(...)} not implemented"
47
- end
48
- end
25
+ if msg.is_a?(Symbol)
26
+ msg = "abstract method not implemented: #{msg}(...)"
49
27
  end
50
-
28
+
51
29
  super(msg)
52
30
  end
53
31
  end
54
-
32
+
55
33
  ###
56
- # @author Jonathan Bradley Whited (@esotericpig)
34
+ # @author Jonathan Bradley Whited
57
35
  # @since 0.1.0
58
36
  ###
59
37
  class ParseError < Error
@@ -0,0 +1,31 @@
1
+ # encoding: UTF-8
2
+ # frozen_string_literal: true
3
+
4
+ #--
5
+ # This file is part of SSC.Bot.
6
+ # Copyright (c) 2020-2021 Jonathan Bradley Whited
7
+ #
8
+ # SPDX-License-Identifier: LGPL-3.0-or-later
9
+ #++
10
+
11
+
12
+ begin
13
+ require 'java'
14
+ rescue LoadError => e
15
+ raise e.exception('Must use JRuby for Java-related files')
16
+ end
17
+
18
+ require 'ssc.bot/user/jrobot_message_sender'
19
+
20
+ module SSCBot
21
+ ###
22
+ # Require this file to include all JRuby (Java-related) files.
23
+ # Must be using JRuby.
24
+ # require 'ssc.bot/jruby'
25
+ #
26
+ # @author Jonathan Bradley Whited
27
+ # @since 0.1.2
28
+ ###
29
+ module JRuby
30
+ end
31
+ end
@@ -1,131 +1,120 @@
1
- #!/usr/bin/env ruby
2
1
  # encoding: UTF-8
3
2
  # frozen_string_literal: true
4
3
 
5
4
  #--
6
5
  # This file is part of SSC.Bot.
7
- # Copyright (c) 2020 Jonathan Bradley Whited (@esotericpig)
8
- #
9
- # SSC.Bot is free software: you can redistribute it and/or modify
10
- # it under the terms of the GNU Lesser General Public License as published by
11
- # the Free Software Foundation, either version 3 of the License, or
12
- # (at your option) any later version.
13
- #
14
- # SSC.Bot is distributed in the hope that it will be useful,
15
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
16
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
- # GNU Lesser General Public License for more details.
18
- #
19
- # You should have received a copy of the GNU Lesser General Public License
20
- # along with SSC.Bot. If not, see <https://www.gnu.org/licenses/>.
6
+ # Copyright (c) 2020-2021 Jonathan Bradley Whited
7
+ #
8
+ # SPDX-License-Identifier: LGPL-3.0-or-later
21
9
  #++
22
10
 
23
11
 
24
12
  require 'ssc.bot/util'
25
13
 
26
-
27
14
  module SSCBot
28
15
  ###
29
- # @author Jonathan Bradley Whited (@esotericpig)
16
+ # @author Jonathan Bradley Whited
30
17
  # @since 0.1.0
31
18
  ###
32
19
  class SSCFile < ::File
33
20
  DEFAULT_BUFFER_LEN = 520
34
21
  DEFAULT_ENCODING = 'Windows-1252:UTF-8'
35
22
  DEFAULT_MODE = 'rt'
36
- DEFAULT_SEPARATOR = /\r?\n|\r/ # Instead, could use +/\R/+ for Ruby v2.0+
37
-
23
+ DEFAULT_SEPARATOR = /\r?\n|\r/.freeze # Instead, could use +/\R/+ for Ruby v2.0+.
24
+
38
25
  # Clear (truncate) the contents of +filename+.
39
- #
26
+ #
40
27
  # @param filename [String] the file to clear
41
28
  # @param strip [Boolean] +true+ to strip +filename+ to help prevent fat-fingering, else +false+ to not
42
29
  def self.clear_content(filename,strip: true,textmode: true,**opt)
43
30
  filename = Util.u_strip(filename) if strip
44
-
45
- return if filename.empty?()
46
- return if !File.file?(filename) # Also checks if exists
47
-
31
+
32
+ return if filename.empty?
33
+ return unless File.file?(filename) # Also checks if exists.
34
+
48
35
  # Clear the file.
49
36
  # - Do NOT call truncate() as it's not available on all platforms.
50
- open(filename,'w',textmode: textmode,**opt) do |file|
37
+ self.open(filename,'w',textmode: textmode,**opt) do |file|
51
38
  end
52
39
  end
53
-
40
+
54
41
  # If +filename+ exists, then it does nothing (does *not* update time),
55
42
  # else, it creates the file.
56
- #
43
+ #
57
44
  # I just prefer this over +FileUtils.touch+.
58
- #
45
+ #
59
46
  # @param filename [String] the file to soft touch
60
47
  # @param strip [Boolean] +true+ to strip +filename+ to help prevent fat-fingering, else +false+ to not
61
48
  def self.soft_touch(filename,strip: true,textmode: true,**opt)
62
49
  filename = Util.u_strip(filename) if strip
63
-
64
- return if filename.empty?()
50
+
51
+ return if filename.empty?
65
52
  return if File.exist?(filename)
66
-
53
+
67
54
  # Create the file.
68
- open(filename,'a',textmode: textmode,**opt) do |file|
55
+ self.open(filename,'a',textmode: textmode,**opt) do |file|
69
56
  end
70
57
  end
71
-
72
- def initialize(filename,mode=DEFAULT_MODE,buffer_len: DEFAULT_BUFFER_LEN,encoding: DEFAULT_ENCODING,separator: DEFAULT_SEPARATOR,**opt)
58
+
59
+ def initialize(filename,mode=DEFAULT_MODE,buffer_len: DEFAULT_BUFFER_LEN,encoding: DEFAULT_ENCODING,
60
+ separator: DEFAULT_SEPARATOR,**opt)
73
61
  super(filename,mode,encoding: encoding,**opt)
74
-
62
+
75
63
  @sscbot_buffer = nil
76
64
  @sscbot_buffer_len = buffer_len
77
65
  @sscbot_separator = separator
78
66
  end
79
-
80
- def get_line()
81
- if @sscbot_buffer.nil?()
67
+
68
+ # Read a universal line.
69
+ def read_uline
70
+ if @sscbot_buffer.nil?
82
71
  # See comment at loop below.
83
72
  # - Use gets() instead of eof?() because of this method's name.
84
73
  line = gets(nil,@sscbot_buffer_len)
85
-
86
- return nil if line.nil?() # Still EOF?
87
-
74
+
75
+ return nil if line.nil? # Still EOF?
76
+
88
77
  @sscbot_buffer = line
89
78
  end
90
-
79
+
91
80
  lines = @sscbot_buffer.split(@sscbot_separator,2)
92
-
81
+
93
82
  # Will only have 2 if there was a separator.
94
83
  if lines.length == 2
95
84
  @sscbot_buffer = lines[1]
96
-
85
+
97
86
  return lines[0]
98
87
  end
99
-
88
+
100
89
  # - Use a separator of nil to get all of the different types of newlines.
101
90
  # - Use gets() [instead of read(), etc.] to work probably with text (e.g., UTF-8)
102
91
  # and to not throw an error at EOF (returns nil).
103
- while !(line = gets(nil,@sscbot_buffer_len)).nil?()
92
+ while !(line = gets(nil,@sscbot_buffer_len)).nil?
104
93
  lines = line.split(@sscbot_separator,2)
105
-
94
+
106
95
  # Will only have 2 if there was a separator.
107
96
  if lines.length == 2
108
97
  line = "#{@sscbot_buffer}#{lines[0]}"
109
98
  @sscbot_buffer = lines[1]
110
-
99
+
111
100
  return line
112
101
  else
113
102
  @sscbot_buffer << line
114
103
  end
115
104
  end
116
-
105
+
117
106
  # EOF reached with text in the buffer.
118
107
  line = @sscbot_buffer
119
108
  @sscbot_buffer = nil
120
-
109
+
121
110
  return line
122
111
  end
123
-
124
- def seek_to_end()
112
+
113
+ def seek_to_end
125
114
  result = seek(0,:END)
126
-
127
- get_line() # Justin Case
128
-
115
+
116
+ read_uline # Justin Case
117
+
129
118
  return result
130
119
  end
131
120
  end