App-SpreadRevolutionaryDate
view release on metacpan or search on metacpan
lib/App/SpreadRevolutionaryDate/MsgMaker/Telechat.pm view on Meta::CPAN
#
# This file is part of App-SpreadRevolutionaryDate
#
# This software is Copyright (c) 2019-2026 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;
package App::SpreadRevolutionaryDate::MsgMaker::Telechat;
$App::SpreadRevolutionaryDate::MsgMaker::Telechat::VERSION = '0.54';
# ABSTRACT: MsgMaker class for L<App::SpreadRevolutionaryDate> to build message with Téléchat date
use Moose;
with 'App::SpreadRevolutionaryDate::MsgMaker';
use DateTime;
use File::ShareDir ':ALL';
use App::SpreadRevolutionaryDate;
use Locale::TextDomain 'App-SpreadRevolutionaryDate';
use namespace::autoclean;
has '+locale' => (
default => 'fr',
);
around BUILDARGS => sub {
my ($orig, $class, %args) = @_;
$args{locale} = 'fr';
return $class->$orig(%args);
};
sub compute {
my $self = shift;
my %telechat_calendars = (
'0tvtime' => {
'0101' => ['flaque d\'eau', 'flaques d\'eau', 'f'],
'0102' => ['cadre', 'cadres', 'm'],
'0103' => ['compte-gouttes', 'compte-gouttes', 'm'],
'0104' => ['laisse de chien', 'laisses de chien', 'f'],
'0105' => ['bocal', 'bocaux', 'm'],
'0106' => ['gibier', 'gibiers', 'm'],
'0107' => ['pare-chocs', 'pare-chocs', 'f'],
'0108' => ['tranche de jambon', 'tranches de jambon', 'f'],
'0109' => ['patate', 'patates', 'f'],
'0110' => ['appareil de photo', 'appareils de photo', 'm'],
'0111' => ['raisin sec', 'raisins secs', 'm'],
'0112' => ['trognon de pomme', 'trognons de pomme', 'm'],
'0113' => ['fil à couper le beurre', 'fils à couper le beurre', 'm'],
'0114' => ['casse-noisettes', 'casse-noisettes', 'm'],
'0115' => ['machine à faire des trous dans les spaguettis', 'machines à faire des trous dans les spaguettis', 'm'],
'0116' => ['cure-dents', 'cure-dents', 'm'],
'0117' => ['stylo-feutre', 'stylos-feutres', 'm'],
'0118' => ['parcmètre', 'parcmètres', 'm'],
'0119' => ['journal', 'journaux', 'm'],
'0120' => ['toast', 'toasts', 'm'],
'0121' => ['colis', 'colis', 'm'],
'0122' => ['sèche-cheveux', 'sèche-cheveux', 'm'],
'0123' => ['papier carbone', 'papiers carbone', 'm'],
'0124' => ['savonnette', 'savonnettes', 'f'],
'0125' => ['épluchure', 'épluchures', 'f'],
'0126' => ['cactus', 'cactus', 'm'],
'0127' => ['sac de dame', 'sacs de dame', 'm'],
'0128' => ['jus de fruits', 'jus de fruits', 'm'],
'0129' => ['mot d\'excuse', 'mots d\'excuse', 'm'],
'0130' => ['sent-bon', 'sent-bon', 'm'],
'0131' => ['machine à coudre', 'machines à coudre', 'f'],
'0201' => ['pique-nique', 'pique-niques', 'm'],
'0202' => ['bonbon à la menthe', 'bonbons à la menthe', 'm'],
'0203' => ['sabre', 'sabres', 'm'],
'0204' => ['uniforme', 'uniformes', 'm'],
'0205' => ['bulle de savon', 'bulles de savon', 'f'],
'0207' => ['pince à linge', 'pinces à linge', 'f'],
'0208' => ['peau de banane', 'peaux de banane', 'f'],
'0209' => ['marguerite', 'marguerites', 'f'],
'0210' => ['avion en papier', 'avions en papier', 'm'],
'0211' => ['brosse à cheveux', 'brosses à cheveux', 'f'],
'0212' => ['équilibre', 'équilibres', 'm'],
'0213' => ['théière', 'théière', 'f'],
'0214' => ['porte-monnaie', 'porte-monnaie', 'm'],
'0215' => ['pince à épiler', 'pinces à épiler', 'f'],
'0216' => ['essuie-glace', 'essuie-glaces', 'm'],
'0217' => ['cheminée d\'usine', 'cheminées d\'usine', 'f'],
'0218' => ['farces et attrapes', 'farces et attrapes', 'f'],
'0219' => ['gant de boxe', 'gants de boxe', 'm'],
'0220' => ['cible', 'cibles', 'f'],
'0221' => ['carte de crédit', 'cartes de crédit', 'f'],
'0222' => ['ciseaux', 'ciseaux', 'm'],
'0223' => ['boule de glace', 'boules de glace', 'f'],
'0224' => ['chanson', 'chansons', 'f'],
'0225' => ['gant de toilette', 'gants de toilette', 'm'],
'0226' => ['machine à écrire', 'machines à écrire', 'f'],
'0227' => ['cravate', 'cravates', 'f'],
'0228' => ['cruche', 'cruches', 'f'],
'0229' => ['bande dessinée', 'bandes dessinées', 'f'],
lib/App/SpreadRevolutionaryDate/MsgMaker/Telechat.pm view on Meta::CPAN
'1110' => ['lunette de soleil', 'lunettes de soleil', 'f'],
'1111' => ['octavin', 'octavins', 'm'],
'1112' => ['toque à trois cornes', 'toques à trois cornes', 'f'],
'1113' => ['navire-hôpital', 'navires-hôpitaux', 'm'],
'1114' => ['sesquiplan', 'sesquiplans', 'm'],
'1115' => ['baldaquin', 'baldaquins', 'm'],
'1116' => ['anémoscope', 'anémoscopes', 'm'],
'1117' => ['clavicythérium', 'clavicythériums', 'm'],
'1118' => ['certificat de conformité', 'certificats de conformité', 'm'],
'1119' => ['bonnet de nuit', ' bonnets de nuit', 'm'],
'1120' => ['atmomètre', 'atmomètres', 'm'],
'1121' => ['pnéomètre', 'pnéomètres', 'm'],
'1122' => ['marie-salope', 'marie-salopes', 'f'],
'1123' => ['lettre de crédit', 'lettres de crédit', 'f'],
'1124' => ['cithare', 'cithares', 'f'],
'1125' => ['tramezzino', 'tramezzinos', 'm'],
'1126' => ['ichcahuipilli', 'ichcahuipillis', 'f'],
'1127' => ['journal intime', 'journaux intimes', 'm'],
'1128' => ['harpe celtique', 'harpes celtiques', 'f'],
'1129' => ['noeud dâagui', 'noeuds dâagui', 'm'],
'1130' => ['cabotière', 'cabotières', 'f'],
'1201' => ['pique-oeuf', 'pique-oeufs', 'm'],
'1202' => ['revue de contrat', 'revues de contrats', 'f'],
'1203' => ['grande surface', 'grandes surfaces', 'f'],
'1204' => ['manteau de cheminée', 'manteaux de cheminées', 'm'],
'1205' => ['charentaise', 'charentaises', 'f'],
'1206' => ['chasse-goupille', 'chasse-goupilles', 'm'],
'1207' => ['chaussure à orteils', 'chaussures à orteils', 'f'],
'1208' => ['giroflée à cinq pétales', 'giroflées a cinq pétales', 'f'],
'1209' => ['salade de phalanges', 'salades de phalanges', 'f'],
'1210' => ['rogntudju', 'rogntudju', 'm'],
'1211' => ['lixiviateuse', 'lixiviateuses', 'f'],
'1212' => ['chaise berçante', 'chaises berçantes', 'f'],
'1213' => ['chebec', 'chebec', 'm'],
'1214' => ['boulevard circulaire', 'boulevards circulaires', 'm'],
'1215' => ['bande cyclable', 'bandes cyclables', 'f'],
'1216' => ['coupe-boulons', 'coupe-boulons', 'm'],
'1217' => ['clé à pipe', 'clés à pipe', 'f'],
'1218' => ['zeugme', 'zeugmes', 'm'],
'1219' => ['tricordeur à ampoules sous vide', 'tricordeurs à ampoules sous vide', 'm'],
'1220' => ['diptyque', 'diptyques', 'm'],
'1221' => ['clavette basculante', 'clavettes basculantes', 'f'],
'1222' => ['glassophone', 'glassophones', 'm'],
'1223' => ['métaphore', 'métaphores', 'f'],
'1224' => ['pentécontère', 'pentécontères', 'm'],
'1225' => ['sapin à trois roues', 'sapins à trois roues', 'm'],
'1226' => ['cumulus bourgeonnant', 'cumulus bourgeonnants', 'm'],
'1227' => ['pyréolophore', 'pyréolophores', 'm'],
'1228' => ['soubassophone', 'soubassophones', 'm'],
'1229' => ['vastringue', 'vastringues', 'm'],
'1230' => ['vocifération sportive', 'vociférations sportives', 'f'],
'1231' => ['connotation de proximité temporelle', 'connotations de proximité temporelle', 'f'],
},
);
my @telechat_days = ('Lourdi', 'Pardi', 'Morquidi', 'Jourdi', 'Dendrevi', 'Sordi', 'Mitanche');
my $today = DateTime->now(locale => $self->locale);
my $day_name = $telechat_days[$today->day_of_week_0];
my @calendars = sort keys %telechat_calendars;
my $calendar_key = sprintf("%02d", $today->month).sprintf("%02d", $today->day);
shift @calendars unless $telechat_calendars{'0tvtime'}->{$calendar_key};
my $chosen_calendar = @calendars[rand @calendars];
my $feast = $telechat_calendars{$chosen_calendar}->{$calendar_key};
my $feast_gender = $feast->[2] eq 'm' ? 'Saint' : 'Sainte';
my $feast_singular = $feast->[0];
$feast_singular =~ s/\b(\w)/\U$1/g;
my $feast_plural = $feast->[1];
my $every_gender = $feast->[2] eq 'm' ? 'tous' : 'toutes';
if ($self->special_birthday_day && $self->special_birthday_month && $self->special_birthday_name && $today->day == $self->special_birthday_day && $today->month == $self->special_birthday_month) {
$feast_gender = $self->special_birthday_gender eq 'm' ? 'Saint' : 'Sainte';
$feast_singular = $self->special_birthday_name;
$feast_plural = $self->special_birthday_plural;
$every_gender = $self->special_birthday_gender eq 'm' ? 'tous' : 'toutes';
}
my $msg = sprintf("Chalut ! Aujourd'hui, %s %d, c'est la %s-%s.\nBonne fête à %s les %s !", $day_name, $today->day, $feast_gender, $feast_singular, $every_gender, $feast_plural);
my $img_path = dist_file('App-SpreadRevolutionaryDate', 'images/groucha.png');
my $img_alt = "Grouchat de Téléchat : « $msg »";
$img_alt =~ s/\n+/ /g;
my $img = {path => $img_path, alt => $img_alt};
return ($msg, $img);
}
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::MsgMaker::Telechat - MsgMaker class for L<App::SpreadRevolutionaryDate> to build message with Téléchat date
=head1 VERSION
version 0.54
=head1 METHODS
=head2 compute
Computes date of the day similar to the Belgian-French TV show 'Téléchat" on the 1980's. Takes no argument. Returns message as string and hash with the path to an image file of Groucha, the presenter of Téléchat, and its alt text, with 'path' and...
This message maker is greatly based on I<SaintObjetBot> a bot spreading, in "Téléchat style", the date and the feast of the day, see L<https://github.com/tobozo/SaintObjetBot>.
There is no really offical Téléchat calendar (named calendar of holly objects, calendrier des objet saints in French), the principle is to use new inventions of objects instead of outdated objects.
We have found three sources for calendar names: what has actually been broadcasted on tv show, see L<https://www.tvtime.com/fr/show/257185>, and two versions computed by I<SaintObjetBot>, see L<https://github.com/tobozo/SaintObjetBot/blob/main/data/s...
=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::Freenode::Bot>
=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::Gemini>
=back
=head1 AUTHOR
Gérald Sédrati <gibus@cpan.org>
=head1 COPYRIGHT AND LICENSE
This software is Copyright (c) 2019-2026 by Gérald Sédrati.
This is free software, licensed under:
( run in 2.357 seconds using v1.01-cache-2.11-cpan-75ffa21a3d4 )