placeholder methods for time and weather commands

This commit is contained in:
Ben Harris 2017-12-06 15:34:40 -05:00
parent 07eb3ef475
commit 5d94a5d5f3
4 changed files with 95 additions and 10 deletions

View File

@ -12,13 +12,13 @@ namespace dotbot.Commands
{
private readonly IConfigurationRoot _config;
private Dictionary<ulong, string> _cache;
private string CleverBotAPIURL = "https://www.cleverbot.com/getreply";
private string CleverBotApiUrl = "https://www.cleverbot.com/getreply";
public CleverBot(IConfigurationRoot config, CleverBotCacheService cache)
{
_config = config;
_cache = cache.Cache;
CleverBotAPIURL += $"?key={_config["tokens:cleverbot"]}&input=";
CleverBotApiUrl += $"?key={_config["tokens:cleverbot"]}&input=";
}
class CleverBotResponse
@ -33,7 +33,7 @@ namespace dotbot.Commands
[Summary("talk to benbot")]
public async Task ChatWithCleverBot([Remainder] [Summary("what you want to say to benbot")] string message)
{
var url = $"{CleverBotAPIURL}{message}";
var url = $"{CleverBotApiUrl}{message}";
if (_cache.ContainsKey(Context.Channel.Id))
url += $"&cs={_cache[Context.Channel.Id]}";
var json = (new WebClient { Proxy = null }).DownloadString(url);

View File

@ -4,17 +4,39 @@ using dotbot.Core;
using System;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Extensions.Configuration;
namespace dotbot.Commands
{
[Group("time")]
public class Time : ModuleBase<SocketCommandContext>
{
private readonly IConfigurationRoot _config;
private string OwmApiUrl = "http://api.openweathermap.org/data/2.5/weather";
private string GeoNamesUrl = "http://api.geonames.org/timezoneJSON";
public Time(IConfigurationRoot config)
{
_config = config;
OwmApiUrl += $"?APPID={_config["tokens:owm"]}&units=metric";
GeoNamesUrl += $"?username={_config["tokens:geonames"]}";
}
[Command]
[Summary("get the time at the bot's location")]
[Summary("get the time at your location (or bot's location if you don't have one saved)")]
public async Task GetTime()
{
await ReplyAsync($"{DateTime.Now:g}");
using (var db = new DotbotDbContext())
{
if (db.UserLocations.Any(u => u.Id == Context.User.Id))
{
var ul = db.UserLocations.Find(Context.User.Id);
var dt = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.UtcNow, ul.TimeZone);
await ReplyAsync($"it's {dt:g} in {ul.City}");
}
else
await ReplyAsync($"it's {DateTime.Now:g} Eastern Time (where the bot is hosted)");
}
}
@ -37,6 +59,15 @@ namespace dotbot.Commands
}
}
[Command]
[Summary("check the time in an arbitrary location")]
public async Task LookupTime([Remainder] [Summary("location")] string location)
{
// TODO: api lookup
await ReplyAsync($"it is __ o'clock in {location}");
}
[Command("save")]
[Summary("save your location")]
public async Task SaveUserLocation([Remainder] [Summary("the location")] string location)
@ -44,12 +75,13 @@ namespace dotbot.Commands
using (var db = new DotbotDbContext())
{
if (db.UserLocations.Any(u => u.Id == Context.User.Id))
{
{ // update existing
var loc = db.UserLocations.Find(Context.User.Id);
// TODO: update location for user
}
else
{
{ // save new record
// TODO: lookup location and save
db.UserLocations.Add(new UserLocation
{

View File

@ -1,9 +1,60 @@
using Discord.Commands;
using System.Threading.Tasks;
using Discord.Commands;
using Microsoft.Extensions.Configuration;
namespace dotbot.Commands
{
[Group("weather")]
public class Weather : ModuleBase<SocketCommandContext>
{
private IConfigurationRoot _config;
private string OwmApiUrl = "http://api.openweathermap.org/data/2.5/weather";
private string GeoNamesUrl = "http://api.geonames.org/timezoneJSON";
public Weather(IConfigurationRoot config)
{
_config = config;
OwmApiUrl += $"?APPID={_config["tokens:owm"]}&units=metric";
GeoNamesUrl += $"?username={_config["tokens:geonames"]}";
}
[Command]
[Summary("gets the weather for your location")]
public async Task GetWeather()
{
// TODO: check if user has saved location and do API lookup
await ReplyAsync("good weather");
}
[Command]
[Summary("look up the weather at a mentioned user's saved location")]
public async Task LookupWeatherForUser([Summary("user to check time for")] IUser user)
{
// TODO: check if they're in DB
// TODO: convert to tz
await ReplyAsync($"it's __ weather for {user.Mention}");
}
[Command]
[Summary("look up the weather at a specified location")]
public async Task LookupWeather([Remainder] [Summary("location")] string location)
{
// TODO: API lookup
await ReplyAsync($"the weather in {location} is crap");
}
[Command("save")]
[Summary("save a location for timezone and weather")]
public async Task SaveUserLocation([Remainder] [Summary("location")] string location)
{
// TODO: lookup location detail
// TODO: save to db
await ReplyAsync($"you location has been saved as {location}");
}
}
}

View File

@ -1,9 +1,11 @@
{
"prefix": "!",
"gmail_login": "",
"gmail_login": "user@gmail.com",
"tokens": {
"discord": "",
"cleverbot": "",
"gmail": ""
"gmail": "", // password here
"owm": "",
"geonames": ""
}
}