Add system time zone command
This commit is contained in:
parent
6cfa4cb2e5
commit
72cb838ad7
@ -1,9 +1,14 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Runtime.Serialization;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using Dapper;
|
||||
using Discord.Commands;
|
||||
using NodaTime;
|
||||
using NodaTime.Extensions;
|
||||
using NodaTime.Text;
|
||||
using NodaTime.TimeZones;
|
||||
|
||||
namespace PluralKit.Bot.Commands
|
||||
{
|
||||
@ -140,6 +145,32 @@ namespace PluralKit.Bot.Commands
|
||||
}
|
||||
}
|
||||
|
||||
[Command("timezone")]
|
||||
[Remarks("system timezone [timezone]")]
|
||||
public async Task SystemTimezone([Remainder] string zoneStr = null)
|
||||
{
|
||||
if (zoneStr == null)
|
||||
{
|
||||
Context.SenderSystem.UiTz = "UTC";
|
||||
await Systems.Save(Context.SenderSystem);
|
||||
await Context.Channel.SendMessageAsync($"{Emojis.Success} System time zone cleared.");
|
||||
return;
|
||||
}
|
||||
|
||||
var zones = DateTimeZoneProviders.Tzdb;
|
||||
var zone = zones.GetZoneOrNull(zoneStr);
|
||||
if (zone == null) throw Errors.InvalidTimeZone(zoneStr);
|
||||
|
||||
var currentTime = SystemClock.Instance.GetCurrentInstant().InZone(zone);
|
||||
var msg = await Context.Channel.SendMessageAsync(
|
||||
$"This will change the system time zone to {zone.Id}. The current time is {currentTime.ToString(Formats.DateTimeFormat, null)}. Is this correct?");
|
||||
if (!await Context.PromptYesNo(msg)) throw Errors.TimezoneChangeCancelled;
|
||||
Context.SenderSystem.UiTz = zone.Id;
|
||||
await Systems.Save(Context.SenderSystem);
|
||||
|
||||
await Context.Channel.SendMessageAsync($"System time zone changed to {zone.Id}.");
|
||||
}
|
||||
|
||||
public override async Task<PKSystem> ReadContextParameterAsync(string value)
|
||||
{
|
||||
var res = await new PKSystemTypeReader().ReadAsync(Context, value, _services);
|
||||
|
@ -56,5 +56,9 @@ namespace PluralKit.Bot {
|
||||
public static PKError SwitchMoveBeforeSecondLast(ZonedDateTime time) => new PKError($"Can't move switch to before last switch time ({time.ToString(Formats.DateTimeFormat, null)}), as it would cause conflicts.");
|
||||
public static PKError SwitchMoveCancelled => new PKError("Switch move cancelled.");
|
||||
public static PKError SwitchDeleteCancelled => new PKError("Switch deletion cancelled.");
|
||||
public static PKError TimezoneParseError(string timezone) => new PKError($"Could not parse timezone offset {timezone}. Offset must be a value like 'UTC+5' or 'GMT-4:30'.");
|
||||
|
||||
public static PKError InvalidTimeZone(string zoneStr) => new PKError($"Invalid time zone ID '{zoneStr}'. To find your time zone ID, use the following website: <https://xske.github.io/tz>");
|
||||
public static PKError TimezoneChangeCancelled => new PKError("Time zone change cancelled.");
|
||||
}
|
||||
}
|
@ -206,7 +206,7 @@ namespace PluralKit
|
||||
|
||||
public static class Formats
|
||||
{
|
||||
public static string DateTimeFormat = "yyyy-MM-dd HH-mm-ss";
|
||||
public static string DateTimeFormat = "yyyy-MM-dd HH:mm:ss";
|
||||
public static string DurationFormat = "D'd' h'h' m'm' s's'";
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user