ma wiki-irc-bot: use newsbot-js instead of logstash
This commit is contained in:
parent
665021f4c1
commit
33dae609d0
@ -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";
|
||||
};
|
||||
}
|
||||
|
@ -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
|
45
makefu/2configs/deployment/wiki-irc-bot/wiki-output.patch
Normal file
45
makefu/2configs/deployment/wiki-irc-bot/wiki-output.patch
Normal 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)
|
Loading…
Reference in New Issue
Block a user