| Initial commit - nextbike - Lita Slack chatbot plugin for nextbike interactions. | |
| Log | |
| Files | |
| Refs | |
| README | |
| --- | |
| commit 313798ba3af4f11ab53e9bb687a082db17e87302 | |
| Author: Jay Scott <[email protected]> | |
| Date: Fri, 24 Feb 2017 16:16:46 +0000 | |
| Initial commit | |
| Diffstat: | |
| A Gemfile | 16 ++++++++++++++++ | |
| A Gemfile.lock | 90 +++++++++++++++++++++++++++++… | |
| A handlers/nextbike.rb | 86 ++++++++++++++++++++++++++++++ | |
| A lita_config.rb | 35 +++++++++++++++++++++++++++++… | |
| A requirements.txt | 1 + | |
| A templates/nextbike_cities.slack.erb | 5 +++++ | |
| A templates/nextbike_location.slack.… | 5 +++++ | |
| 7 files changed, 238 insertions(+), 0 deletions(-) | |
| --- | |
| diff --git a/Gemfile b/Gemfile | |
| @@ -0,0 +1,16 @@ | |
| +source "https://rubygems.org" | |
| + | |
| +# Core | |
| +gem "lita" | |
| + | |
| +# Adapters | |
| +gem 'lita-slack' | |
| + | |
| +# Plugins | |
| +gem 'lita-dig', '~> 1.3' | |
| +gem 'lita-whois', '~> 1.1' | |
| +gem "lita-rules" | |
| +gem 'lita-ai' | |
| + | |
| +#Deps | |
| +gem 'nokogiri', '~> 1.6', '>= 1.6.8' | |
| diff --git a/Gemfile.lock b/Gemfile.lock | |
| @@ -0,0 +1,90 @@ | |
| +GEM | |
| + remote: https://rubygems.org/ | |
| + specs: | |
| + cleverbot_io (1.2.2) | |
| + httpclient (~> 2.8) | |
| + oj (~> 2.15) | |
| + eventmachine (1.2.1) | |
| + faraday (0.11.0) | |
| + multipart-post (>= 1.2, < 3) | |
| + faye-websocket (0.10.5) | |
| + eventmachine (>= 0.12.0) | |
| + websocket-driver (>= 0.5.1) | |
| + htmlentities (4.3.4) | |
| + http_router (0.11.2) | |
| + rack (>= 1.0.0) | |
| + url_mount (~> 0.2.1) | |
| + httpclient (2.8.3) | |
| + i18n (0.7.0) | |
| + ice_nine (0.11.2) | |
| + lita (4.7.1) | |
| + bundler (>= 1.3) | |
| + faraday (>= 0.8.7) | |
| + http_router (>= 0.11.2) | |
| + i18n (>= 0.6.9) | |
| + ice_nine (>= 0.11.0) | |
| + multi_json (>= 1.7.7) | |
| + puma (>= 2.7.1) | |
| + rack (>= 1.5.2, < 2.0.0) | |
| + rb-readline (>= 0.5.1) | |
| + redis-namespace (>= 1.3.0) | |
| + thor (>= 0.18.1) | |
| + lita-ai (0.1.3) | |
| + cleverbot_io (~> 1.2.2) | |
| + htmlentities (~> 4.3) | |
| + lita (>= 4.6) | |
| + lita-dig (1.3.0) | |
| + lita (>= 4.2) | |
| + net-dns2 | |
| + lita-rules (0.0.1) | |
| + lita (>= 3.0) | |
| + lita-slack (1.8.0) | |
| + eventmachine | |
| + faraday | |
| + faye-websocket (>= 0.8.0) | |
| + lita (>= 4.7.1) | |
| + multi_json | |
| + lita-whois (1.1.0) | |
| + lita (~> 4.2) | |
| + whois | |
| + mini_portile2 (2.1.0) | |
| + multi_json (1.12.1) | |
| + multipart-post (2.0.0) | |
| + net-dns2 (0.8.7) | |
| + packetfu | |
| + network_interface (0.0.1) | |
| + nokogiri (1.7.0.1) | |
| + mini_portile2 (~> 2.1.0) | |
| + oj (2.18.1) | |
| + packetfu (1.1.11) | |
| + network_interface (~> 0.0) | |
| + pcaprub (~> 0.12) | |
| + pcaprub (0.12.4) | |
| + puma (3.6.2) | |
| + rack (1.6.5) | |
| + rb-readline (0.5.3) | |
| + redis (3.3.2) | |
| + redis-namespace (1.5.2) | |
| + redis (~> 3.0, >= 3.0.4) | |
| + thor (0.19.4) | |
| + url_mount (0.2.1) | |
| + rack | |
| + websocket-driver (0.6.4) | |
| + websocket-extensions (>= 0.1.0) | |
| + websocket-extensions (0.1.2) | |
| + whois (4.0.1) | |
| + | |
| +PLATFORMS | |
| + ruby | |
| + | |
| +DEPENDENCIES | |
| + lita | |
| + lita-ai | |
| + lita-dig (~> 1.3) | |
| + lita-rules | |
| + lita-slack | |
| + lita-whois (~> 1.1) | |
| + nokogiri (~> 1.6, >= 1.6.8) | |
| + | |
| +BUNDLED WITH | |
| + 1.13.5 | |
| diff --git a/handlers/nextbike.rb b/handlers/nextbike.rb | |
| @@ -0,0 +1,86 @@ | |
| +require 'nokogiri' | |
| +require 'open-uri' | |
| + | |
| +module Lita | |
| + module Handlers | |
| + | |
| + class NextBike < Handler | |
| + REDIS_CITY_KEY = "nc_" | |
| + | |
| + template_root File.expand_path("../../templates", __FILE__) | |
| + route('nextbike', :nextbike, help: { "nextbike" => "Shows how many bikes… | |
| + route('nextbike status', :status) | |
| + route('nextbike update', :update) | |
| + route('nextbike show cities', :listcities) | |
| + route(/^nextbike show location\s(.+)/, :listlocation) | |
| + | |
| + def status(response) | |
| + response.reply "Status: All good in the hood." | |
| + end | |
| + | |
| + def update(response) | |
| + doc = Nokogiri::XML(open("https://nextbike.net/maps/nextbike-official.… | |
| + count = 0 | |
| + doc.search('//country//city').each do |data| | |
| + uid = data['uid'] | |
| + name = data['name'] | |
| + redis.hset(REDIS_CITY_KEY,uid,name) | |
| + count+=1 | |
| + end | |
| + response.reply "*Update*: #{count} cities added/refreshed." | |
| + end | |
| + | |
| + def listcities(response) | |
| + city_list = redis.hvals(REDIS_CITY_KEY) | |
| + if city_list.empty? | |
| + response.reply("*Info*: No cities are stored, run update?") | |
| + else | |
| + response.reply(render_template("nextbike_cities.slack", data: city_l… | |
| + end | |
| + end | |
| + | |
| + def getUID | |
| + end | |
| + | |
| + def getName | |
| + end | |
| + | |
| + def listlocation(response) | |
| + city_uid = nil | |
| + city_name = response.matches.first | |
| + city_list = redis.hgetall(REDIS_CITY_KEY) | |
| + city_list.each do |key, value| | |
| + if "#{value.downcase}" == "#{city_name.first}" | |
| + city_uid = key | |
| + end | |
| + end | |
| + | |
| + if city_uid.nil? | |
| + response.reply("*Info*: Could not find the city #{city_name.first}… | |
| + return true | |
| + end | |
| + | |
| + doc = Nokogiri::XML(open("https://nextbike.net/maps/nextbike-official.… | |
| + location_list = [] | |
| + doc.search('//country//city//place').each do |data| | |
| + location_list.push(data['name']) | |
| + end | |
| + | |
| + response.reply(render_template("nextbike_location.slack", data: locati… | |
| + end | |
| + | |
| + def nextbike(response) | |
| + doc = Nokogiri::XML(open("https://nextbike.net/maps/nextbike-official.… | |
| + doc.search('//country//city//place').each do |data| | |
| + if data['uid'] == "264308" | |
| + response.reply("*#{data['name']}* has *#{data['bikes']}* bikes lef… | |
| + end | |
| + end | |
| + end | |
| + | |
| + end | |
| + | |
| + Lita.register_handler(NextBike) | |
| + | |
| + end | |
| +end | |
| diff --git a/lita_config.rb b/lita_config.rb | |
| @@ -0,0 +1,35 @@ | |
| +require './handlers/nextbike.rb' | |
| + | |
| +Lita.configure do |config| | |
| + | |
| + # Core | |
| + config.robot.name = "Gendry" | |
| + config.robot.alias = "#" | |
| + config.robot.locale = :en | |
| + config.robot.log_level = :info | |
| + #config.robot.adapter = :shell | |
| + config.robot.admins = ["U3NREU9U0", "U09ADE44V"] | |
| + | |
| + # Adapter | |
| + config.robot.adapter = :slack | |
| + config.adapters.slack.token = "" | |
| + config.adapters.slack.link_names = true | |
| + config.adapters.slack.parse = "full" | |
| + config.adapters.slack.unfurl_links = false | |
| + config.adapters.slack.unfurl_media = false | |
| + | |
| + # Redis & HTTP | |
| + config.redis.host = "" | |
| + config.redis.port = 6379 | |
| + config.http.port = 7777 | |
| + | |
| + # Plugins | |
| + | |
| + # lita-dig | |
| + config.handlers.dig.default_resolver = '8.8.8.8' | |
| + | |
| + # lita-ai | |
| + config.handlers.ai.api_user = '' | |
| + config.handlers.ai.api_key = '' | |
| + | |
| +end | |
| diff --git a/requirements.txt b/requirements.txt | |
| @@ -0,0 +1 @@ | |
| +libpcap-devel | |
| diff --git a/templates/nextbike_cities.slack.erb b/templates/nextbike_cities.sl… | |
| @@ -0,0 +1,5 @@ | |
| +<% @data.each do | name | %> | |
| + • <%= name %> | |
| +<% end %> | |
| + | |
| + | |
| diff --git a/templates/nextbike_location.slack.erb b/templates/nextbike_locatio… | |
| @@ -0,0 +1,5 @@ | |
| +<% @data.each do | name | %> | |
| + • <%= name %> | |
| +<% end %> | |
| + | |
| + |