2020-01-25 23:13:57 +01:00
# File: Date.pm
# Author: pragma-
#
# Purpose: Adds command to display time and date for timezones.
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
package Plugins::Date ;
2020-02-09 04:48:05 +01:00
use parent 'Plugins::Plugin' ;
2020-01-25 23:13:57 +01:00
2020-02-09 04:48:05 +01:00
use warnings ; use strict ;
2020-01-25 23:13:57 +01:00
use feature 'unicode_strings' ;
2020-02-16 23:13:41 +01:00
use Getopt::Long qw( GetOptionsFromArray ) ;
2020-01-25 23:13:57 +01:00
sub initialize {
2020-02-15 23:38:32 +01:00
my ( $ self , % conf ) = @ _ ;
$ self - > { pbot } - > { registry } - > add_default ( 'text' , 'date' , 'default_timezone' , 'UTC' ) ;
2020-05-04 22:21:35 +02:00
$ self - > { pbot } - > { commands } - > register ( sub { $ self - > cmd_date ( @ _ ) } , "date" , 0 ) ;
2020-01-25 23:13:57 +01:00
}
sub unload {
2020-02-15 23:38:32 +01:00
my $ self = shift ;
$ self - > { pbot } - > { commands } - > unregister ( "date" ) ;
2020-01-25 23:13:57 +01:00
}
2020-05-04 22:21:35 +02:00
sub cmd_date {
my ( $ self , $ context ) = @ _ ;
2020-02-15 23:38:32 +01:00
my $ usage = "date [-u <user account>] [timezone]" ;
my $ getopt_error ;
local $ SIG { __WARN__ } = sub {
$ getopt_error = shift ;
chomp $ getopt_error ;
} ;
Getopt::Long:: Configure ( "bundling" ) ;
my ( $ user_override , $ show_usage ) ;
2020-05-04 22:21:35 +02:00
my @ opt_args = $ self - > { pbot } - > { interpreter } - > split_line ( $ context - > { arguments } , strip_quotes = > 1 ) ;
2020-02-16 23:13:41 +01:00
GetOptionsFromArray (
\ @ opt_args ,
2020-02-15 23:38:32 +01:00
'u=s' = > \ $ user_override ,
'h' = > \ $ show_usage
) ;
return $ usage if $ show_usage ;
return "/say $getopt_error -- $usage" if defined $ getopt_error ;
2020-05-04 22:21:35 +02:00
$ context - > { arguments } = "@opt_args" ;
2020-02-15 23:38:32 +01:00
2020-04-28 02:05:20 +02:00
my $ tz_override ;
if ( defined $ user_override ) {
my $ userdata = $ self - > { pbot } - > { users } - > { users } - > get_data ( $ user_override ) ;
2020-08-03 19:36:20 +02:00
return "No such user account $user_override. They may use the `my` command to create a user account and set their `timezone` user metadata." if not defined $ userdata ;
return "User account does not have `timezone` set. They may use the `my` command to set their `timezone` user metadata." if not exists $ userdata - > { timezone } ;
2020-04-28 02:05:20 +02:00
$ tz_override = $ userdata - > { timezone } ;
} else {
2020-05-04 22:21:35 +02:00
$ tz_override = $ self - > { pbot } - > { users } - > get_user_metadata ( $ context - > { from } , $ context - > { hostmask } , 'timezone' ) // '' ;
2020-04-28 02:05:20 +02:00
}
2020-02-15 23:38:32 +01:00
my $ timezone = $ self - > { pbot } - > { registry } - > get_value ( 'date' , 'default_timezone' ) // 'UTC' ;
$ timezone = $ tz_override if $ tz_override ;
2020-05-04 22:21:35 +02:00
$ timezone = $ context - > { arguments } if length $ context - > { arguments } ;
2020-02-15 23:38:32 +01:00
if ( defined $ user_override and not length $ tz_override ) { return "No timezone set or user account does not exist." ; }
2020-05-02 05:59:51 +02:00
my $ newcontext = {
2020-05-04 22:21:35 +02:00
from = > $ context - > { from } ,
nick = > $ context - > { nick } ,
user = > $ context - > { user } ,
host = > $ context - > { host } ,
command = > "date_module $timezone" ,
root_channel = > $ context - > { from } ,
root_keyword = > "date_module" ,
keyword = > "date_module" ,
arguments = > "$timezone"
2020-02-15 23:38:32 +01:00
} ;
2020-05-02 05:59:51 +02:00
$ self - > { pbot } - > { modules } - > execute_module ( $ newcontext ) ;
2020-01-25 23:13:57 +01:00
}
1 ;