- Portals
- The Current Year
- ED in the News
- Admins
- Help ED Rebuild
- Archive
- ED Bookmarklet
- Donate Bitcoin
Contact an admin on Discord or EDF if you want an account. Also fuck bots.
User:Interstellar Shipping & Trading/weaselbot: Difference between revisions
Jump to navigation
Jump to search
imported>Schnookums Created page with "These scripts require PHP and sqlite3. Launch rc.php and bot.php from the terminal. Weaselbot's job is to monitor recent changes. It is a bit slow because it retrieves a copy of ..." |
imported>Schnookums Created page with "These scripts require PHP and sqlite3. Launch rc.php and bot.php from the terminal. Weaselbot's job is to monitor recent changes. It is a bit slow because it retrieves a copy of ..." |
(4 intermediate revisions by the same user not shown) | |
(No difference)
|
Latest revision as of 06:43, 17 November 2013
These scripts require PHP and sqlite3. Launch rc.php and bot.php from the terminal. Weaselbot's job is to monitor recent changes. It is a bit slow because it retrieves a copy of Special:RecentChanges at regular intervals. So until we see the return of wikibot this will do.
irc://irc.wtfux.org/rc or join #rc
rc.php
<?php require "common.php"; $url = "https://encyclopediadramatica.es/index.php?title=Special:RecentChanges&limit=10"; $prefixes = array ( "(Molestation log);", "(Move log);", "(Plumbing log);", "(Upload log);", "(User creation log);", "(diff | hist)", ); $diffhist = array ( " . . Nm ", " . . m ", " . . ", ); function loop ($url) { global $diffhist, $prefixes, $db; $html = @file_get_contents ($url); if ($html !== false) { $x = strpos ($html, "<ul class=\"special\">"); if ($x !== false) { $y = strpos ($html, "<div class=\"printfooter\">", $x); $html = substr ($html, $x, $y - $x); $list = explode ("\n", $html); $list = array_reverse ($list); foreach ($list as $html) { $data = strip_tags ($html); $data = trim ($data); $data = htmlspecialchars_decode ($data, ENT_QUOTES); $data = str_replace ("(Talk | contribs)", "", $data); $data = str_replace (" ", " ", $data); if (strlen ($data) < 20 ) { continue; } $url = ""; foreach ($prefixes as $prefix) { if ($prefix) { $len = strlen ($prefix); $p = substr ($data, 0, $len); if ($p == $prefix) { switch ($p) { case "(diff | hist)": $data = substr ($data, $len - strlen ($data)); foreach ($diffhist as $p) { $len = strlen ($p); if (substr ($data, 0, $len) == $p) { $data = substr ($data, $len - strlen ($data)); break; } } $pos1 = strpos ($html, "<a href=\"/"); $pos1 = strpos ($html, "<a href=\"/", $pos1 + 1); $pos1 = strpos ($html, "<a href=\"/", $pos1 + 1); $pos2 = strpos ($html, "\" title=", $pos1); $len1 = strlen ("<a href=\"/"); $url = substr ($html, $pos1 + $len1, $pos2 - ($pos1 + $len1)); break; } break; } } } $sid = md5 ($data); print ("$data\n"); if ($url) { print ("$url\n"); } $result = dbquery (__LINE__, $db, "SELECT COUNT(sid) FROM rc WHERE sid=:sid", array ("sid"=>$sid)); $array = $result->fetchArray (SQLITE3_NUM); if (!$array[0]) { dbexec (__LINE__, $db, "INSERT INTO rc (sid,data,url) VALUES (:sid,:data,:url)", array ("sid"=>$sid,"data"=>$data,"url"=>$url)); } $url = ""; } } } } while (true) { loop ($url); sleep (5); } ?>
bot.php
<?php require "common.php"; $nick = "weaselbot"; $chan = "#rc"; $joinchan = "MODE $nick"; $joinedchan = "JOIN :$chan"; $server = "tcp://irc.wtfux.org:6667"; function loop () { global $nick, $chan, $joinchan, $joinedchan, $server, $db; $time = time (); $status = 0; $stream = stream_socket_client ($server, $errid, $errstr, 30); if (!$stream) { print ("$errid $errstr\n"); return; } function send ($socket, $data) { fwrite ($socket, "$data\r\n"); printf (">$data\n"); } send ($stream, "NICK $nick"); send ($stream, "USER $nick 8 * :$nick"); while (!feof ($stream)) { $data = fgets ($stream, 2048); $args = explode (" ", $data); if ($args[0] == "PING") { send ($stream, "PONG " . $args[1]); } switch ($status) { case 0: $pos = strpos ($data, $joinchan); if ($pos !== false) { send ($stream, "JOIN $chan"); $status = 1; } break; case 1: $pos = strpos ($data, $joinedchan); if ($pos !== false) { send ($stream, "PRIVMSG NickServ IDENTIFY $nickserv"); $status = 2; } break; case 2: $result = dbquery (__LINE__, $db, "SELECT * FROM rc WHERE status=:status ORDER BY uid ASC LIMIT 5", array ("status"=>0)); while ($array = $result->fetchArray (SQLITE3_ASSOC)) { dbexec (__LINE__, $db, "UPDATE rc SET status=:status WHERE uid=:uid", array ("status"=>1,"uid"=>$array["uid"])); if ($array["url"]) { $array["data"] .= (" https://encyclopediadramatica.es/" . $array["url"]); } print $array["data"] . "\n"; send ($stream, "PRIVMSG $chan " . $array["data"] . "\r\n"); } break; } echo $data; } } while (true) { loop (); sleep (60); // wait 60 secs before reconnecting } ?>
common.php
<?php require "login.php"; error_reporting (E_ALL); $db = new SQLite3 ("/Volumes/User/patrol/data.db"); if (!$db) { die ($db->lastErrorMsg () . "\n"); } function dbbindvalues ($db, $stmt, $bindvalues) { foreach ($bindvalues as $key => $val) { $stmt->bindValue (":$key", $val); } } function dbexec ($line, $db, $sql, $bindvalues) { $stmt = @$db->prepare ($sql); if (!$stmt) { die (__LINE__ . " " . $db->lastErrorMsg () . "\n"); } dbbindvalues ($db, $stmt, $bindvalues); $result = $stmt->execute (); if (!$result) { die (__LINE__ . " " . $db->lastErrorMsg () . "\n"); } return $result; } function dbquery ($line, $db, $sql, $bindvalues) { $result = dbexec ($line, $db, $sql, $bindvalues); return $result; } dbexec (__LINE__, $db, "CREATE TABLE IF NOT EXISTS rc (uid INTEGER PRIMARY KEY, sid CHAR(32) UNIQUE, status INT DEFAULT 0, data TEXT, url TEXT)", array ()); ?>