ma wiki-irc-bot: use newsbot-js instead of logstash

This commit is contained in:
makefu 2017-08-22 11:21:32 +02:00
parent 7fa9cb75cb
commit bbdbee4d27
No known key found for this signature in database
GPG Key ID: 36F7711F3FC0F225
3 changed files with 58 additions and 87 deletions

View File

@ -1,67 +1,19 @@
{ pkgs, lib, ... }:
{ config, pkgs, ... }:
with lib;
let
port = 18872;
pkg = pkgs.lib.overrideDerivation pkgs.newsbot-js (original: {
patches = [ ./wiki-output.patch ];
});
newsfile = pkgs.writeText "feeds" ''
nixoswiki-bot|https://nixos.wiki/api.php?days=7&limit=50&hidecategorization=1&action=feedrecentchanges&feedformat=rss|#krebs
'';
in {
nixpkgs.config.packageOverrides = pkgs: with pkgs; {
logstash = pkgs.stdenv.lib.overrideDerivation pkgs.logstash (old: {
patches = [ ./irc-out-notice.patch ]; });
};
services.logstash = {
krebs.newsbot-js = {
enable = true;
inputConfig = ''
http {
port => ${toString port}
host => "127.0.0.1"
}
'';
filterConfig = ''
if ([pages]) {
ruby {
code => '
require "net/http"
require "net/https"
http = Net::HTTP.new("git.io", 443)
http.use_ssl = true
lines = []
event["pages"].each {|p|
url = "#{p["html_url"]}/_compare/#{p["sha"]}"
short_url = begin
request = Net::HTTP::Post.new "/"
request.set_form_data ({"url" => url })
response = http.request(request)
response["location"]
end
lines << "\"#{p["title"]}\" #{p["action"]} by #{event["sender"]["login"]} #{short_url}"
}
event["output"] = lines.join("\n")
'
}
}
'';
outputConfig = ''
file { path => "/tmp/logs.json" codec => "json_lines" }
if [output] {
irc {
channels => [ "#krebs", "#nixos" ]
host => "irc.freenode.net"
nick => "nixos-users-wiki"
format => "%{output}"
notice => true
}
}
'';
plugins = [ ];
};
services.nginx = {
enable = lib.mkDefault true;
virtualHosts."ghook.krebsco.de" = {
locations."/".proxyPass = "http://localhost:${toString port}/";
enableSSL = true;
enableACME = true;
forceSSL = true;
};
package = pkg;
ircServer = "chat.freenode.net";
feeds = newsfile;
urlShortenerHost = "go";
urlShortenerPort = "80";
};
}

View File

@ -1,26 +0,0 @@
index b63339d..8c8c747 100644
--- a/vendor/bundle/jruby/1.9/gems/logstash-output-irc-2.0.4/lib/logstash/outputs/irc.rb
+++ b/vendor/bundle/jruby/1.9/gems/logstash-output-irc-2.0.4/lib/logstash/outputs/irc.rb
@@ -48,6 +48,9 @@ class LogStash::Outputs::Irc < LogStash::Outputs::Base
# Static string after event
config :post_string, :validate => :string, :required => false
+ # Set this to true to send messages as notice
+ config :notice, :validate => :boolean, :default => false
+
public
def inject_bot(bot)
@@ -90,9 +93,9 @@ class LogStash::Outputs::Irc < LogStash::Outputs::Base
@bot.channels.each do |channel|
@logger.debug("Sending to...", :channel => channel, :text => text)
- channel.msg(pre_string) if !@pre_string.nil?
- channel.msg(text)
- channel.msg(post_string) if !@post_string.nil?
+ channel.send(pre_string, :notice => @notice) if !@pre_string.nil?
+ channel.send(text, :notice => @notice)
+ channel.send(post_string, :notice => @notice) if !@post_string.nil?
end # channels.each
end # def receive
end # class LogStash::Outputs::Irc

View File

@ -0,0 +1,45 @@
diff --git a/newsbot.js b/newsbot.js
index 42d0666..a284011 100644
--- a/newsbot.js
+++ b/newsbot.js
@@ -92,8 +92,9 @@ function create_feedbot (nick, uri, channels) {
}
function broadcast_new_item (item) {
+ console.log('Broadcasting item ',item.link)
return getShortLink(item.link, function (error, shortlink) {
- return broadcast(item.title + ' ' + shortlink)
+ return broadcast('"'+ item.title + '" edited by ' + item.author + ' ' + shortlink)
})
}
@@ -152,15 +153,18 @@ function create_feedbot (nick, uri, channels) {
if (client.lastItems) {
items.forEach(function (item) {
- if (!client.lastItems.hasOwnProperty(item.title)) {
+
+ if (!client.lastItems.hasOwnProperty(item.guid)) {
broadcast_new_item(item)
+ }else {
+ console.log("Item already seen:",item.guid)
}
})
}
client.lastItems = {}
items.forEach(function (item) {
- client.lastItems[item.title] = true
+ client.lastItems[item.guid] = true
})
return continue_loop()
@@ -199,6 +203,8 @@ function run_command (methodname, params, callback) {
}
function getShortLink (link, callback) {
+ callback(null,link)
+ return
var form = new FormData()
try {
form.append('uri', link)