]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/blobdiff - bin/rbot-remote
rbot-remote: allow override of function
[user/henk/code/ruby/rbot.git] / bin / rbot-remote
index 353bb06d94d8ddb95c37b74b9c492306ecec274d..29005f633b9ce473e6e4ca065c41c6990de4dfe3 100755 (executable)
@@ -1,32 +1,38 @@
 #! /usr/bin/ruby
-require 'drb'
+
+require 'uri'
+require 'net/http'
 require 'optparse'
 
 #++
 #
-# :title: RemoteCtl example script
+# :title: webserver dispatch example script
 #
 # Author:: jsn (dmitry kim) <dmitry dot kim at gmail dot org>
 # Copyright:: (C) 2007 dmitry kim
 # License:: in public domain
+# Modified by:: Giuseppe "Oblomov" Bilotta <giuseppe dot bilotta at gmail dot com>
+# Copyright:: (C) 2020 Giuseppe Bilotta
 
 user = nil
 pw = nil
 dst = nil
-uri = 'druby://localhost:7268'
+function = 'say'
+uri = 'http://localhost:7268/dispatch'
 
 opts = OptionParser.new
 opts.on('-u', '--user <user>', "remote user (mandatory)") { |v| user = v }
 opts.on('-p', '--password <pw>', "remote user password (mandatory)") { |v| pw = v }
-opts.on('-d', '--destination <user or #channel>') { |v| dst = v }
+opts.on('-d', '--destination <user/#channel>', "destination of the action (mandatory)") { |v| dst = v }
+opts.on('-f', '--function <func>', "function to trigger (e.g. say, notify), default: #{function}") { |v| function = v }
 opts.on('-r', '--uri <drb uri>', "rbot url (#{uri})") { |v| uri = v }
 opts.on('-h', '--help', "this message") { |v| pw = nil } # sorry!
 opts.on('-a', '--about', "what it's all about.") { |v|
     puts <<EOF
-This is just a proof-of-concept example for rbot druby-based api. This program
-reads lines of text from the standard input and sends them to a specified irc
-channel or user via rbot. Make sure you have remotectl.rb plugin loaded before
-use.
+This is just a proof-of-concept example for the rbot webserver dispatch feature.
+This program reads lines of text from the standard input and sends them to a specified irc
+channel or user via rbot. Make sure you enable the webservice dispatch feature
+before use.
 
 The necessary setup is:
     1) # create a new rbot user ("rmuser", in this example) with a password
@@ -35,19 +41,12 @@ The necessary setup is:
        <you> user create rmuser rmpw
        <rbot> created botuser remote
 
-    2) # add a remotectl permission to your newly created remote user:
+    2) # add a permission to say for your newly created remote user:
 
-       <you> permissions set +remotectl for rmuser
+       <you> allow rmuser to do say #channel message
        <rbot> okies!
 
-    3) # add specific permissions for the commands you want to allow via
-       # remote interface. for example, in this script we want 'say',
-       # 'action' and other basic commands to work:
-
-       <you> permissions set +basics::talk::do for rmuser
-       <rbot> alright
-
-    4) # run the #{$0} and type something. the message should
+    3) # run the #{$0} and type something. the message should
        # show up on your channel / arrive as an irc private message.
        
        [you@yourhost ~]$ ./bin/rbot-remote -u rmuser -p rmpw -d '#your-channel'
@@ -64,13 +63,14 @@ if !pw || !user || !dst
     exit 0
 end
 
-rbot = DRbObject.new_with_uri(uri)
-id = rbot.delegate(nil, "remote login #{user} #{pw}")[:return]
-puts "id is #{id.inspect}"
+uri = URI(uri)
+uri.user = user
+uri.password = pw
+
 loop {
     s = gets or break
     s.chomp!
-    rv = rbot.delegate(id, "dispatch say #{dst} #{s}") or break
-    puts "rv is #{rv.inspect}"
+    resp = Net::HTTP.post_form(uri, 'command' => [function, dst, s].join(' '))
+    puts [resp.code, resp.message, resp.body].join("\t")
 }