user_controller.rb 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. class UsersController
  2. def self.stat_image(user, member, stats=nil)
  3. size_width = 570;
  4. size_height = 376;
  5. stats_frame = "images/LevelUp.png"
  6. level_up = "images/LevelUpFont.png"
  7. user_url_img = "images/Image_Builder/user_url_img.png"
  8. output_file = "images/Image_Builder/LevelUp"
  9. begin
  10. Down.download(member.avatar_url, destination: user_url_img)
  11. rescue Down::NotFound
  12. user_url_img = "images/Image_Builder/unknown_img.png"
  13. end
  14. #Gif Destroyer
  15. i = Magick::ImageList.new(user_url_img)
  16. i[0].write(user_url_img) if i.count > 1
  17. if stats
  18. merge_image(
  19. [stats_frame, level_up, user_url_img],
  20. output_file,
  21. size_width,
  22. size_height,
  23. [nil, nil, 19],
  24. [nil, nil, 92],
  25. [size_width, size_width, 165],
  26. [size_height, size_height, 165]
  27. )
  28. else
  29. merge_image(
  30. [stats_frame, user_url_img],
  31. output_file,
  32. size_width,
  33. size_height,
  34. [nil, 19],
  35. [nil, 92],
  36. [size_width, 165],
  37. [size_height, 165]
  38. )
  39. end
  40. last_level = user.level == 1 ? 0 : ((user.level + 4) **3) / 10.0
  41. this_level = user.next_level - last_level
  42. ratio = 1 - ((user.next_level - user.boosted_xp).to_f / this_level)
  43. user_name = member.nickname || member.name
  44. short_name = user_name.length > 15 ? "#{user_name[0..14]}..." : user_name
  45. rank = User.order(unboosted_xp: :desc)
  46. user_rank = rank.index{ |r| r.id == user.id } + 1
  47. gc = Draw.new
  48. gc.font('OpenSans-SemiBold.ttf')
  49. gc.stroke('#39c4ff').fill('#39c4ff')
  50. gc.rectangle(42, 48, 42 + (95 * ratio), 48 + 3)
  51. gc.stroke('none').fill('black')
  52. gc.pointsize('15')
  53. gc.text(15,25, short_name)
  54. gc.text(40, 45, "Lv.#{user.level}")
  55. gc.text(15, 290, "Rank: #{user_rank}")
  56. gc.text(40, 65, "Exp: #{user.boosted_xp}")
  57. gc.stroke('white').fill('white')
  58. gc.pointsize('30')
  59. gc.text(40,330, user_name)
  60. gc.text(40,360, "reached level #{user.level}!") if stats
  61. gc.text(40,360, "is level #{user.level}!") if !stats
  62. if stats
  63. gc.stroke('none').fill('black')
  64. gc.pointsize('18')
  65. gc.text(450, 97, stats['hp'].to_s)
  66. gc.text(450, 127, stats['attack'].to_s)
  67. gc.text(450, 159, stats['defense'].to_s)
  68. gc.text(450, 191, stats['sp_attack'].to_s)
  69. gc.text(450, 222, stats['sp_defense'].to_s)
  70. gc.text(450, 255, stats['speed'].to_s)
  71. gc.stroke('none').fill('maroon')
  72. gc.text(505, 97, "+ #{stats['hp'] - user.hp}")
  73. gc.text(505, 127, "+ #{stats['attack']- user.attack}")
  74. gc.text(505, 159, "+ #{stats['defense'] - user.defense}")
  75. gc.text(505, 191, "+ #{stats['sp_attack'] - user.sp_attack}")
  76. gc.text(505, 222, "+ #{stats['sp_defense']- user.sp_defense}")
  77. gc.text(505, 255, "+ #{stats['speed'] - user.speed}")
  78. else
  79. gc.stroke('none').fill('black')
  80. gc.pointsize('18')
  81. gc.text(450, 97, user.hp.to_s)
  82. gc.text(450, 127, user.attack.to_s)
  83. gc.text(450, 159, user.defense.to_s)
  84. gc.text(450, 191, user.sp_attack.to_s)
  85. gc.text(450, 222, user.sp_defense.to_s)
  86. gc.text(450, 255, user.speed.to_s)
  87. end
  88. u = Magick::ImageList.new("#{output_file}.png")
  89. gc.draw(u[0])
  90. u.write("#{output_file}.png")
  91. "#{output_file}.png"
  92. end
  93. def fetch_ghost_users(event)
  94. users = User.all
  95. ghosts = []
  96. users.each do |u|
  97. ghosts.push("<@#{u.id}>") if event.server.member(u.id).nil?
  98. end
  99. Embed.new(title: "Ghost Members", description: ghosts.join(", "))
  100. end
  101. end