Advertisement
Guest User

Untitled

a guest
Jun 23rd, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.04 KB | None | 0 0
  1.  
  2. dirs = [ "./locostats/lib", "./cinch/lib" ]
  3. dirs.each { |dir| $LOAD_PATH.unshift(dir) if File.directory?(dir) }
  4.  
  5. require 'cinch'
  6. require 'digest/md5'
  7.  
  8. require 'active_record'
  9. require 'locostats/activerecord/default'
  10. require 'locostats/activerecord/irc'
  11.  
  12. require 'config.rb'
  13.  
  14. class PsychoStatsPlugin
  15. include PsychoStats::GameStats
  16. include PsychoStats::Config
  17. include PsychoStats::Site
  18. include Cinch::Plugin
  19.  
  20. def is_admin(user, check_register = true)
  21. return true if $DEBUG
  22.  
  23. profile = Profile.find_by_irc(user.nick)
  24. return false if profile.nil?
  25. return false unless profile.user.accesslevel == 99
  26.  
  27. # an sql check is faster then an is_registered
  28. return is_registered(user) if check_register
  29. true
  30. end
  31.  
  32. def is_registered(user)
  33. return true if $DEBUG
  34. user.refresh
  35. user.authed?
  36. end
  37.  
  38. match /rank (.+)/, method: :execute_id
  39. match /rank$/, method: :execute
  40.  
  41. def rank(id)
  42. plr = Player.search(id)
  43. kd = sprintf "%.2f", plr.kills.to_f/plr.deaths
  44. "[#{plr.profile.cc}] #{id} rank is #{plr.rank} of #{Player.total_ranked} with #{plr.skill.to_i} points, kills: #{plr.kills} deaths: #{plr.deaths} KD: #{kd}"
  45. rescue
  46. "No player found with the id #{id}"
  47. end
  48.  
  49. def execute_id(m, id)
  50. m.reply(rank(id))
  51. end
  52.  
  53. def execute(m)
  54. m.reply(rank(m.user.nick))
  55. end
  56.  
  57.  
  58. match /status$/, method: :execute_status
  59.  
  60. def status
  61. Server.where(:enabled => true).collect { |s| "#{s.host}:#{s.port.to_s}" }.join (", ")
  62. end
  63.  
  64. def execute_status(m)
  65. m.reply(status)
  66. end
  67.  
  68. match /server add (.+):(\d+)\s+(.+)/, method: :execute_server_add
  69. match /server add (.+)\s+(\d+)\s+(.+)/, method: :execute_server_add
  70.  
  71. def server_add(host, port, password = nil)
  72. s = Server.where(:host => host, :port => port)
  73.  
  74. if s.size > 0
  75. s = s.first
  76. return "Server already exists" if s.rcon == password
  77. s.rcon = password
  78. s.save!
  79. "Password changed"
  80. else
  81. server = Server.new
  82. server.host = host
  83. server.port = port
  84. server.rcon = password if !password.nil?
  85. server.querytype = "halflife"
  86. server.enabled = true
  87. server.idx = 10
  88. max = Server.maximum(:id)
  89.  
  90. if max.nil?
  91. server.id = 1
  92. else
  93. server.id = max + 1
  94. end
  95.  
  96. server.save!
  97.  
  98. "Server successfully created"
  99. end
  100. rescue Exception => err
  101. "Couldn't add the server: #{err}"
  102. end
  103.  
  104. def execute_server_add(m, host, port, password)
  105. return unless is_admin(m.user)
  106. m.reply(server_add(host, port, password))
  107. end
  108.  
  109. match /server add (.+):(\d+)/, method: :execute_server_add_spec
  110. match /server add (.+)\s+(\d+)/, method: :execute_server_add_spec
  111.  
  112. def execute_server_add_spec(m, host, port)
  113. return unless is_admin(m.user)
  114. m.reply(server_add(host ,port))
  115. end
  116.  
  117. match /server del (\d+)/, method: :execute_server_del
  118. def server_del(num)
  119. return "Server successfully deleted" if Server.delete(num) == 1
  120. "No server with this index"
  121. rescue Exception => err
  122. m.reply "An error has occured: #{err}"
  123. end
  124.  
  125. def execute_server_del(m, num)
  126. return unless is_admin(m.user)
  127. m.reply(server_del(num))
  128. end
  129.  
  130. match /server del (.+):(\d)/, method: :execute_server_del_spec
  131. match /server del (.+)\s+(\d)/, method: :execute_server_del_spec
  132.  
  133. def server_del_spec(server, port)
  134. # TODO: find doesn't work correctly, fix it
  135. s = Server.find(:first, :conditions => [ "host = ? AND port = ?", server, port.to_i ])
  136. Server.del(s.primary_key)
  137. rescue Exception => err
  138. "No such server present"
  139. end
  140.  
  141. def execute_server_del_spec(m, server, port)
  142. return unless is_admin(m.user)
  143. m.reply(server_del_spec(server, port))
  144. end
  145.  
  146. match /server list/, method: :server_list
  147. def server_list(m)
  148. authed = is_admin(m.user)
  149. servers = Server.find(:all)
  150. m.reply "Total #{servers.size} servers:"
  151. servers.each do |server|
  152. if !m.channel? and authed
  153. m.reply "##{server.id} #{server.host} #{server.port} #{server.rcon}"
  154. else
  155. m.reply "##{server.id} #{server.host} #{server.port}"
  156. end
  157. end
  158. end
  159.  
  160. match /user available (.+)/, method: :available
  161. def available(m, player)
  162. return unless is_registered(m.user)
  163. player = Player.search(player)
  164. if !player.nil? and !player.profile.irc.nil?
  165. m.reply "This profile has already been taken"
  166. else
  167. m.reply "This profile is still available"
  168. end
  169. end
  170.  
  171. match /user register \"(.+)\" \"(.+)\"/, method: :execute_register
  172.  
  173. def execute_register(m, player, password)
  174. return unless is_registered(m.user)
  175. m.reply(register(m.user.nick, player, password))
  176. end
  177.  
  178. def register(nick, playername, password)
  179.  
  180. already = Profile.find_by_irc(nick)
  181.  
  182. return "You have already a registered profile" if !already.nil?
  183.  
  184. player = Player.search(playername)
  185.  
  186. return "There is no such profile" if player.nil?
  187.  
  188. return "This profile is already owned by you" if !player.user.nil? and player.profile.irc == nick
  189.  
  190. return "This profile is already owned by #{player.profile.irc}" if !player.user.nil?
  191.  
  192. user = User.create_irc(nick, password, player.profile)
  193.  
  194. p user.profile
  195.  
  196. "Error during registration process" if user.nil?
  197.  
  198. "Successfully registered the username #{nick} with profile #{player.names.first.name}"
  199. rescue Exception => err
  200. "Error during registration process #{err}"
  201. end
  202.  
  203. match /user drop$/, method: :drop
  204.  
  205. def drop(m)
  206. return unless is_registered(m.user)
  207.  
  208. profile = Profile.find_by_irc(m.user.nick)
  209.  
  210. User.delete(profile.userid)
  211.  
  212. profile.irc = nil
  213. profile.save!
  214. m.reply "Sucessfully dropped username"
  215. rescue
  216. m.reply "You are not registered"
  217. end
  218.  
  219. match /check$/, method: :check
  220. def check(m)
  221. authed = is_registered(m.user)
  222. admin = is_admin(m.user, false)
  223.  
  224. reply = []
  225. reply.push "authed" if authed
  226. reply.push "an admin" if admin
  227.  
  228. if reply.size > 0
  229. m.reply "You are " + reply.join(", ")
  230. else
  231. m.reply "A normal user"
  232. end
  233.  
  234. end
  235.  
  236. end
  237.  
  238. bot = Cinch::Bot.new do
  239. configure do |c|
  240. bot_config(c)
  241. c.plugins.plugins = [PsychoStatsPlugin]
  242. end
  243. end
  244.  
  245. bot.start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement