commandrb 0.3.0 → 0.4.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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/commandrb.rb +90 -28
  3. metadata +4 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1bdd7c0e995d1b0fd6a818164558252a72dd277a
4
- data.tar.gz: 7a62a408b7e2f853bce21d3ee5a950afb8fd1713
3
+ metadata.gz: 8e157c31805af8a1a19398b332dd1e711acc6086
4
+ data.tar.gz: d9811c8a83caac8570795fb1e4525d2585dd72cf
5
5
  SHA512:
6
- metadata.gz: d60c6b925fc8dfb87529e61c2ef215403b0f65a07aa8a3e809050a52727434a77109397bd12cd96b73f39e1f1ac1dd52b495ffba685bdbff2f5aede33fa618fc
7
- data.tar.gz: 226676ac73f60169d62f45c53ddbf43e825a1ec75d12b63593a90d1f5c4a5e0b83d58909b81c9776501e5175490fd5a277fc343208d0e6a334e88e30741b6a0c
6
+ metadata.gz: d4f15b5e1e82bb14df045c85e207737c29a4b43fa44fbfcbd15d4d8b877dafdb7ef52dac2a0b45efdb422e55f8cd6d323de35617917743e41ccceee0ea1eac01
7
+ data.tar.gz: 9acb080178dd98a8c15eacdd1673fefc9006be37db103e574cf481a5dea5bffe0e0ff3f63b25ccfde97ff70129f497ed0aa5edce3e96c991aba6ae16d1bd2e50
@@ -1,4 +1,8 @@
1
+ require_relative 'helper'
2
+
1
3
  class CommandrbBot
4
+
5
+ ENV['COMMANDRB_MODE'] == 'debug' ? @debug_mode = true : @debug_mode = false
2
6
 
3
7
  # Be able to adjust the config on the fly.
4
8
  attr_accessor :config
@@ -41,7 +45,7 @@ class CommandrbBot
41
45
  @config[:delete_activators] = false if @config[:delete_activators].nil?
42
46
 
43
47
  if @config[:token].nil? or init_hash[:token] == ''
44
- puts 'No token supplied in init hash!'
48
+ raise 'No token supplied in init hash!'
45
49
  return false
46
50
  end
47
51
 
@@ -50,12 +54,13 @@ class CommandrbBot
50
54
 
51
55
  if init_type == :bot
52
56
  if init_hash[:client_id].nil?
53
- puts 'No client ID or invalid client ID supplied in init hash!'
57
+ raise 'No client ID or invalid client ID supplied in init hash!'
54
58
  return false
55
59
  end
56
60
  end
57
61
 
58
62
  @config[:owners] = init_hash[:owners]
63
+ @config[:owners] = [] if @config[:owners].nil?
59
64
 
60
65
  @prefixes = init_hash[:prefixes]
61
66
 
@@ -76,6 +81,7 @@ class CommandrbBot
76
81
 
77
82
  # Command processing
78
83
  @bot.message do |event|
84
+ @finished = false
79
85
  @command = nil
80
86
  @event = nil
81
87
  @chosen = nil
@@ -83,15 +89,20 @@ class CommandrbBot
83
89
  @rawargs = nil
84
90
  @continue = false
