diff --git a/src/main/kotlin/net/thauvin/erik/mobibot/modules/WorldTime.kt b/src/main/kotlin/net/thauvin/erik/mobibot/modules/WorldTime.kt index a9be03d..8244e15 100644 --- a/src/main/kotlin/net/thauvin/erik/mobibot/modules/WorldTime.kt +++ b/src/main/kotlin/net/thauvin/erik/mobibot/modules/WorldTime.kt @@ -50,10 +50,10 @@ import java.util.Locale class WorldTime(bot: Mobibot) : AbstractModule(bot) { companion object { // Beats (Internet Time) keyword - private const val BEATS_KEYWORD = ".beats" + const val BEATS_KEYWORD = ".beats" // Supported countries - private var COUNTRIES_MAP: Map + var COUNTRIES_MAP: Map // The Time command private const val TIME_CMD = "time" @@ -95,85 +95,265 @@ class WorldTime(bot: Mobibot) : AbstractModule(bot) { init { // Initialize the countries map val countries = mutableMapOf() + countries["AD"] = "Europe/Andorra" countries["AE"] = "Asia/Dubai" countries["AF"] = "Asia/Kabul" + countries["AKDT"] = "America/Anchorage" + countries["AKST"] = "America/Anchorage" countries["AQ"] = "Antarctica/South_Pole" + countries["AR"] = "America/Argentina/Buenos_Aires" + countries["AS"] = "Pacific/Pago_Pago" countries["AT"] = "Europe/Vienna" countries["AU"] = "Australia/Sydney" - countries["AKST"] = "America/Anchorage" - countries["AKDT"] = "America/Anchorage" + countries["AX"] = "Europe/Mariehamn" + countries["AZ"] = "Asia/Baku" + countries["BA"] = "Europe/Sarajevo" + countries["BB"] = "America/Barbados" + countries["BD"] = "Asia/Dhaka" countries["BE"] = "Europe/Brussels" + countries["BEAT"] = BEATS_KEYWORD + countries["BF"] = "Africa/Ouagadougou" + countries["BG"] = "Europe/Sofia" + countries["BH"] = "Asia/Bahrain" + countries["BI"] = "Africa/Bujumbura" + countries["BJ"] = "Africa/Porto-Novo" + countries["BL"] = "America/St_Barthelemy" + countries["BM"] = "Atlantic/Bermuda" + countries["BMT"] = BEATS_KEYWORD + countries["BN"] = "Asia/Brunei" + countries["BQ"] = "America/Kralendijk" countries["BR"] = "America/Sao_Paulo" + countries["BS"] = "America/Toronto" + countries["BT"] = "Asia/Thimphu" + countries["BW"] = "Africa/Gaborone" + countries["BY"] = "Europe/Minsk" + countries["BZ"] = "America/Belize" countries["CA"] = "America/Montreal" + countries["CC"] = "Indian/Cocos" + countries["CD"] = "Africa/Kinshasa" countries["CDT"] = "America/Chicago" countries["CET"] = "CET" + countries["CF"] = "Africa/Bangui" + countries["CG"] = "Africa/Brazzaville" countries["CH"] = "Europe/Zurich" + countries["CI"] = "Africa/Abidjan" + countries["CK"] = "Pacific/Rarotonga" + countries["CL"] = "America/Santiago" countries["CN"] = "Asia/Shanghai" + countries["CO"] = "America/Bogota" + countries["CR"] = "America/Costa_Rica" countries["CST"] = "America/Chicago" countries["CU"] = "Cuba" + countries["CV"] = "Atlantic/Cape_Verde" + countries["CW"] = "America/Curacao" + countries["CX"] = "Indian/Christmas" + countries["CY"] = "Asia/Nicosia" + countries["CZ"] = "Europe/Prague" countries["DE"] = "Europe/Berlin" + countries["DJ"] = "Africa/Djibouti" countries["DK"] = "Europe/Copenhagen" + countries["DM"] = "America/Dominica" + countries["DO"] = "America/Santo_Domingo" + countries["DZ"] = "Africa/Algiers" + countries["EC"] = "Pacific/Galapagos" countries["EDT"] = "America/New_York" + countries["EE"] = "Europe/Tallinn" countries["EG"] = "Africa/Cairo" + countries["EH"] = "Africa/El_Aaiun" countries["ER"] = "Africa/Asmara" countries["ES"] = "Europe/Madrid" countries["EST"] = "America/New_York" + countries["ET"] = "Africa/Addis_Ababa" countries["FI"] = "Europe/Helsinki" + countries["FJ"] = "Pacific/Fiji" + countries["FK"] = "Atlantic/Stanley" + countries["FM"] = "Pacific/Port_Moresby" + countries["FO"] = "Atlantic/Faroe" countries["FR"] = "Europe/Paris" + countries["GA"] = "Asia/Tbilisi" countries["GB"] = "Europe/London" + countries["GD"] = "America/Grenada" + countries["GE"] = "Asia/Tbilisi" + countries["GF"] = "America/Cayenne" + countries["GG"] = "Europe/London" + countries["GH"] = "Africa/Accra" + countries["GI"] = "Europe/Gibraltar" + countries["GL"] = "America/Thule" + countries["GM"] = "Africa/Banjul" countries["GMT"] = "GMT" + countries["GN"] = "Africa/Conakry" + countries["GP"] = "America/Guadeloupe" + countries["GQ"] = "Africa/Malabo" countries["GR"] = "Europe/Athens" + countries["GS"] = "Atlantic/South_Georgia" + countries["GT"] = "America/Guatemala" + countries["GU"] = "Pacific/Guam" + countries["GW"] = "Africa/Bissau" + countries["GY"] = "America/Guyana" countries["HK"] = "Asia/Hong_Kong" + countries["HN"] = "America/Tegucigalpa" + countries["HR"] = "Europe/Zagreb" countries["HST"] = "Pacific/Honolulu" + countries["HT"] = "America/Port-au-Prince" + countries["HU"] = "Europe/Budapest" + countries["ID"] = "Asia/Jakarta" countries["IE"] = "Europe/Dublin" countries["IL"] = "Asia/Tel_Aviv" + countries["IM"] = "Europe/London" countries["IN"] = "Asia/Kolkata" countries["IQ"] = "Asia/Baghdad" countries["IR"] = "Asia/Tehran" countries["IS"] = "Atlantic/Reykjavik" countries["IT"] = "Europe/Rome" + countries["JE"] = "Europe/London" countries["JM"] = "Jamaica" + countries["JO"] = "Asia/Amman" countries["JP"] = "Asia/Tokyo" + countries["KE"] = "Africa/Nairobi" + countries["KG"] = "Asia/Bishkek" + countries["KH"] = "Asia/Phnom_Penh" + countries["KI"] = "Pacific/Tarawa" + countries["KM"] = "Indian/Comoro" + countries["KN"] = "America/St_Kitts" + countries["KP"] = "Asia/Pyongyang" + countries["KR"] = "Asia/Seoul" + countries["KW"] = "Asia/Riyadh" + countries["KY"] = "America/Cayman" + countries["KZ"] = "Asia/Oral" + countries["LA"] = "Asia/Vientiane" + countries["LB"] = "Asia/Beirut" + countries["LC"] = "America/St_Lucia" + countries["LI"] = "Europe/Vaduz" + countries["LK"] = "Asia/Colombo" + countries["LR"] = "Africa/Monrovia" + countries["LS"] = "Africa/Maseru" + countries["LT"] = "Europe/Vilnius" + countries["LU"] = "Europe/Luxembourg" + countries["LV"] = "Europe/Riga" countries["LY"] = "Africa/Tripoli" countries["MA"] = "Africa/Casablanca" + countries["MC"] = "Europe/Monaco" + countries["MD"] = "Europe/Chisinau" countries["MDT"] = "America/Denver" + countries["ME"] = "Europe/Podgorica" + countries["MF"] = "America/Marigot" + countries["MG"] = "Indian/Antananarivo" countries["MH"] = "Kwajalein" + countries["MK"] = "Europe/Skopje" + countries["ML"] = "Africa/Bamako" + countries["MM"] = "Asia/Yangon" + countries["MN"] = "Asia/Ulaanbaatar" + countries["MO"] = "Asia/Macau" + countries["MP"] = "Pacific/Saipan" countries["MQ"] = "America/Martinique" + countries["MR"] = "Africa/Nouakchott" + countries["MS"] = "America/Montserrat" countries["MST"] = "America/Denver" + countries["MT"] = "Europe/Malta" + countries["MU"] = "Indian/Mauritius" + countries["MV"] = "Indian/Maldives" + countries["MW"] = "Africa/Blantyre" countries["MX"] = "America/Mexico_City" + countries["MY"] = "Asia/Kuala_Lumpur" + countries["MZ"] = "Africa/Maputo" + countries["NA"] = "Africa/Windhoek" + countries["NC"] = "Pacific/Noumea" + countries["NE"] = "Africa/Niamey" + countries["NF"] = "Pacific/Norfolk" + countries["NG"] = "Africa/Lagos" + countries["NI"] = "America/Managua" countries["NL"] = "Europe/Amsterdam" countries["NO"] = "Europe/Oslo" countries["NP"] = "Asia/Kathmandu" + countries["NR"] = "Pacific/Nauru" + countries["NU"] = "Pacific/Niue" countries["NZ"] = "Pacific/Auckland" + countries["OM"] = "Asia/Muscat" + countries["PA"] = "America/Panama" countries["PDT"] = "America/Los_Angeles" + countries["PE"] = "America/Lima" + countries["PF"] = "Pacific/Tahiti" + countries["PG"] = "Pacific/Pohnpei" countries["PH"] = "Asia/Manila" countries["PK"] = "Asia/Karachi" countries["PL"] = "Europe/Warsaw" + countries["PM"] = "America/Miquelon" + countries["PN"] = "Pacific/Pitcairn" + countries["PR"] = "America/Puerto_Rico" + countries["PS"] = "Asia/Gaza" countries["PST"] = "America/Los_Angeles" countries["PT"] = "Europe/Lisbon" - countries["PR"] = "America/Puerto_Rico" + countries["PW"] = "Pacific/Palau" + countries["PY"] = "America/Asuncion" + countries["QA"] = "Asia/Qatar" + countries["RE"] = "Indian/Reunion" + countries["RO"] = "Europe/Bucharest" + countries["RS"] = "Europe/Belgrade" countries["RU"] = "Europe/Moscow" + countries["RW"] = "Africa/Kigali" + countries["SA"] = "Africa/Johannesburg" + countries["SB"] = "Pacific/Guadalcanal" + countries["SC"] = "Indian/Mahe" + countries["SD"] = "Africa/Khartoum" countries["SE"] = "Europe/Stockholm" countries["SG"] = "Asia/Singapore" + countries["SH"] = "Atlantic/St_Helena" + countries["SI"] = "Europe/Ljubljana" + countries["SJ"] = "Atlantic/Jan_Mayen" + countries["SK"] = "Europe/Bratislava" + countries["SL"] = "Africa/Freetown" + countries["SM"] = "Europe/San_Marino" + countries["SN"] = "Africa/Dakar" + countries["SO"] = "Africa/Mogadishu" + countries["SR"] = "America/Paramaribo" + countries["SS"] = "Africa/Juba" + countries["ST"] = "Africa/Sao_Tome" + countries["SV"] = "America/El_Salvador" + countries["SX"] = "America/Marigot" + countries["SY"] = "Asia/Damascus" + countries["SZ"] = "Africa/Mbabane" + countries["TC"] = "America/Grand_Turk" + countries["TD"] = "Africa/Ndjamena" + countries["TF"] = "Indian/Kerguelen" + countries["TG"] = "Africa/Lome" countries["TH"] = "Asia/Bangkok" + countries["TJ"] = "Asia/Dushanbe" + countries["TK"] = "Pacific/Fakaofo" + countries["TL"] = "Asia/Dili" countries["TM"] = "Asia/Ashgabat" countries["TN"] = "Africa/Tunis" + countries["TO"] = "Pacific/Tongatapu" countries["TR"] = "Europe/Istanbul" + countries["TT"] = "America/Port_of_Spain" + countries["TV"] = "Pacific/Funafuti" countries["TW"] = "Asia/Taipei" + countries["TZ"] = "Africa/Dar_es_Salaam" + countries["UA"] = "Europe/Kiev" + countries["UG"] = "Africa/Kampala" countries["UK"] = "Europe/London" + countries["UM"] = "Pacific/Johnston" countries["US"] = "America/New_York" countries["UTC"] = "UTC" + countries["UY"] = "America/Montevideo" + countries["UZ"] = "Asia/Tashkent" countries["VA"] = "Europe/Vatican" + countries["VC"] = "America/St_Vincent" countries["VE"] = "America/Caracas" + countries["VG"] = "America/Tortola" + countries["VI"] = "America/St_Johns" countries["VN"] = "Asia/Ho_Chi_Minh" + countries["VU"] = "Pacific/Efate" + countries["WF"] = "Pacific/Wallis" + countries["WS"] = "Pacific/Apia" + countries["YE"] = "Asia/Aden" + countries["YT"] = "Indian/Mayotte" countries["ZA"] = "Africa/Johannesburg" + countries["ZM"] = "Africa/Lusaka" countries["ZULU"] = "Zulu" - countries["INTERNET"] = BEATS_KEYWORD - countries["BEATS"] = BEATS_KEYWORD @Suppress("MagicNumber") ZoneId.getAvailableZoneIds().stream() .filter { tz: String -> - !tz.contains("/") && tz.length == 3 && !countries.containsKey(tz) + tz.length <= 3 && !countries.containsKey(tz) } .forEach { tz: String -> countries[tz] = tz @@ -192,7 +372,13 @@ class WorldTime(bot: Mobibot) : AbstractModule(bot) { if (args.isEmpty()) { send(sender, "The supported countries/zones are: ", isPrivate) @Suppress("MagicNumber") - sendList(sender, ArrayList(COUNTRIES_MAP.keys), 17, isPrivate = false) + sendList( + sender, + COUNTRIES_MAP.keys.sorted().stream().map { it.padEnd(4) }.toList(), + 14, + isPrivate = false, + isIndent = true + ) } else { val msg = time(args) if (isPrivate) { @@ -213,7 +399,7 @@ class WorldTime(bot: Mobibot) : AbstractModule(bot) { init { with(help) { add("To display a country's current date/time:") - add(helpFormat("%c $TIME_CMD []")) + add(helpFormat("%c $TIME_CMD ")) add("For a listing of the supported countries:") add(helpFormat("%c $TIME_CMD")) } diff --git a/src/test/kotlin/net/thauvin/erik/mobibot/modules/WordTimeTest.kt b/src/test/kotlin/net/thauvin/erik/mobibot/modules/WordTimeTest.kt index 73a2007..fa5dd90 100644 --- a/src/test/kotlin/net/thauvin/erik/mobibot/modules/WordTimeTest.kt +++ b/src/test/kotlin/net/thauvin/erik/mobibot/modules/WordTimeTest.kt @@ -32,9 +32,13 @@ package net.thauvin.erik.mobibot.modules import net.thauvin.erik.mobibot.Utils.bold +import net.thauvin.erik.mobibot.modules.WorldTime.Companion.BEATS_KEYWORD +import net.thauvin.erik.mobibot.modules.WorldTime.Companion.COUNTRIES_MAP import net.thauvin.erik.mobibot.modules.WorldTime.Companion.time import org.assertj.core.api.Assertions.assertThat import org.testng.annotations.Test +import java.time.ZoneId +import java.time.zone.ZoneRulesException /** * The `WordTimeTest` class. @@ -44,6 +48,16 @@ class WordTimeTest { fun testTime() { assertThat(time("PST").msg).describedAs("PST").endsWith(bold("Los Angeles")) assertThat(time("BLAH").isError).describedAs("BLAH").isTrue - assertThat(time("BEATS").msg).describedAs("BEATS").contains("@") + assertThat(time("BEAT").msg).describedAs(BEATS_KEYWORD).endsWith(BEATS_KEYWORD).contains("@") + } + + @Test + @Throws(ZoneRulesException::class) + fun testCountries() { + COUNTRIES_MAP.toSortedMap().forEach { + if (it.value != BEATS_KEYWORD) { + ZoneId.of(it.value) + } + } } }