pisg 1.0a keeps everything 0.80-preview2 does: the same parsers, the same statistics, the same
pisg.cfg. On top of that it has a new look, a set of new sections, a way to run several channels
from one folder, safer output, a guided setup, and tools to keep the statistics tidy without editing files
by hand.
Nothing you have set up has to change. The default colour scheme is still default, and every old theme
looks as it did. Everything new is opt-in through a colour scheme or an option, except the extra
sections, which are on by default (see Upgrading).
perl setup.pl finds your logs, writes the configuration, makes the first page and
explains how to run it on a schedule and host it for free. Made for people new to IRC tools.modern, midnight, amoled and terminal.
modern follows the reader's system setting.!pisginfo, !pisgmerge ...) and automatic nick
merging for networks with account services.perl setup.pl is the easy way in. It needs nothing but Perl, so it works on Linux, macOS and Windows.
eggdrop.conf for the log files), ZNC (all three
log-module layouts), irssi, WeeChat, HexChat/XChat and mIRC/AdiIRC, and shows what it found. If it finds
nothing it says how to turn logging on, or lets you point it at a folder and pick the log format.pisg.cfg, never overwriting an existing one (it backs it up first, or saves the new one as
pisg.cfg.new), copies the landing page, and makes the first statistics.schtasks command on Windows.perl setup.pl --dry-run shows what would be written without changing anything.
layout/build-themes.py), so they stay
consistent. Use one with <set ColorScheme="modern">. The old themes are unchanged.<set Charset="utf-8">: quotes, words and nicks in the new sections keep their
accented and non-Latin letters.All are on by default and can be switched off individually.
| Section | What it shows | Option |
|---|---|---|
| Channel overview | A headline sentence and the key facts: words, lines per day, busiest and quietest hour, questions, links, top talker, joins, kicks | ShowOverview |
| Who talks to whom | An interactive map of who addresses, mentions or answers whom. Click a nick or a line for details. Bots are left out | ShowRelations, RelationNicks, RelationMinWeight |
| Closest pairs | The strongest two-way conversations, with how they talk | ShowRelations |
| Social roles | Most talked to, most outgoing, connector, best listener, lone wolf | ShowRelations |
| Time personalities | Who owns the night, morning, afternoon and evening | ShowTimePersonalities |
| Who carries the channel | How much of the talk comes from the top 1, 3, 5, 10 and 20 | ShowConcentration |
| Signature words | The word each person uses a lot and hardly anyone else does | ShowSignatureWords |
The relation map spaces its nicks by how close they are, not to scale, so a busy channel does not crush
the middle of the map. Nicks marked sex="b" or ignore="y" are treated as bots.
English and French texts are included. Other languages fall back to English.
ShowNavBar, on by default)HomeLink): an "All channels" button above the title of every stats page that leads to
your landing page.site/index.html is a single static file: no PHP, no cron job, no libraries. It works on any static host,
including GitHub Pages. Copy it next to your stats pages.
pisg writes channels.json beside each page (option ChannelIndex) and the landing page turns it into
the statistics of the statistics:
Old links such as index.html#mychannel still jump to that channel. Names from the JSON are always shown as
plain text, and only plain relative .html paths are accepted as links.
| Option | Default | What it does |
|---|---|---|
ShowOverview |
on | The channel overview section |
ShowRelations |
on | The relation map, closest pairs and social roles |
RelationNicks |
30 | How many nicks the relation map shows |
RelationMinWeight |
3 | How strong a connection must be to be drawn |
ShowTimePersonalities |
on | Time personalities section |
ShowConcentration |
on | Who carries the channel section |
ShowSignatureWords |
on | Signature words section |
ShowNavBar |
on | The section bar and left menu |
HomeLink |
empty | Page the "All channels" button leads to (index.html, or an http(s) address). Empty or none: no button |
BadUrls |
empty | Words that keep a URL out of the URL statistics. Case-insensitive, matched anywhere in the URL, with * and ? wildcards (for example postimg.cc/*) |
ChannelIndex |
channels.json |
File pisg writes for the landing page. none turns it off |
pisg.cfg.example now lists every option with what it does, so it can be copied and used at once.
These are optional and live in scripts/.
eggdrop-pisg.tcl: profile commands for an eggdrop, in the channel (!pisg...) and in a private
message (pisg...). Nothing is stored in pisg itself: the bot writes users.cfg, which pisg reads
with <include="users.cfg">.
!pisghelp [command]: explains each command.!pisginfo: set your sex, picture and link.!pisgmerge / !pisgunmerge: count your other nicks as one person, or stop.!pisgshow, !pisgdel, and !pisgdeluser (bot masters only).!pisgstats: replies with the address of the stats page. It is open to everyone, and it no longer runs
pisg inside the bot.pisg.local.tcl next to the script, so an
update never overwrites them.getaccount, or the account host on Undernet),
can only claim the nick they are using, and cannot overwrite a <user> line you wrote by hand.
Changes are rate limited. There is a test suite: eggdrop-pisg-test.tcl (107 checks).pisg-autoalias.py: nicks seen with the same authenticated host (*.users.undernet.org) are one
person. It writes a file for pisg to include and can run before every pisg run. Your own <user> lines
always win. Shared hosts, gateways and bouncers are never merged. Test suite included.adiirc2eggdrop.py: turns an AdiIRC (or similar) channel log into eggdrop or ZNC logs, so old history
can be added to the statistics. It keeps public events only, converts local time to UTC, never
overwrites a file, and stops at the moment your real logging starts. --format znc writes what the ZNC
log module writes (one file per day, energymech format).znc-setup.sh: puts converted logs into a ZNC account's log folder and lets pisg, which runs as a different
Unix user, read only the channel folders it needs. It shows what it would do before it changes anything.Format="energymech" and a LogDir per channel.pisg.cfg can hold any number of <channel> blocks. If a channel cannot be read (a missing log
folder, a wrong format), pisg prints Skipped channel #name: reason, carries on with the others, and exits
with status 1 so cron or monitoring notices.LogDir (a folder of dated log files, read in date order), so eggdrop's daily
logs and ZNC's one-file-a-day logs can sit side by side in one config.BadUrls, so spam and image-host links can be left out.docs/pisg-doc.html: the whole manual as one web page, with a complete example configuration for a
#example channel at the end. Built from docs/pisg-doc.xml by docs/xml2html.py.pisg.cfg.example: every option, built by docs/gen-example-config.py.README.md has a short "what's new".pisg.cfg keeps working as it is. (New to pisg? Run perl setup.pl.)ShowOverview, ShowRelations, ShowTimePersonalities,
ShowConcentration, ShowSignatureWords and ShowNavBar to 0.<set ColorScheme="modern"> (or midnight, amoled, terminal).pisg now returns exit status 1 on failure. If a script or cron job treated any exit as success,
check what it does with the error.site/index.html into your output folder and run pisg once so
channels.json exists. Add <set HomeLink="index.html"> for the back button.Requirements are unchanged for pisg itself (Perl). The optional tools need Python 3 (converter, alias
generator), Tcl 8.6 and an eggdrop (the bot script), and JSON::PP, part of core Perl, for ChannelIndex.