ma wiki-irc-bot: use newsbot-js instead of logstash
This commit is contained in:
parent
7fa9cb75cb
commit
bbdbee4d27
@ -1,67 +1,19 @@
|
|||||||
{ pkgs, lib, ... }:
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
with lib;
|
|
||||||
let
|
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 {
|
in {
|
||||||
nixpkgs.config.packageOverrides = pkgs: with pkgs; {
|
krebs.newsbot-js = {
|
||||||
logstash = pkgs.stdenv.lib.overrideDerivation pkgs.logstash (old: {
|
|
||||||
patches = [ ./irc-out-notice.patch ]; });
|
|
||||||
};
|
|
||||||
services.logstash = {
|
|
||||||
enable = true;
|
enable = true;
|
||||||
inputConfig = ''
|
package = pkg;
|
||||||
http {
|
ircServer = "chat.freenode.net";
|
||||||
port => ${toString port}
|
feeds = newsfile;
|
||||||
host => "127.0.0.1"
|
urlShortenerHost = "go";
|
||||||
}
|
urlShortenerPort = "80";
|
||||||
'';
|
|
||||||
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;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -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