add weather command

mirko asked to add it + i also want to add it too
This commit is contained in:
Chayapak 2023-04-04 19:05:28 +07:00
parent dc8e38836a
commit 96c11f3291
4 changed files with 100 additions and 0 deletions

View file

@ -17,6 +17,8 @@ public class Configuration {
@Getter public Map<String, String> keys; @Getter public Map<String, String> keys;
@Getter public String weatherApiKey;
@Getter public Core core = new Core(); @Getter public Core core = new Core();
@Getter public Discord discord = new Discord(); @Getter public Discord discord = new Discord();
@Getter public List<String> trusted = new ArrayList<>(); @Getter public List<String> trusted = new ArrayList<>();

View file

@ -0,0 +1,94 @@
package land.chipmunk.chayapak.chomens_bot.commands;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import land.chipmunk.chayapak.chomens_bot.Bot;
import land.chipmunk.chayapak.chomens_bot.command.Command;
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
import land.chipmunk.chayapak.chomens_bot.util.HttpUtilities;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import java.io.FileNotFoundException;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
public class WeatherCommand implements Command {
public String name() { return "weather"; }
public String description() {
return "Shows the weather in a place";
}
public List<String> usage() {
final List<String> usages = new ArrayList<>();
usages.add("<location>");
return usages;
}
public List<String> alias() {
final List<String> aliases = new ArrayList<>();
aliases.add("");
return aliases;
}
public int trustLevel() {
return 0;
}
public Component execute (CommandContext context, String[] args, String[] fullArgs) {
final Bot bot = context.bot();
final String location = String.join(" ", args);
final Gson gson = new Gson();
try {
final URL url = new URL(
"https://api.weatherapi.com/v1/current.json?key=" + bot.config().weatherApiKey() + "&q=" +
URLEncoder.encode(
location,
StandardCharsets.UTF_8
)
+ "&aqi=no"
);
final String jsonOutput = HttpUtilities.request(url);
final JsonObject jsonObject = gson.fromJson(jsonOutput, JsonObject.class);
final DateTimeFormatter formatter = DateTimeFormat.forPattern("hh:mm:ss a");
final DateTimeZone zone = DateTimeZone.forID(jsonObject.get("location").getAsJsonObject().get("tz_id").getAsString());
final DateTime dateTime = new DateTime(zone);
final String time = formatter.print(dateTime);
final Component component = Component.translatable(
"Weather for %s, %s:\n%s, feels like %s\nTime: %s",
Component.text(jsonObject.get("location").getAsJsonObject().get("name").getAsString()).color(NamedTextColor.AQUA),
Component.text(jsonObject.get("location").getAsJsonObject().get("country").getAsString()).color(NamedTextColor.AQUA),
Component.text(jsonObject.get("current").getAsJsonObject().get("temp_c").getAsString() + "°C").color(NamedTextColor.GOLD),
Component.text(jsonObject.get("current").getAsJsonObject().get("feelslike_c").getAsString() + "°C").color(NamedTextColor.GREEN),
Component.text(time).color(NamedTextColor.AQUA)
);
context.sendOutput(component);
} catch (Exception e) {
return Component.text("Location \"" + location + "\" not found").color(NamedTextColor.RED);
}
return Component.text("success");
}
}

View file

@ -47,6 +47,7 @@ public class CommandHandlerPlugin {
registerCommand(new SudoAllCommand()); registerCommand(new SudoAllCommand());
registerCommand(new EndCommand()); registerCommand(new EndCommand());
registerCommand(new CloopCommand()); registerCommand(new CloopCommand());
registerCommand(new WeatherCommand());
} }
public void registerCommand (Command command) { public void registerCommand (Command command) {

View file

@ -23,6 +23,9 @@ trusted:
keys: keys:
normalKey: 'normal hash key here' normalKey: 'normal hash key here'
ownerKey: 'OwnerHash™ key here' ownerKey: 'OwnerHash™ key here'
weatherApiKey: 'key here' # weatherapi.com key
core: core:
layers: 3 layers: 3
refillInterval: 60000 refillInterval: 60000