]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/commitdiff
Actually commit the halflife2 plugin
authorGiuseppe Bilotta <giuseppe.bilotta@gmail.com>
Fri, 11 Aug 2006 12:33:33 +0000 (12:33 +0000)
committerGiuseppe Bilotta <giuseppe.bilotta@gmail.com>
Fri, 11 Aug 2006 12:33:33 +0000 (12:33 +0000)
data/rbot/plugins/hl2.rb [new file with mode: 0644]

diff --git a/data/rbot/plugins/hl2.rb b/data/rbot/plugins/hl2.rb
new file mode 100644 (file)
index 0000000..e062343
--- /dev/null
@@ -0,0 +1,55 @@
+# Plugin for the Ruby IRC bot (http://linuxbrit.co.uk/rbot/)\r
+#\r
+# Simple Half-Life 2 (Source Engine) plugin to query online\r
+# servers to see if its online and kicking and how many users.\r
+#\r
+# Added 2 seconds timeout to the response. And sockets are now\r
+# closing properly.\r
+#\r
+# (c) 2006 Ole Christian Rynning <oc@rynning.no>\r
+# Licensed under GPL V2.\r
+\r
+require 'socket'\r
+require 'timeout'\r
+class HL2Plugin < Plugin\r
+\r
+  A2S_INFO = "\xFF\xFF\xFF\xFF\x54\x53\x6F\x75\x72\x63\x65\x20\x45\x6E\x67\x69\x6E\x65\x20\x51\x75\x65\x72\x79\x00"\r
+\r
+  TIMEOUT = 2\r
+\r
+  def a2s_info(addr, port)\r
+    socket = UDPSocket.new()\r
+    socket.send(A2S_INFO, 0, addr, port.to_i)\r
+    response = nil\r
+\r
+    begin\r
+      timeout(TIMEOUT) do\r
+        response = socket.recvfrom(1400,0)\r
+      end\r
+    rescue Exception\r
+    end\r
+\r
+    socket.close()\r
+    response ? response.first.unpack("iACZ*Z*Z*Z*sCCCaaCCZ*") : nil\r
+  end\r
+\r
+  def help(plugin, topic="")\r
+    "hl2 'server:port' => show basic information about the given server"\r
+  end\r
+\r
+  def hl2(m, params)\r
+    addr, port = params[:conn_str].split(':')\r
+    Thread.start do\r
+      info = a2s_info(addr, port)\r
+      if info != nil\r
+        m.reply "#{info[3]} is online with #{info[8]}/#{info[9]} players."\r
+      else\r
+        m.reply "Couldn't connect to #{params[:conn_str]}"\r
+      end\r
+    end\r
+  end\r
+\r
+end\r
+plugin = HL2Plugin.new\r
+plugin.map 'hl2 :conn_str'\r
+\r