Added Temperature, case insensitivity
This commit is contained in:
parent
afa2cbee4f
commit
d4ae9e712a
@ -55,69 +55,140 @@ namespace NadekoBot.Modules.Searches
|
|||||||
Modifier = decimal.One,
|
Modifier = decimal.One,
|
||||||
UnitType = unitTypeString
|
UnitType = unitTypeString
|
||||||
};
|
};
|
||||||
|
var baseIndex = Units.FindIndex(x => x.UnitType == "currency" && x.Modifier == baseType.Modifier);
|
||||||
|
if (baseIndex == -1)
|
||||||
|
Units.Add(baseType);
|
||||||
|
else
|
||||||
|
Units[baseIndex] = baseType;
|
||||||
foreach (var rate in currencyRates.ConversionRates)
|
foreach (var rate in currencyRates.ConversionRates)
|
||||||
{
|
{
|
||||||
Units.Add(new JsonUnit() {
|
var u = new JsonUnit()
|
||||||
Triggers = new List<string>() { rate.Key},
|
{
|
||||||
|
Triggers = new List<string>() { rate.Key },
|
||||||
UnitType = unitTypeString,
|
UnitType = unitTypeString,
|
||||||
Modifier = rate.Value
|
Modifier = rate.Value
|
||||||
});
|
};
|
||||||
|
var lower = u.Triggers.First().ToLowerInvariant();
|
||||||
|
var toUpdate = Units.FindIndex(x => x.UnitType == "currency" && x.Triggers.First().ToLowerInvariant() == lower);
|
||||||
|
if (toUpdate == -1)
|
||||||
|
Units.Add(u);
|
||||||
|
else
|
||||||
|
Units[toUpdate] = u;
|
||||||
}
|
}
|
||||||
File.WriteAllText("units.json", JsonConvert.SerializeObject(Units, Formatting.Indented));
|
File.WriteAllText("units.json", JsonConvert.SerializeObject(Units, Formatting.Indented));
|
||||||
await msg.Reply("done");
|
await msg.Reply("done");
|
||||||
}
|
}
|
||||||
|
|
||||||
[LocalizedCommand, LocalizedDescription, LocalizedSummary]
|
[LocalizedCommand, LocalizedDescription, LocalizedSummary]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task ConvertList(IUserMessage msg)
|
public async Task ConvertListE(IUserMessage msg) //extended and bugged list
|
||||||
{
|
{
|
||||||
var sb = new StringBuilder("Units that can be used by the converter: ");
|
var channel = msg.Channel as IGuildChannel;
|
||||||
|
|
||||||
|
var sb = new StringBuilder("Units that can be used by the converter: \n");
|
||||||
var res = Units.GroupBy(x => x.UnitType);
|
var res = Units.GroupBy(x => x.UnitType);
|
||||||
foreach (var group in res)
|
foreach (var group in res)
|
||||||
{
|
{
|
||||||
sb.AppendLine($"{group.Key}: ```xl");
|
sb.AppendLine($"{group.Key}: ```xl");
|
||||||
foreach (var el in group)
|
foreach (var el in group)
|
||||||
{
|
{
|
||||||
sb.AppendLine(string.Join(",", el.Triggers));
|
sb.Append($" [{string.Join(",", el.Triggers)}] ");
|
||||||
}
|
}
|
||||||
sb.AppendLine("```");
|
sb.AppendLine("```");
|
||||||
}
|
}
|
||||||
await msg.ReplyLong(sb.ToString());
|
await msg.ReplyLong(sb.ToString(), "```xl", "```", "```xl");
|
||||||
|
}
|
||||||
|
[LocalizedCommand, LocalizedDescription, LocalizedSummary]
|
||||||
|
[RequireContext(ContextType.Guild)]
|
||||||
|
public async Task ConvertList(IUserMessage msg)
|
||||||
|
{
|
||||||
|
var sb = new StringBuilder("Units that can be used by the converter: \n");
|
||||||
|
var res = Units.GroupBy(x => x.UnitType);
|
||||||
|
foreach (var group in res)
|
||||||
|
{
|
||||||
|
sb.AppendLine($"{group.Key}: ```xl");
|
||||||
|
sb.AppendLine(string.Join(",", group.Select(x => x.Triggers.FirstOrDefault()).OrderBy(x => x)));
|
||||||
|
sb.AppendLine("```");
|
||||||
|
}
|
||||||
|
await msg.ReplyLong(sb.ToString(), "```xl", "```", "```xl");
|
||||||
}
|
}
|
||||||
[LocalizedCommand, LocalizedDescription, LocalizedSummary]
|
[LocalizedCommand, LocalizedDescription, LocalizedSummary]
|
||||||
public async Task Convert(IUserMessage msg, string origin, string target, decimal value)
|
public async Task Convert(IUserMessage msg, string origin, string target, decimal value)
|
||||||
{
|
{
|
||||||
var originUnit = Units.Find(x => x.Triggers.Contains(origin));
|
var originUnit = Units.Find(x => x.Triggers.Select(y => y.ToLowerInvariant()).Contains(origin.ToLowerInvariant()));
|
||||||
var targetUnit = Units.Find(x => x.Triggers.Contains(target));
|
var targetUnit = Units.Find(x => x.Triggers.Select(y => y.ToLowerInvariant()).Contains(target.ToLowerInvariant()));
|
||||||
|
if (originUnit == null || targetUnit == null)
|
||||||
|
{
|
||||||
|
await msg.Reply(string.Format("Cannot convert {0} to {1}: units not found", originUnit.Triggers.First(), targetUnit.Triggers.First()));
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (originUnit.UnitType != targetUnit.UnitType)
|
if (originUnit.UnitType != targetUnit.UnitType)
|
||||||
{
|
{
|
||||||
await msg.Reply(string.Format("Cannot convert {0} to {1}: types of unit are not equal", originUnit.Triggers.First(), targetUnit.Triggers.First()));
|
await msg.Reply(string.Format("Cannot convert {0} to {1}: types of unit are not equal", originUnit.Triggers.First(), targetUnit.Triggers.First()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
decimal res = (value * originUnit.Modifier) / targetUnit.Modifier;
|
decimal res;
|
||||||
|
if (originUnit.Triggers == targetUnit.Triggers) res = value;
|
||||||
|
else if (originUnit.UnitType == "temperature")
|
||||||
|
{
|
||||||
|
//don't really care too much about efficiency, so just convert to Kelvin, then to target
|
||||||
|
switch (originUnit.Triggers.First().ToUpperInvariant())
|
||||||
|
{
|
||||||
|
case "C":
|
||||||
|
res = value + (decimal)273.15; //celcius!
|
||||||
|
break;
|
||||||
|
case "F":
|
||||||
|
res = (value + (decimal)459.67) * ((decimal)5 / 9);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
res = value;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
//from Kelvin to target
|
||||||
|
switch (targetUnit.Triggers.First())
|
||||||
|
{
|
||||||
|
case "C":
|
||||||
|
res = value - (decimal)273.15; //celcius!
|
||||||
|
break;
|
||||||
|
case "F":
|
||||||
|
res = res * ((decimal)9 / 5) - (decimal)458.67;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//I just love currency
|
||||||
|
if (originUnit.UnitType == "currency")
|
||||||
|
{
|
||||||
|
res = (value * targetUnit.Modifier) / originUnit.Modifier;
|
||||||
|
} else
|
||||||
|
res = (value * originUnit.Modifier) / targetUnit.Modifier;
|
||||||
|
}
|
||||||
|
res = Math.Round(res, 2);
|
||||||
await msg.Reply(string.Format("{0} {1} is equal to {2} {3}", value, originUnit.Triggers.First(), res, targetUnit.Triggers.First()));
|
await msg.Reply(string.Format("{0} {1} is equal to {2} {3}", value, originUnit.Triggers.First(), res, targetUnit.Triggers.First()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static async Task<Rates> UpdateCurrencyRates()
|
public static async Task<Rates> UpdateCurrencyRates()
|
||||||
|
{
|
||||||
|
using (var http = new HttpClient())
|
||||||
{
|
{
|
||||||
using (var http = new HttpClient())
|
var res = await http.GetStringAsync("http://api.fixer.io/latest").ConfigureAwait(false);
|
||||||
{
|
return JsonConvert.DeserializeObject<Rates>(res);
|
||||||
var res = await http.GetStringAsync("http://api.fixer.io/latest").ConfigureAwait(false);
|
|
||||||
return JsonConvert.DeserializeObject<Rates>(res);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public class Rates
|
public class Rates
|
||||||
{
|
{
|
||||||
[JsonProperty("base")]
|
[JsonProperty("base")]
|
||||||
public string Base { get; set; }
|
public string Base { get; set; }
|
||||||
[JsonProperty("date")]
|
[JsonProperty("date")]
|
||||||
public DateTime Date { get; set; }
|
public DateTime Date { get; set; }
|
||||||
[JsonProperty("rates")]
|
[JsonProperty("rates")]
|
||||||
public Dictionary<string, decimal> ConversionRates { get; set; }
|
public Dictionary<string, decimal> ConversionRates { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public class JsonUnit
|
public class JsonUnit
|
||||||
@ -127,6 +198,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
public decimal Modifier { get; set; }
|
public decimal Modifier { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#region GetXML
|
#region GetXML
|
||||||
/*
|
/*
|
||||||
public class UnitCollection
|
public class UnitCollection
|
||||||
|
@ -945,5 +945,37 @@
|
|||||||
],
|
],
|
||||||
"UnitType": "currency",
|
"UnitType": "currency",
|
||||||
"Modifier": 16.0537
|
"Modifier": 16.0537
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Triggers": [
|
||||||
|
"K",
|
||||||
|
"kelvin"
|
||||||
|
],
|
||||||
|
"UnitType": "temperature",
|
||||||
|
"Modifier": 0.00
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Triggers": [
|
||||||
|
"F",
|
||||||
|
"fahrenheit"
|
||||||
|
],
|
||||||
|
"UnitType": "temperature",
|
||||||
|
"Modifier": 0.00
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Triggers": [
|
||||||
|
"C",
|
||||||
|
"Celcius",
|
||||||
|
"Centigrade"
|
||||||
|
],
|
||||||
|
"UnitType": "temperature",
|
||||||
|
"Modifier": 0.00
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Triggers": [
|
||||||
|
"EUR"
|
||||||
|
],
|
||||||
|
"UnitType": "currency",
|
||||||
|
"Modifier": 1.0
|
||||||
}
|
}
|
||||||
]
|
]
|
Loading…
Reference in New Issue
Block a user