85
91
  @prefixes.each { |prefix|
92
+ break if @finished
86
93
  if event.message.content.start_with?(prefix)
87
94
 
88
95
  @commands.each { | key, command |
96
+ break if @finished
97
+ puts ":: Considering #{key.to_s}" if @debug_mode
89
98
  triggers = command[:triggers].nil? ? [key.to_s] : command[:triggers]
90
99
 
91
100
  triggers.each { |trigger|
92
101
  @activator = prefix + trigger.to_s
102
+ puts @activator if @debug_mode
93
103
  @activator = @activator.downcase
94
104
  if event.message.content.downcase.start_with?(@activator)
105
+ puts "Prefix matched! #{@activator}" if @debug_mode
95
106
 
96
107
  # Continue only if you've already chosen a choice.
97
108
  unless @chosen.nil?
@@ -99,20 +110,26 @@ class CommandrbBot
99
110
  # Example: sh is chosen, shell is the new one.
100
111
  # In this example, shell would override sh, preventing ugly bugs.
101
112
  if @activator.start_with?(@chosen)
113
+ puts "#{@activator} just overrode #{@chosen}" if @debug_mode
102
114
  @chosen = @activator
103
115
  # Otherwhise, just give up.
104
116
  else
117
+ puts "Match failed..." if @debug_mode
105
118
  next
106
119
  end
107
120
  # If you haven't chosen yet, get choosing!
108
121
  else
122
+ puts "First match obtained!" if @debug_mode
109
123
  @continue = true
110
124
  @chosen = @activator
111
125
  end
112
126
  end
113
127
  }
128
+
129
+ puts "Result: #{@chosen}" if @debug_mode
114
130
 
115
- next unless @continue
131
+ next if !@continue
132
+ puts "Final esult: #{@chosen}" if @debug_mode
116
133
 
117
134
  break if @config[:selfbot] && event.user.id != @bot.profile.id
118
135
 
@@ -125,9 +142,20 @@ class CommandrbBot
125
142
  command[:delete_activator] = @config[:delete_activators] if command[:delete_activator].nil?
126
143
 
127
144
  # If the command is set to owners only and the user is not the owner, show error and abort.
145
+ puts "[DEBUG] Command being processed: '#{command}'" if @debug_mode
146
+ puts "[DEBUG] Owners only? #{command[:owners_only]}" if @debug_mode
128
147
  if command[:owners_only]
129
- unless @config[:owners].include?(event.user.id)
130
- event.respond('❌ You don\'t have permission for that!')
148
+ if !@config[:owners].include?(event.user.id)
149
+ event.channel.send_message('', false,
150
+ Helper.error_embed(
151
+ error: "You don't have permission for that!\nOnly owners are allowed to access this command.",
152
+ footer: "Command: `#{event.message.content}`",
153
+ colour: 0xFA0E30,
154
+ code_error: false
155
+ )
156
+ )
157
+ puts 'Were returning!'
158
+ @finished = true
131
159
  next
132
160
  end
133
161
  end
@@ -151,6 +179,7 @@ class CommandrbBot
151
179
  event.respond('❌ This command will only work in servers!')
152
180
  end
153
181
  # Abort!
182
+ @finished = true
154
183
  next
155
184
  end
156
185
 
@@ -158,47 +187,80 @@ class CommandrbBot
158
187
  # ...then abort :3
159
188
  if (event.user.bot_account? && command[:parse_bots] == false) || (event.user.bot_account? && @config[:parse_bots] == false)
160
189
  # Abort!
190
+ @finished = true
161
191
  next
162
192
  end
163
193
 
164
194
  # If the config is setup to show typing messages, then do so.
165
195
  event.channel.start_typing if command[:typing]
166
196
 
167
- # Grabs the arguments from the command message without the command part.
168
- args = event.message.content.slice!(@activator.length, event.message.content.size)
169
- # Split the arguments into an array for easy usage.
170
- rawargs = args
171
- args = args.split(/ /)
197
+ args = event.message.content.split(' ')
198
+ # Parse args if args exist !
199
+ if args.length > 2
200
+ spaces = 1
201
+ # Prefixes with spaces are special and need to be parsed differently : )
202
+ if prefix.include? " "
203
+ spaces += prefix.count(' ')
204
+ args = event.message.content.slice!(args[0].size + args[1].size + spaces, event.message.content.size)
205
+ else
206
+ args = event.message.content.slice!(args[0].size + spaces, event.message.content.size)
207
+ end
208
+ # Split the argmuents into an array for easy usage but keep the raw args !!
209
+ rawargs = args
210
+ args = args.split(/ /)
211
+ end
212
+
172
213
 
173
214
  # Check the number of args for the command.
174
- if args.length > command[:max_args]
175
- # May be replaced with an embed.
176
- event.respond("❌ Too many arguments! \nMax arguments: `#{command[:max_args]}`")
177
- next
215
+ unless command[:max_args].nil?
216
+ if command[:max_args] > 0 && args.length > command[:max_args]
217
+ # May be replaced with an embed.
218
+ event.channel.send_message('', false,
219
+ Helper.error_embed(
220
+ error: "Too many arguments! \nMax arguments: `#{command[:max_args]}`",
221
+ footer: "Command: `#{event.message.content}`",
222
+ colour: 0xFA0E30,
223
+ code_error: false
224
+ )
225
+ )
226
+ break
227
+ end
178
228
  end
229
+
230
+ # If the command is configured to catch all errors, thy shall be done.
231
+ if !command[:catch_errors] || @config['catch_errors']
232
+ # Run the command code!
233
+ command[:code].call(event, args, rawargs)
234
+ else
235
+ # Run the command code, but catch all errors and output accordingly.
236
+ begin
237
+ command[:code].call(event, args, rawargs)
238
+ rescue Exception => e
239
+ event.respond("❌ An error has occured!! ```ruby\n#{e}```Please contact the bot owner with the above message for assistance.")
240
+ end
241
+ end
242
+
243
+ unless command[:required_permissions].nil?
244
+ command[:required_permissions].each { |x|
245
+ if event.user.on(event.server).permission?(x,event.channel)
246
+ event.respond('❌ You don\'t have permission for that!')
247
+ @finished = true
248
+ next
249
+ end
250
+ }
251
+ end
179
252
 
180
253
  # All done here.
254
+ puts "Finished!! Executed command: #{@chosen}" if @debug_mode
181
255
  @command = command
182
256
  @event = event
183
257
  @args = args
184
258
  @rawargs = rawargs
259
+ @finished = true
185
260
  break
186
261
  }
187
- # If the command is configured to catch all errors, thy shall be done.
188
- if !@command[:catch_errors] || @config['catch_errors']
189
- # Run the command code!
190
- @command[:code].call(@event, @args, @rawargs)
191
- else
192
- # Run the command code, but catch all errors and output accordingly.
193
- begin
194
- @command[:code].call(@event, @args, @rawargs)
195
- rescue Exception => e
196
- event.respond("❌ An error has occured!! ```ruby\n#{e}```Please contact the bot owner with the above message for assistance.")
197
- end
198
- end
199
- break
200
262
  end
201
263
  }
202
264
  end
203
265
  end
204
- end
266
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: commandrb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
- - Seriel Shirogane
7
+ - Erisa Komuro (Seriel)
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-07-10 00:00:00.000000000 Z
11
+ date: 2017-10-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: discordrb
@@ -57,7 +57,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
57
57
  version: '0'
58
58
  requirements: []
59
59
  rubyforge_project:
60
- rubygems_version: 2.6.11
60
+ rubygems_version: 2.6.12
61
61
  signing_key:
62
62
  specification_version: 4
63
63
  summary: Commandrb