Added functions and constants
This commit is contained in:
parent
5d5b06ddd3
commit
5648b58d07
@ -1,26 +1,80 @@
|
|||||||
using Discord;
|
using Discord;
|
||||||
using Discord.Commands;
|
using Discord.Commands;
|
||||||
|
using NadekoBot.Attributes;
|
||||||
using NadekoBot.Extensions;
|
using NadekoBot.Extensions;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace NadekoBot.Modules.Searches.Commands
|
namespace NadekoBot.Modules.Searches
|
||||||
{
|
{
|
||||||
|
[Group]
|
||||||
public partial class Searches
|
public partial class Searches
|
||||||
{
|
{
|
||||||
public static async Task Calc(IMessage msg, [Remainder] string expression)
|
[LocalizedCommand, LocalizedDescription, LocalizedSummary]
|
||||||
|
[RequireContext(ContextType.Guild)]
|
||||||
|
public static async Task Calculate(IMessage msg, [Remainder] string expression)
|
||||||
{
|
{
|
||||||
var expr = new NCalc.Expression(expression);
|
|
||||||
//expr.EvaluateParameter += delegate (string name, NCalc.ParameterArgs args)
|
|
||||||
//{
|
|
||||||
// if (name.ToLowerInvariant() == "pi") args.Result = Math.PI;
|
|
||||||
//};
|
|
||||||
var result = expr.Evaluate();
|
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
var expr = new NCalc.Expression(expression, NCalc.EvaluateOptions.IgnoreCase);
|
||||||
|
expr.EvaluateParameter += Expr_EvaluateParameter;
|
||||||
|
expr.EvaluateFunction += Expr_EvaluateFunction;
|
||||||
|
var result = expr.Evaluate();
|
||||||
await msg.Reply(string.Format("Your expression evaluated to: {0}", expr.Error ?? result));
|
await msg.Reply(string.Format("Your expression evaluated to: {0}", expr.Error ?? result));
|
||||||
}
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
await msg.Reply($"Your expression failed to evaluate: {e.Message} ");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void Expr_EvaluateFunction(string name, NCalc.FunctionArgs args)
|
||||||
|
{
|
||||||
|
switch (name.ToLowerInvariant())
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void Expr_EvaluateParameter(string name, NCalc.ParameterArgs args)
|
||||||
|
{
|
||||||
|
switch (name.ToLowerInvariant()) {
|
||||||
|
case "pi": args.Result= Math.PI;
|
||||||
|
break;
|
||||||
|
case "e": args.Result = Math.E;
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
[Command("calcOperations")]
|
||||||
|
[RequireContext(ContextType.Guild)]
|
||||||
|
public async Task calcOperations(IMessage msg)
|
||||||
|
{
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
var selection = typeof(Math).GetTypeInfo().GetMethods().Except(typeof(object).GetTypeInfo().GetMethods()).Select(x =>
|
||||||
|
{
|
||||||
|
var name = x.Name;
|
||||||
|
if (x.GetParameters().Any())
|
||||||
|
{
|
||||||
|
name += " (" + string.Join(", ", x.GetParameters().Select(y => y.IsOptional ? $"[{y.ParameterType.Name + " " + y.Name }]" : y.ParameterType.Name + " " + y.Name)) + ")";
|
||||||
|
}
|
||||||
|
|
||||||
|
return name;
|
||||||
|
});
|
||||||
|
foreach (var method in selection) builder.AppendLine(method);
|
||||||
|
await msg.ReplyLong(builder.ToString());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
class ExpressionContext
|
class ExpressionContext
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user