57 lines
2.6 KiB
Perl
Executable File
57 lines
2.6 KiB
Perl
Executable File
#!/usr/bin/perl
|
|
|
|
use 5.12.0;
|
|
use utf8;
|
|
use WebService::Discord::Webhook;
|
|
use DBI;
|
|
|
|
# Config
|
|
my $url = 'paste webhook URL here';
|
|
my $rolePing = 0; # 0 = don't ping at all, 1 = ping role ID specified in $roleID, 2 = everyone
|
|
my $roleID = 0;
|
|
|
|
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
|
|
my @month_name = qw(January February March April May June July August September October November December);
|
|
$year += 1900;
|
|
my $date = "@month_name[$mon] $mday, $year";
|
|
|
|
# Create the webhook object and DBI object
|
|
my $webhook = WebService::Discord::Webhook->new( $url );
|
|
my $dbh = DBI->connect("dbi:SQLite:questions.sqlite", '', '', { AutoCommit => 1, sqlite_unicode => 1 });
|
|
|
|
# Fetch ID of unsent questions from DB and pass to @questions array. If no questions are left then instead send an error to Discord and close DB connection
|
|
my @questions = @{ $dbh->selectcol_arrayref("SELECT id FROM data WHERE used = 0") };
|
|
if (@questions == 0) {
|
|
$webhook->execute( content => 'There are no more questions left to post — please add more or you will get this message again tomorrow!');$dbh->disconnect; die "No available unused questions, stopped"}
|
|
else {
|
|
# Pick one fetched ID at random and pass to $q_id
|
|
my $q_id = $questions[rand @questions];
|
|
# Request question text and source for selected ID and pass to $question_text and $source_text respectively
|
|
my $question_text = $dbh->selectrow_array("SELECT question FROM data WHERE id = " . $q_id);
|
|
my $source_text = $dbh->selectrow_array("SELECT source FROM data WHERE id = " . $q_id);
|
|
# Mark chosen question as used and record date
|
|
$dbh->do("UPDATE data SET used = '1','when' = '" . time . "' WHERE id = " . $q_id);
|
|
# Set up "questions remaining" text
|
|
my $remains;
|
|
if ($#questions == 1) {$remains = ' question left'} else {$remains = ' questions left';};
|
|
|
|
# Post the message
|
|
$webhook->execute( embed => {
|
|
'title' => 'Question of the day for ' . $date,
|
|
'description' => $question_text,
|
|
'footer' => { 'text' => 'Submitted by ' . $source_text . ' • ' . $#questions . $remains },
|
|
'color' => rand 16777215
|
|
});
|
|
|
|
if ($rolePing > 0) {
|
|
if ($rolePing == 1) {
|
|
$webhook->execute( content => '<@&' . $roleID . '>' );
|
|
} elsif ($rolePing == 2) {
|
|
$webhook->execute( content => '@everyone' );
|
|
}};
|
|
|
|
if ($#questions == 0) {
|
|
$webhook->execute( content => '**You\'re out of questions!** Please add more or no question will be posted tomorrow.');
|
|
$dbh->disconnect; warn "Last available question used, finished"
|
|
} else { $dbh->disconnect; exit }}
|