stats.rb 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. require './app/commands/base_command.rb'
  2. class StatsCommand < BaseCommand
  3. def self.opts
  4. {
  5. usage: {
  6. user: 'Searches for a discord user (need to @ them)',
  7. all: "Used to specify you'd like to view all stats, instead of level" +
  8. ' progress. If empty, will show level image'
  9. }
  10. }
  11. end
  12. def self.cmd
  13. desc = "Shows a user's stats, level, rank, and experience"
  14. @cmd ||= Command.new(:stats, desc, opts) do |event, name, all|
  15. return UserController.fetch_ghost_users(event) if name.match(/ghosts?/i) && Util::Roles.admin?(event.author)
  16. # Find appropriate User and Server Member
  17. user = User.find(UID.match(name)[1])
  18. member = event.server.member(UID.match(name)[1])
  19. case all
  20. when /all/i
  21. # Display all User stats
  22. show_stats(user, member)
  23. when /reroll/i
  24. if Util::Roles.admin?(event.author)
  25. # Generate new stats
  26. user.make_stats
  27. user.reload
  28. # Display
  29. show_stats(user, member)
  30. else
  31. # Can only re-roll if admin
  32. error_embed('Not Authorized!')
  33. end
  34. else
  35. # Generate stats image, and reply
  36. output_file = UsersController.stat_image(user, member)
  37. BotResponse.new(destination: event.channel.id, file: output_file)
  38. end
  39. rescue ActiveRecord::RecordNotFound => e
  40. error_embed(e.message)
  41. rescue StandardError => e
  42. error_embed(e.message)
  43. end
  44. end
  45. def self.example_command(event)
  46. user_id = Character.where(active: 'Active').order('RANDOM()').first.user_id
  47. member = event&.server&.member(user_id)
  48. member_name = member&.nickname || member&.name || 'user_name'
  49. case ['', 'all'].sample
  50. when ''
  51. ["@#{member_name}"]
  52. when 'all'
  53. ["@#{member_name}", 'all']
  54. end
  55. end
  56. def self.admin_opts
  57. {
  58. usage: {
  59. user: '@user',
  60. reroll: "Reroll will reroll user's stats"
  61. }
  62. }
  63. end
  64. end