use
5.6.0;
use
vars
qw($VERSION %IRSSI)
;
$VERSION
=
'2.4.3'
;
%IRSSI
= (
authors
=>
'Clemens Heidinger'
,
changed
=>
'$LastChangedDate: 2008-02-03 16:27:25 +0100 (Sun, 03 Feb 2008) $'
,
commands
=>
'dau'
,
contact
=>
'heidinger@dau.pl'
,
description
=>
'write like an idiot'
,
license
=>
'BSD'
,
modules
=>
'File::Basename File::Path IPC::Open3 POSIX Tie::File'
,
name
=>
'DAU'
,
sbitems
=>
'daumode'
,
);
Irssi::command_bind(
'dau'
, \
&command_dau
);
Irssi::settings_add_bool(
'misc'
,
'dau_away_quote_reason'
, 1);
Irssi::settings_add_bool(
'misc'
,
'dau_away_reminder'
, 0);
Irssi::settings_add_bool(
'misc'
,
'dau_babble_verbose'
, 1);
Irssi::settings_add_bool(
'misc'
,
'dau_color_choose_colors_randomly'
, 1);
Irssi::settings_add_bool(
'misc'
,
'dau_cowsay_print_cow'
, 0);
Irssi::settings_add_bool(
'misc'
,
'dau_figlet_print_font'
, 0);
Irssi::settings_add_bool(
'misc'
,
'dau_silence'
, 0);
Irssi::settings_add_bool(
'misc'
,
'dau_statusbar_daumode_hide_when_off'
, 0);
Irssi::settings_add_bool(
'misc'
,
'dau_tab_completion'
, 1);
Irssi::settings_add_int(
'misc'
,
'dau_babble_history_size'
, 10);
Irssi::settings_add_int(
'misc'
,
'dau_babble_verbose_minimum_lines'
, 2);
Irssi::settings_add_int(
'misc'
,
'dau_cool_maximum_line'
, 2);
Irssi::settings_add_int(
'misc'
,
'dau_cool_probability_eol'
, 20);
Irssi::settings_add_int(
'misc'
,
'dau_cool_probability_word'
, 20);
Irssi::settings_add_int(
'misc'
,
'dau_remote_babble_interval_accuracy'
, 90);
Irssi::settings_add_str(
'misc'
,
'dau_away_away_text'
,
'$N is away now: [ $reason ]. Away since: $Z. I am currently not available at $T @ $chatnet (sry 4 amsg)!'
);
Irssi::settings_add_str(
'misc'
,
'dau_away_back_text'
,
'$N is back: [ $reason ]. Away time: [ $time ]. I am available again at $T @ $chatnet (sry 4 amsg)!'
);
Irssi::settings_add_str(
'misc'
,
'dau_away_options'
,
"--parse_special --bracket -left '!---?[' -right ']?---!' --color -split capitals -random off -codes 'light red; yellow',"
.
"--parse_special --bracket -left '--==||{{' -right '}}||==--' --color -split capitals -random off -codes 'light red; light cyan',"
.
"--parse_special --bracket -left '--==||[[' -right ']]||==--' --color -split capitals -random off -codes 'yellow; light green'"
);
Irssi::settings_add_str(
'misc'
,
'dau_away_reminder_interval'
,
'1 hour'
);
Irssi::settings_add_str(
'misc'
,
'dau_away_reminder_text'
,
'$N is still away: [ $reason ]. Away time: [ $time ] (sry 4 amsg)'
);
Irssi::settings_add_str(
'misc'
,
'dau_babble_options_line_by_line'
,
'--nothing'
);
Irssi::settings_add_str(
'misc'
,
'dau_babble_options_preprocessing'
,
''
);
Irssi::settings_add_str(
'misc'
,
'dau_color_codes'
,
'blue; green; red; magenta; yellow; cyan'
);
Irssi::settings_add_str(
'misc'
,
'dau_cool_eol_style'
,
'random'
);
Irssi::settings_add_str(
'misc'
,
'dau_cowsay_cowlist'
,
''
);
Irssi::settings_add_str(
'misc'
,
'dau_cowsay_cowpath'
,
&def_dau_cowsay_cowpath
);
Irssi::settings_add_str(
'misc'
,
'dau_cowsay_cowpolicy'
,
'allow'
);
Irssi::settings_add_str(
'misc'
,
'dau_cowsay_cowsay_path'
,
&def_dau_cowsay_cowsay_path
);
Irssi::settings_add_str(
'misc'
,
'dau_cowsay_cowthink_path'
,
&def_dau_cowsay_cowthink_path
);
Irssi::settings_add_str(
'misc'
,
'dau_daumode_channels'
,
''
);
Irssi::settings_add_str(
'misc'
,
'dau_delimiter_string'
,
' '
);
Irssi::settings_add_str(
'misc'
,
'dau_figlet_fontlist'
,
'mnemonic,term,ivrit'
);
Irssi::settings_add_str(
'misc'
,
'dau_figlet_fontpath'
,
&def_dau_figlet_fontpath
);
Irssi::settings_add_str(
'misc'
,
'dau_figlet_fontpolicy'
,
'allow'
);
Irssi::settings_add_str(
'misc'
,
'dau_figlet_path'
,
&def_dau_figlet_path
);
Irssi::settings_add_str(
'misc'
,
'dau_files_away'
,
'.away'
);
Irssi::settings_add_str(
'misc'
,
'dau_files_babble_messages'
,
'babble_messages'
);
Irssi::settings_add_str(
'misc'
,
'dau_files_cool_suffixes'
,
'cool_suffixes'
);
Irssi::settings_add_str(
'misc'
,
'dau_files_root_directory'
,
"$ENV{HOME}/.dau"
);
Irssi::settings_add_str(
'misc'
,
'dau_files_substitute'
,
'substitute.pl'
);
Irssi::settings_add_str(
'misc'
,
'dau_language'
,
'en'
);
Irssi::settings_add_str(
'misc'
,
'dau_moron_eol_style'
,
'random'
);
Irssi::settings_add_str(
'misc'
,
'dau_parse_special_list_delimiter'
,
' '
);
Irssi::settings_add_str(
'misc'
,
'dau_random_options'
,
'--substitute --boxes --uppercase,'
.
"--substitute --color -split capitals -random off -codes 'light red; yellow',"
.
"--substitute --color -split capitals -random off -codes 'light red; light cyan',"
.
"--substitute --color -split capitals -random off -codes 'yellow; light green',"
.
'--substitute --color --uppercase,'
.
'--substitute --cool,'
.
'--substitute --delimiter,'
.
'--substitute --dots --moron,'
.
'--substitute --leet,'
.
'--substitute --mix,'
.
'--substitute --mixedcase --bracket,'
.
'--substitute --moron --stutter --uppercase,'
.
'--substitute --moron -omega on,'
.
'--substitute --moron,'
.
'--substitute --uppercase --underline,'
.
'--substitute --words --mixedcase'
);
Irssi::settings_add_str(
'misc'
,
'dau_remote_babble_channellist'
,
''
);
Irssi::settings_add_str(
'misc'
,
'dau_remote_babble_channelpolicy'
,
'deny'
);
Irssi::settings_add_str(
'misc'
,
'dau_remote_babble_interval'
,
'1 hour'
);
Irssi::settings_add_str(
'misc'
,
'dau_remote_channellist'
,
''
);
Irssi::settings_add_str(
'misc'
,
'dau_remote_channelpolicy'
,
'deny'
);
Irssi::settings_add_str(
'misc'
,
'dau_remote_deop_reply'
,
'you are on my shitlist now @ $nick'
);
Irssi::settings_add_str(
'misc'
,
'dau_remote_devoice_reply'
,
'you are on my shitlist now @ $nick'
);
Irssi::settings_add_str(
'misc'
,
'dau_remote_op_reply'
,
'thx 4 op @ $nick'
);
Irssi::settings_add_str(
'misc'
,
'dau_remote_permissions'
,
'000000'
);
Irssi::settings_add_str(
'misc'
,
'dau_remote_question_regexp'
,
'%%%DISABLED%%%'
);
Irssi::settings_add_str(
'misc'
,
'dau_remote_question_reply'
,
'EDIT_THIS_ONE'
);
Irssi::settings_add_str(
'misc'
,
'dau_remote_voice_reply'
,
'thx 4 voice @ $nick'
);
Irssi::settings_add_str(
'misc'
,
'dau_standard_messages'
,
'hi @ all'
);
Irssi::settings_add_str(
'misc'
,
'dau_standard_options'
,
'--random'
);
Irssi::settings_add_str(
'misc'
,
'dau_words_range'
,
'1-4'
);
Irssi::signal_add_last(
'setup changed'
, \
&signal_setup_changed
);
Irssi::signal_add_last(
'window changed'
=>
sub
{ Irssi::statusbar_items_redraw(
'daumode'
) });
Irssi::signal_add_last(
'window item changed'
=>
sub
{ Irssi::statusbar_items_redraw(
'daumode'
) });
Irssi::statusbar_item_register(
'daumode'
,
''
,
'statusbar_daumode'
);
our
%away_timer
;
our
%babble
;
our
$command_in
;
our
$command_out
;
our
$command_out_activated
;
our
$counter_subroutines
;
our
$counter_switches
;
our
%daumode
;
our
$daumode_activated
;
our
%help
;
$help
{options} =
<<END;
%9--away%9
Toggle away mode
%9-channels%9 %U'#channel1/network1, #channel2/network2, ...'%U:
Say away message in all those %Uchannels%U
%9-interval%9 %Utime%U:
Remind channel now and then that you're away
%9-reminder%9 %Uon|off%U:
Turn reminder on or off
%9--babble%9
Babble a message.
%9-at%9 %Unicks%U:
Comma separated list of nicks to babble at.
\$nick1, \$nick2 and so forth of the babble line will be replaced
by those nicks.
%9-cancel%9 %Uon|off%U:
Cancel active babble
%9-filter%9 %Uregular expression%U:
Only let through if the babble matches the %Uregular expression%U
%9-history_size%9 %Un%U:
Set the size of the history for this one babble to %Un%U
%9--boxes%9
Put words in boxes
%9--bracket%9
Bracket the text
%9-left%9 %Ustring%U:
Left bracket
%9-right%9 %Ustring%U:
Right bracket
%9--changelog%9
Print the changelog
%9--chars%9
Only one character each line
%9--color%9
Write in colors
%9-codes%9 %Ucodes%U:
Overrides setting dau_color_codes
%9-random%9 %Uon|off%U:
Choose color randomly from setting dau_color_codes resp.
%9--color -codes%9 or take one by one in the exact order given.
%9-split%9
%Ucapitals%U: Split by capitals
%Uchars%U: Every character another color
%Ulines%U: Every line another color
%Uparagraph%U: The whole paragraph in one color
%Urchars%U: Some characters one color
%Uwords%U: Every word another color
%9--command%9
%9-in%9 %Ucommand%U:
Feed dau.pl with the output (the public message)
that %Ucommand%U produces
%9-out%9 %Ucommand%U:
%Utopic%U for example will set a dauified topic
%9--cool%9
Be \$cool[tm]!!!!11one
%9-eol_style%9 %Ustring%U:
Override setting dau_cool_eol_style
%9-max%9 %Un%U:
\$Trademarke[tm] only %Un%U words per line tops
%9-prob_eol%9 %U0-100%U:
Probability that "!!!11one" or something like that will be put at EOL.
Set it to 100 and every line will be.
Set it to 0 and no line will be.
%9-prob_word%9 %U0-100%U:
Probability that a word will be \$trademarked[tm].
Set it to 100 and every word will be.
Set it to 0 and no word will be.
%9--cowsay%9
Use cowsay to write
%9-arguments%9 %Uarguments%U:
Pass any option to cowsay, f.e. %U'-b'%U or %U'-e XX'%U.
Look in the cowsay manualpage for details.
%9-cow%9 %Ucow%U:
The cow to use
%9-think%9 %Uon|off%U:
Thinking instead of speaking
%9--create_files%9
Create files and directories of all dau_files_* settings
%9--daumode%9
Toggle daumode.
Works on a per channel basis!
%9-modes_in%9 %Umodes%U:
All incoming messages will be dauified and the
specified modes are used by dau.pl.
%9-modes_out%9 %Umodes%U:
All outgoing messages will be dauified and the
specified modes are used by dau.pl.
%9-perm%9 %U[01][01]%U:
Dauify incoming/outgoing messages?
%9--delimiter%9
Insert a delimiter-string after each character
%9-string%9 %Ustring%U:
Override setting dau_delimiter_string. If this string
contains whitespace, you should quote the string with
single quotes.
%9--dots%9
Put dots... after words...
%9--figlet%9
Use figlet to write
%9-font%9 %Ufont%U:
The font to use
%9--help%9
Print help
%9-setting%9 %Usetting%U:
More information about a specific setting
%9--leet%9
Write in leet speech
%9--long_help%9
Long help, i.e. examples, more about some features, ...
%9--me%9
Send a CTCP ACTION instead of a PRIVMSG
%9--mix%9
Mix all the characters in a word except for the first and last
%9--mixedcase%9
Write in mixed case
%9--moron%9
Write in uppercase, mix in some typos, perform some
substitutions on the text, ... Just write like a
moron
%9-eol_style%9 %Ustring%U:
Override setting dau_moron_eol_style
%9-level%9 %Un%U:
%Un%U gives the level of stupidity applied to text,
the higher the stupider.
%U0%U is the minimum, %U1%U currently only implemented for dau_language = de.
%9-omega%9 %Uon|off%U:
The fantastic omega mode
%9-typo%9 %Uon|off%U:
Mix in random typos
%9-uppercase%9 %Uon|off%U:
Uppercase text
%9--nothing%9
Do nothing
%9--parse_special%9
Parse for special metasequences and substitute them.
%9-irssi_variables%9 %Uon|off%U:
Parse irssi special variables like \$N
%9-list_delimiter%9 %Ustring%U:
Set the list delimiter used for \@nicks and \@opnicks to %Ustring%U.
The special metasequences are:
- \\n:
real newline
- \$nick1 .. \$nickN:
N different randomly selected nicks
- \@nicks:
All nicks in channel
- \$opnick1 .. \$opnickN:
N different randomly selected opnicks
- \@opnicks:
All nicks in channel with operator status
- \$?{ code }:
the (perl)code will be evaluated and the last expression
returned will replace that metasequence
- irssis special variables like \$C for the current
channel and \$N for your current nick
Quoting:
- \\\$: literal \$
- \\\\: literal \\
%9--random%9
Let dau.pl choose the options randomly. Get these options from the setting
dau_random_options.
%9-verbose%9 %Uon|off%U:
Print what options --random has chosen
%9--reverse%9
Reverse the input string
%9--stutter%9
Stutter a bit
%9--substitute%9
Apply own substitutions from file
%9--underline%9
Underline text
%9--uppercase%9
Write in upper case
%9--words%9
Only a few words each line
END
our
$k
= Irssi::parse_special(
'$k'
);
our
%nick_mode
;
our
%option
;
our
$print_message
;
our
%queue
;
our
$random_last
;
our
%signal
= (
'complete word'
=> 0,
'daumode in'
=> 0,
'event 404'
=> 0,
'event privmsg'
=> 0,
'nick mode changed'
=> 0,
'send text'
=> 0,
);