—#
# This file is part of App-SpreadRevolutionaryDate
#
# This software is Copyright (c) 2019-2025 by GĂ©rald SĂ©drati.
#
# This is free software, licensed under:
#
# The GNU General Public License, Version 3, June 2007
#
use
5.014;
use
utf8;
$App::SpreadRevolutionaryDate::Target::Freenode::Bot::VERSION
=
'0.48'
;
# ABSTRACT: Subclass overloading L<Bot::BasicBot> to post a message on some Freenode channels
use
Moose;
use
MooseX::NonMoose;
use
namespace::autoclean;
has
'nb_said'
=> (
traits
=> [
'Counter'
],
is
=>
'rw'
,
isa
=>
'Num'
,
default
=> 0,
handles
=> {
inc_said
=>
'inc'
,
},
);
has
'nb_ticks'
=> (
traits
=> [
'Counter'
],
is
=>
'rw'
,
isa
=>
'Num'
,
default
=> 0,
handles
=> {
inc_ticks
=>
'inc'
,
},
);
has
'msg'
=> (
is
=>
'rw'
,
isa
=>
'Str'
,
default
=>
''
,
);
sub
connected {
my
$self
=
shift
;
$self
->
say
({
who
=>
'NickServ'
,
channel
=>
'msg'
,
body
=>
'IDENTIFY '
.
$self
->{freenode_nickname} .
' '
.
$self
->{freenode_password}});
}
sub
said {
my
(
$self
,
$message
) =
@_
;
$self
->nb_said(1)
if
(
$message
->{who} eq
'NickServ'
&&
$message
->{body} =~ /^You are now identified
for
/);
return
;
}
sub
tick {
my
$self
=
shift
;
if
(
$self
->nb_said) {
if
(
$self
->nb_said >
scalar
(
$self
->channels)) {
$self
->
shutdown
;
}
foreach
my
$channel
(
$self
->channels) {
$self
->
say
({
channel
=>
$channel
,
body
=>
$self
->{msg}});
$self
->inc_said;
}
}
$self
->inc_ticks;
$self
->
shutdown
if
(
$self
->nb_ticks > 10);
return
5;
}
sub
log
{
# do nothing!
}
sub
chanjoin {
my
$self
=
shift
;
# Remove channels added by Bot::BasicBot::irc_chanjoin_state with different case
my
%uniq_channels
;
foreach
my
$channel
(
$self
->channels) {
$uniq_channels
{
lc
(
$channel
)} =
$channel
;
}
if
(
scalar
(
keys
%uniq_channels
) !=
scalar
(
$self
->channels)) {
$self
->channels(
values
%uniq_channels
);
}
return
;
}
no
Moose;
__PACKAGE__->meta->make_immutable;
# A module must return a true value. Traditionally, a module returns 1.
# But this module is a revolutionary one, so it discards all old traditions.
# Idea borrowed from Jean Forget's DateTime::Calendar::FrenchRevolutionary.
"Quand le gouvernement viole les droits du peuple,
l'insurrection est pour le peuple le plus sacré
et le plus indispensable des devoirs";
__END__
=pod
=encoding UTF-8
=head1 NAME
App::SpreadRevolutionaryDate::Target::Freenode::Bot - Subclass overloading L<Bot::BasicBot> to post a message on some Freenode channels
=head1 VERSION
version 0.48
=head1 SEE ALSO
=over
=item L<spread-revolutionary-date>
=item L<App::SpreadRevolutionaryDate>
=item L<App::SpreadRevolutionaryDate::Config>
=item L<App::SpreadRevolutionaryDate::BlueskyLite>
=item L<App::SpreadRevolutionaryDate::Target>
=item L<App::SpreadRevolutionaryDate::Target::Bluesky>
=item L<App::SpreadRevolutionaryDate::Target::Twitter>
=item L<App::SpreadRevolutionaryDate::Target::Mastodon>
=item L<App::SpreadRevolutionaryDate::Target::Freenode>
=item L<App::SpreadRevolutionaryDate::Target::Liberachat>
=item L<App::SpreadRevolutionaryDate::Target::Liberachat::Bot>
=item L<App::SpreadRevolutionaryDate::MsgMaker>
=item L<App::SpreadRevolutionaryDate::MsgMaker::RevolutionaryDate>
=item L<App::SpreadRevolutionaryDate::MsgMaker::RevolutionaryDate::Calendar>
=item L<App::SpreadRevolutionaryDate::MsgMaker::RevolutionaryDate::Locale>
=item L<App::SpreadRevolutionaryDate::MsgMaker::RevolutionaryDate::Locale::fr>
=item L<App::SpreadRevolutionaryDate::MsgMaker::RevolutionaryDate::Locale::en>
=item L<App::SpreadRevolutionaryDate::MsgMaker::RevolutionaryDate::Locale::it>
=item L<App::SpreadRevolutionaryDate::MsgMaker::RevolutionaryDate::Locale::es>
=item L<App::SpreadRevolutionaryDate::MsgMaker::PromptUser>
=item L<App::SpreadRevolutionaryDate::MsgMaker::Telechat>
=item L<App::SpreadRevolutionaryDate::MsgMaker::Gemini>
=back
=head1 AUTHOR
GĂ©rald SĂ©drati <gibus@cpan.org>
=head1 COPYRIGHT AND LICENSE
This software is Copyright (c) 2019-2025 by GĂ©rald SĂ©drati.
This is free software, licensed under:
The GNU General Public License, Version 3, June 2007
=cut