| @@ -26,10 +26,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Discord.Net.Commands", "src | |||||
| EndProject | EndProject | ||||
| Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "dotnet", "dotnet", "{EA68EBE2-51C8-4440-9EF7-D633C90A5D35}" | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "dotnet", "dotnet", "{EA68EBE2-51C8-4440-9EF7-D633C90A5D35}" | ||||
| EndProject | EndProject | ||||
| Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Opus.Net", "src\Opus.Net\Opus.Net.xproj", "{42AB6A2D-2F2C-4003-80EF-33B5B5B0ED8E}" | |||||
| EndProject | |||||
| Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Opus.Net", "src\Opus.Net.Net45\Opus.Net.csproj", "{114C8C10-7354-4EC3-819A-33E83AA57768}" | |||||
| EndProject | |||||
| Global | Global | ||||
| GlobalSection(SolutionConfigurationPlatforms) = preSolution | GlobalSection(SolutionConfigurationPlatforms) = preSolution | ||||
| Debug|Any CPU = Debug|Any CPU | Debug|Any CPU = Debug|Any CPU | ||||
| @@ -56,14 +52,6 @@ Global | |||||
| {1B5603B4-6F8F-4289-B945-7BAAE523D740}.Debug|Any CPU.Build.0 = Debug|Any CPU | {1B5603B4-6F8F-4289-B945-7BAAE523D740}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||||
| {1B5603B4-6F8F-4289-B945-7BAAE523D740}.Release|Any CPU.ActiveCfg = Release|Any CPU | {1B5603B4-6F8F-4289-B945-7BAAE523D740}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||||
| {1B5603B4-6F8F-4289-B945-7BAAE523D740}.Release|Any CPU.Build.0 = Release|Any CPU | {1B5603B4-6F8F-4289-B945-7BAAE523D740}.Release|Any CPU.Build.0 = Release|Any CPU | ||||
| {42AB6A2D-2F2C-4003-80EF-33B5B5B0ED8E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
| {42AB6A2D-2F2C-4003-80EF-33B5B5B0ED8E}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
| {42AB6A2D-2F2C-4003-80EF-33B5B5B0ED8E}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
| {42AB6A2D-2F2C-4003-80EF-33B5B5B0ED8E}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
| {114C8C10-7354-4EC3-819A-33E83AA57768}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
| {114C8C10-7354-4EC3-819A-33E83AA57768}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
| {114C8C10-7354-4EC3-819A-33E83AA57768}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
| {114C8C10-7354-4EC3-819A-33E83AA57768}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
| EndGlobalSection | EndGlobalSection | ||||
| GlobalSection(SolutionProperties) = preSolution | GlobalSection(SolutionProperties) = preSolution | ||||
| HideSolutionNode = FALSE | HideSolutionNode = FALSE | ||||
| @@ -76,7 +64,5 @@ Global | |||||
| {8D71A857-879A-4A10-859E-5FF824ED6688} = {B47C4063-C4EB-46AA-886D-B868DA1BF0A0} | {8D71A857-879A-4A10-859E-5FF824ED6688} = {B47C4063-C4EB-46AA-886D-B868DA1BF0A0} | ||||
| {1B5603B4-6F8F-4289-B945-7BAAE523D740} = {B47C4063-C4EB-46AA-886D-B868DA1BF0A0} | {1B5603B4-6F8F-4289-B945-7BAAE523D740} = {B47C4063-C4EB-46AA-886D-B868DA1BF0A0} | ||||
| {EA68EBE2-51C8-4440-9EF7-D633C90A5D35} = {8D7989F0-66CE-4DBB-8230-D8C811E9B1D7} | {EA68EBE2-51C8-4440-9EF7-D633C90A5D35} = {8D7989F0-66CE-4DBB-8230-D8C811E9B1D7} | ||||
| {42AB6A2D-2F2C-4003-80EF-33B5B5B0ED8E} = {EA68EBE2-51C8-4440-9EF7-D633C90A5D35} | |||||
| {114C8C10-7354-4EC3-819A-33E83AA57768} = {B47C4063-C4EB-46AA-886D-B868DA1BF0A0} | |||||
| EndGlobalSection | EndGlobalSection | ||||
| EndGlobal | EndGlobal | ||||
| @@ -31,10 +31,6 @@ | |||||
| <WarningLevel>4</WarningLevel> | <WarningLevel>4</WarningLevel> | ||||
| <TreatWarningsAsErrors>true</TreatWarningsAsErrors> | <TreatWarningsAsErrors>true</TreatWarningsAsErrors> | ||||
| </PropertyGroup> | </PropertyGroup> | ||||
| <ItemGroup /> | |||||
| <ItemGroup> | |||||
| <Reference Include="System" /> | |||||
| </ItemGroup> | |||||
| <ItemGroup> | <ItemGroup> | ||||
| <ProjectReference Include="..\Discord.Net.Net45\Discord.Net.csproj"> | <ProjectReference Include="..\Discord.Net.Net45\Discord.Net.csproj"> | ||||
| <Project>{8d71a857-879a-4a10-859e-5ff824ed6688}</Project> | <Project>{8d71a857-879a-4a10-859e-5ff824ed6688}</Project> | ||||
| @@ -42,6 +38,12 @@ | |||||
| </ProjectReference> | </ProjectReference> | ||||
| </ItemGroup> | </ItemGroup> | ||||
| <ItemGroup> | <ItemGroup> | ||||
| <Reference Include="System" /> | |||||
| </ItemGroup> | |||||
| <ItemGroup> | |||||
| <Compile Include="..\Discord.Net.Commands\Command.cs"> | |||||
| <Link>Command.cs</Link> | |||||
| </Compile> | |||||
| <Compile Include="..\Discord.Net.Commands\CommandBuilder.cs"> | <Compile Include="..\Discord.Net.Commands\CommandBuilder.cs"> | ||||
| <Link>CommandBuilder.cs</Link> | <Link>CommandBuilder.cs</Link> | ||||
| </Compile> | </Compile> | ||||
| @@ -13,5 +13,5 @@ using System.Runtime.InteropServices; | |||||
| [assembly: ComVisible(false)] | [assembly: ComVisible(false)] | ||||
| [assembly: Guid("76ea00e6-ea24-41e1-acb2-639c0313fa80")] | [assembly: Guid("76ea00e6-ea24-41e1-acb2-639c0313fa80")] | ||||
| [assembly: AssemblyVersion("0.5.0.0")] | |||||
| [assembly: AssemblyFileVersion("0.5.0.0")] | |||||
| [assembly: AssemblyVersion("0.6.0.0")] | |||||
| [assembly: AssemblyFileVersion("0.6.0.0")] | |||||
| @@ -0,0 +1,21 @@ | |||||
| using System; | |||||
| using System.Threading.Tasks; | |||||
| namespace Discord.Commands | |||||
| { | |||||
| public sealed class Command | |||||
| { | |||||
| public string Text { get; } | |||||
| public int? MinArgs { get; internal set; } | |||||
| public int? MaxArgs { get; internal set; } | |||||
| public int MinPerms { get; internal set; } | |||||
| internal readonly string[] Parts; | |||||
| internal Func<DiscordBotClient.CommandEventArgs, Task> Handler; | |||||
| internal Command(string text) | |||||
| { | |||||
| Text = text; | |||||
| Parts = text.ToLowerInvariant().Split(' '); | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -1,32 +1,106 @@ | |||||
| using System; | using System; | ||||
| using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
| namespace Discord | |||||
| namespace Discord.Commands | |||||
| { | { | ||||
| public sealed class CommandBuilder | public sealed class CommandBuilder | ||||
| { | |||||
| private readonly Command _command; | |||||
| public CommandBuilder(Command command) | |||||
| { | |||||
| _command = command; | |||||
| } | |||||
| public CommandBuilder ArgsEqual(int argCount) | |||||
| { | |||||
| _command.MinArgs = argCount; | |||||
| _command.MaxArgs = argCount; | |||||
| return this; | |||||
| } | |||||
| public CommandBuilder ArgsAtLeast(int minArgCount) | |||||
| { | |||||
| _command.MinArgs = minArgCount; | |||||
| _command.MaxArgs = null; | |||||
| return this; | |||||
| } | |||||
| public CommandBuilder ArgsAtMost(int maxArgCount) | |||||
| { | |||||
| _command.MinArgs = null; | |||||
| _command.MaxArgs = maxArgCount; | |||||
| return this; | |||||
| } | |||||
| public CommandBuilder ArgsBetween(int minArgCount, int maxArgCount) | |||||
| { | |||||
| _command.MinArgs = minArgCount; | |||||
| _command.MaxArgs = maxArgCount; | |||||
| return this; | |||||
| } | |||||
| public CommandBuilder NoArgs() | |||||
| { | |||||
| _command.MinArgs = 0; | |||||
| _command.MaxArgs = 0; | |||||
| return this; | |||||
| } | |||||
| public CommandBuilder AnyArgs() | |||||
| { | |||||
| _command.MinArgs = null; | |||||
| _command.MaxArgs = null; | |||||
| return this; | |||||
| } | |||||
| public CommandBuilder MinPermissions(int level) | |||||
| { | |||||
| _command.MinPerms = level; | |||||
| return this; | |||||
| } | |||||
| public CommandBuilder Do(Func<DiscordBotClient.CommandEventArgs, Task> func) | |||||
| { | |||||
| _command.Handler = func; | |||||
| return this; | |||||
| } | |||||
| public CommandBuilder Do(Action<DiscordBotClient.CommandEventArgs> func) | |||||
| { | |||||
| #if DNXCORE50 | |||||
| _command.Handler = e => { func(e); return Task.CompletedTask; }; | |||||
| #else | |||||
| _command.Handler = e => { func(e); return Task.Delay(0); }; | |||||
| #endif | |||||
| return this; | |||||
| } | |||||
| } | |||||
| public sealed class CommandGroupBuilder | |||||
| { | { | ||||
| private readonly DiscordBotClient _client; | private readonly DiscordBotClient _client; | ||||
| private readonly string _prefix; | private readonly string _prefix; | ||||
| private readonly bool _useWhitelist; | |||||
| private int _defaultMinPermissions; | |||||
| public CommandBuilder(DiscordBotClient client, string prefix, bool useWhitelist = false) | |||||
| internal CommandGroupBuilder(DiscordBotClient client, string prefix, int defaultMinPermissions) | |||||
| { | { | ||||
| _client = client; | _client = client; | ||||
| _prefix = prefix; | _prefix = prefix; | ||||
| _useWhitelist = useWhitelist; | |||||
| } | |||||
| _defaultMinPermissions = defaultMinPermissions; | |||||
| } | |||||
| public void AddCommandGroup(string cmd, Action<CommandBuilder> config, bool useWhitelist = false) | |||||
| public CommandGroupBuilder DefaultMinPermissions(int level) | |||||
| { | { | ||||
| config(new CommandBuilder(_client, _prefix + ' ' + cmd, useWhitelist)); | |||||
| _defaultMinPermissions = level; | |||||
| return this; | |||||
| } | } | ||||
| public void AddCommand(string cmd, int minArgs, int maxArgs, Action<DiscordBotClient.CommandEventArgs> handler, bool? useWhitelist = null) | |||||
| public CommandGroupBuilder CreateCommandGroup(string cmd, Action<CommandGroupBuilder> config = null) | |||||
| { | { | ||||
| AddCommand(cmd, minArgs, maxArgs, e => { handler(e); return null; }, useWhitelist); | |||||
| config(new CommandGroupBuilder(_client, _prefix + ' ' + cmd, _defaultMinPermissions)); | |||||
| return this; | |||||
| } | } | ||||
| public void AddCommand(string cmd, int minArgs, int maxArgs, Func<DiscordBotClient.CommandEventArgs, Task> handler, bool? useWhitelist = null) | |||||
| public CommandBuilder CreateCommand() | |||||
| => CreateCommand(""); | |||||
| public CommandBuilder CreateCommand(string cmd) | |||||
| { | { | ||||
| _client.AddCommand(cmd != "" ? _prefix + ' ' + cmd : _prefix, minArgs, maxArgs, handler, useWhitelist ?? _useWhitelist); | |||||
| var command = new Command(cmd != "" ? _prefix + ' ' + cmd : _prefix); | |||||
| command.MinPerms = _defaultMinPermissions; | |||||
| _client._commands.Add(command); | |||||
| return new CommandBuilder(command); | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -1,6 +1,6 @@ | |||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||
| namespace Discord | |||||
| namespace Discord.Commands | |||||
| { | { | ||||
| public static class CommandParser | public static class CommandParser | ||||
| { | { | ||||
| @@ -119,36 +119,5 @@ namespace Discord | |||||
| args = argList.ToArray(); | args = argList.ToArray(); | ||||
| return true; | return true; | ||||
| } | } | ||||
| public static bool ArgsEqual(string[] args, int expected) | |||||
| { | |||||
| return args.Length == expected; | |||||
| } | |||||
| public static bool ArgsAtLeast(string[] args, int expected) | |||||
| { | |||||
| return args.Length >= expected; | |||||
| } | |||||
| public static bool ArgsAtMost(string[] args, int expected) | |||||
| { | |||||
| return args.Length <= expected; | |||||
| } | |||||
| public static bool ArgsIn(string[] args, params int[] expected) | |||||
| { | |||||
| int count = args.Length; | |||||
| for (int i = 0; i < expected.Length; i++) | |||||
| { | |||||
| if (count == expected[i]) | |||||
| return true; | |||||
| } | |||||
| return false; | |||||
| } | |||||
| public static bool ArgsBetween(string[] args, int min, int max) | |||||
| { | |||||
| return args.Length >= min && args.Length <= max; | |||||
| } | |||||
| public static bool NoArgs(string[] args, params int[] expected) | |||||
| { | |||||
| return args.Length == 0; | |||||
| } | |||||
| } | } | ||||
| } | } | ||||
| @@ -1,14 +1,19 @@ | |||||
| using System; | |||||
| using Discord.Commands; | |||||
| using System; | |||||
| namespace Discord | namespace Discord | ||||
| { | { | ||||
| public partial class DiscordBotClient : DiscordClient | public partial class DiscordBotClient : DiscordClient | ||||
| { | { | ||||
| public class PermissionException : Exception { public PermissionException() : base("User does not have permission to run this command.") { } } | |||||
| public class CommandEventArgs | public class CommandEventArgs | ||||
| { | { | ||||
| public readonly Message Message; | |||||
| public readonly Command Command; | |||||
| public readonly string[] Args; | |||||
| public Message Message { get; } | |||||
| public Command Command { get; } | |||||
| public string CommandText { get; } | |||||
| public int? Permissions { get; } | |||||
| public string[] Args { get; } | |||||
| public User User => Message.User; | public User User => Message.User; | ||||
| public string UserId => Message.UserId; | public string UserId => Message.UserId; | ||||
| @@ -17,18 +22,21 @@ namespace Discord | |||||
| public Server Server => Message.Channel.Server; | public Server Server => Message.Channel.Server; | ||||
| public string ServerId => Message.Channel.ServerId; | public string ServerId => Message.Channel.ServerId; | ||||
| public CommandEventArgs(Message message, Command command, string[] args) | |||||
| public CommandEventArgs(Message message, Command command, string commandText, int? permissions, string[] args) | |||||
| { | { | ||||
| Message = message; | Message = message; | ||||
| Command = command; | Command = command; | ||||
| CommandText = commandText; | |||||
| Permissions = permissions; | |||||
| Args = args; | Args = args; | ||||
| } | } | ||||
| } | } | ||||
| public class CommandErrorEventArgs : CommandEventArgs | public class CommandErrorEventArgs : CommandEventArgs | ||||
| { | { | ||||
| public readonly Exception Exception; | |||||
| public CommandErrorEventArgs(Message message, Command command, string[] args, Exception ex) | |||||
| : base(message, command, args) | |||||
| public Exception Exception { get; } | |||||
| public CommandErrorEventArgs(CommandEventArgs baseArgs, Exception ex) | |||||
| : base(baseArgs.Message, baseArgs.Command, baseArgs.CommandText, baseArgs.Permissions, baseArgs.Args) | |||||
| { | { | ||||
| Exception = ex; | Exception = ex; | ||||
| } | } | ||||
| @@ -40,11 +48,17 @@ namespace Discord | |||||
| if (RanCommand != null) | if (RanCommand != null) | ||||
| RanCommand(this, args); | RanCommand(this, args); | ||||
| } | } | ||||
| public event EventHandler<CommandEventArgs> UnknownCommand; | |||||
| private void RaiseUnknownCommand(CommandEventArgs args) | |||||
| { | |||||
| if (UnknownCommand != null) | |||||
| UnknownCommand(this, args); | |||||
| } | |||||
| public event EventHandler<CommandErrorEventArgs> CommandError; | public event EventHandler<CommandErrorEventArgs> CommandError; | ||||
| private void RaiseCommandError(Message msg, Command command, string[] args, Exception ex) | |||||
| private void RaiseCommandError(CommandEventArgs args, Exception ex) | |||||
| { | { | ||||
| if (CommandError != null) | if (CommandError != null) | ||||
| CommandError(this, new CommandErrorEventArgs(msg, command, args, ex)); | |||||
| CommandError(this, new CommandErrorEventArgs(args, ex)); | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -1,33 +1,13 @@ | |||||
| using System; | |||||
| using Discord.Commands; | |||||
| using System; | |||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||
| using System.Threading.Tasks; | |||||
| namespace Discord | namespace Discord | ||||
| { | { | ||||
| public sealed class Command | |||||
| { | |||||
| public readonly string[] Text; | |||||
| public readonly int MinArgs, MaxArgs; | |||||
| public readonly bool UseWhitelist; | |||||
| internal readonly Func<DiscordBotClient.CommandEventArgs, Task> Handler; | |||||
| public Command(string[] text, int minArgs, int maxArgs, bool useWhitelist, Func<DiscordBotClient.CommandEventArgs, Task> handler) | |||||
| { | |||||
| Text = text; | |||||
| MinArgs = minArgs; | |||||
| MaxArgs = maxArgs; | |||||
| UseWhitelist = useWhitelist; | |||||
| Handler = handler; | |||||
| } | |||||
| } | |||||
| /// <summary> | |||||
| /// A Discord.Net client with extensions for handling common bot operations like text commands. | |||||
| /// </summary> | |||||
| /// <summary> A Discord.Net client with extensions for handling common bot operations like text commands. </summary> | |||||
| public partial class DiscordBotClient : DiscordClient | public partial class DiscordBotClient : DiscordClient | ||||
| { | { | ||||
| private List<Command> _commands; | |||||
| private List<string> _whitelist; | |||||
| internal List<Command> _commands; | |||||
| public IEnumerable<Command> Commands => _commands; | public IEnumerable<Command> Commands => _commands; | ||||
| @@ -35,17 +15,15 @@ namespace Discord | |||||
| public bool UseCommandChar { get; set; } | public bool UseCommandChar { get; set; } | ||||
| public bool RequireCommandCharInPublic { get; set; } | public bool RequireCommandCharInPublic { get; set; } | ||||
| public bool RequireCommandCharInPrivate { get; set; } | public bool RequireCommandCharInPrivate { get; set; } | ||||
| public bool AlwaysUseWhitelist { get; set; } | |||||
| public DiscordBotClient() | |||||
| public DiscordBotClient(DiscordClientConfig config = null, Func<User, int> getPermissions = null) | |||||
| : base(config) | |||||
| { | { | ||||
| _commands = new List<Command>(); | _commands = new List<Command>(); | ||||
| _whitelist = new List<string>(); | |||||
| CommandChar = '~'; | CommandChar = '~'; | ||||
| RequireCommandCharInPublic = true; | RequireCommandCharInPublic = true; | ||||
| RequireCommandCharInPrivate = true; | RequireCommandCharInPrivate = true; | ||||
| AlwaysUseWhitelist = false; | |||||
| MessageCreated += async (s, e) => | MessageCreated += async (s, e) => | ||||
| { | { | ||||
| @@ -53,10 +31,6 @@ namespace Discord | |||||
| if (e.Message.UserId == UserId) | if (e.Message.UserId == UserId) | ||||
| return; | return; | ||||
| //Check the global whitelist | |||||
| if (AlwaysUseWhitelist && !_whitelist.Contains(e.Message.UserId)) | |||||
| return; | |||||
| //Check for the command character | //Check for the command character | ||||
| string msg = e.Message.Text; | string msg = e.Message.Text; | ||||
| if (UseCommandChar) | if (UseCommandChar) | ||||
| @@ -86,9 +60,9 @@ namespace Discord | |||||
| continue; | continue; | ||||
| bool isValid = true; | bool isValid = true; | ||||
| for (int j = 0; j < cmd.Text.Length; j++) | |||||
| for (int j = 0; j < cmd.Parts.Length; j++) | |||||
| { | { | ||||
| if (!string.Equals(args[j], cmd.Text[j], StringComparison.OrdinalIgnoreCase)) | |||||
| if (!string.Equals(args[j], cmd.Parts[j], StringComparison.OrdinalIgnoreCase)) | |||||
| { | { | ||||
| isValid = false; | isValid = false; | ||||
| break; | break; | ||||
| @@ -97,21 +71,26 @@ namespace Discord | |||||
| if (!isValid) | if (!isValid) | ||||
| continue; | continue; | ||||
| //Check Whitelist | |||||
| if (cmd.UseWhitelist && !_whitelist.Contains(e.Message.UserId)) | |||||
| continue; | |||||
| //Check Arg Count | //Check Arg Count | ||||
| int argCount = args.Length - cmd.Text.Length; | |||||
| int argCount = args.Length - cmd.Parts.Length; | |||||
| if (argCount < cmd.MinArgs || argCount > cmd.MaxArgs) | if (argCount < cmd.MinArgs || argCount > cmd.MaxArgs) | ||||
| continue; | continue; | ||||
| //Run Command | |||||
| string[] newArgs = new string[argCount]; | |||||
| //Clean Args | |||||
| string[] newArgs = new string[argCount]; | |||||
| for (int j = 0; j < newArgs.Length; j++) | for (int j = 0; j < newArgs.Length; j++) | ||||
| newArgs[j] = args[j + cmd.Text.Length]; | |||||
| newArgs[j] = args[j + cmd.Parts.Length]; | |||||
| var eventArgs = new CommandEventArgs(e.Message, cmd, newArgs); | |||||
| //Check Permissions | |||||
| int permissions = getPermissions != null ? getPermissions(e.Message.User) : 0; | |||||
| var eventArgs = new CommandEventArgs(e.Message, cmd, msg, permissions, newArgs); | |||||
| if (permissions < cmd.MinPerms) | |||||
| { | |||||
| RaiseCommandError(eventArgs, new PermissionException()); | |||||
| return; | |||||
| } | |||||
| //Run Command | |||||
| RaiseRanCommand(eventArgs); | RaiseRanCommand(eventArgs); | ||||
| try | try | ||||
| { | { | ||||
| @@ -121,31 +100,20 @@ namespace Discord | |||||
| } | } | ||||
| catch (Exception ex) | catch (Exception ex) | ||||
| { | { | ||||
| RaiseCommandError(e.Message, cmd, newArgs, ex); | |||||
| RaiseCommandError(eventArgs, ex); | |||||
| } | } | ||||
| break; | break; | ||||
| } | } | ||||
| }; | }; | ||||
| } | } | ||||
| public void AddCommandGroup(string cmd, Action<CommandBuilder> config, bool useWhitelist = false) | |||||
| { | |||||
| config(new CommandBuilder(this, cmd, useWhitelist)); | |||||
| } | |||||
| public void AddCommand(string cmd, int minArgs, int maxArgs, Action<CommandEventArgs> handler, bool useWhitelist = false) | |||||
| { | |||||
| AddCommand(cmd, minArgs, maxArgs, e => { handler(e); return null; }, useWhitelist); | |||||
| } | |||||
| public void AddCommand(string cmd, int minArgs, int maxArgs, Func<CommandEventArgs, Task> handler, bool useWhitelist = false) | |||||
| { | |||||
| _commands.Add(new Command(cmd.Split(' '), minArgs, maxArgs, useWhitelist, handler)); | |||||
| } | |||||
| public void AddWhitelist(User user) | |||||
| => AddWhitelist(user.Id); | |||||
| public void AddWhitelist(string userId) | |||||
| public void CreateCommandGroup(string cmd, Action<CommandGroupBuilder> config = null) | |||||
| => config(new CommandGroupBuilder(this, cmd, 0)); | |||||
| public CommandBuilder CreateCommand(string cmd) | |||||
| { | { | ||||
| _whitelist.Add(userId); | |||||
| var command = new Command(cmd); | |||||
| _commands.Add(command); | |||||
| return new CommandBuilder(command); | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -1,5 +1,5 @@ | |||||
| { | { | ||||
| "version": "0.5.0-*", | |||||
| "version": "0.6.0-beta1", | |||||
| "description": "A small Discord.Net extension to make bot creation easier.", | "description": "A small Discord.Net extension to make bot creation easier.", | ||||
| "authors": [ "RogueException" ], | "authors": [ "RogueException" ], | ||||
| "tags": [ "discord", "discordapp" ], | "tags": [ "discord", "discordapp" ], | ||||
| @@ -13,7 +13,7 @@ | |||||
| "warningsAsErrors": true | "warningsAsErrors": true | ||||
| }, | }, | ||||
| "dependencies": { | "dependencies": { | ||||
| "Discord.Net": "0.5.0" | |||||
| "Discord.Net": "0.6.0-*" | |||||
| }, | }, | ||||
| "frameworks": { | "frameworks": { | ||||
| "net45": { }, | "net45": { }, | ||||
| @@ -23,6 +23,7 @@ | |||||
| <ErrorReport>prompt</ErrorReport> | <ErrorReport>prompt</ErrorReport> | ||||
| <WarningLevel>2</WarningLevel> | <WarningLevel>2</WarningLevel> | ||||
| <TreatWarningsAsErrors>false</TreatWarningsAsErrors> | <TreatWarningsAsErrors>false</TreatWarningsAsErrors> | ||||
| <AllowUnsafeBlocks>true</AllowUnsafeBlocks> | |||||
| </PropertyGroup> | </PropertyGroup> | ||||
| <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | ||||
| <DebugType>pdbonly</DebugType> | <DebugType>pdbonly</DebugType> | ||||
| @@ -32,16 +33,13 @@ | |||||
| <ErrorReport>prompt</ErrorReport> | <ErrorReport>prompt</ErrorReport> | ||||
| <WarningLevel>4</WarningLevel> | <WarningLevel>4</WarningLevel> | ||||
| <TreatWarningsAsErrors>true</TreatWarningsAsErrors> | <TreatWarningsAsErrors>true</TreatWarningsAsErrors> | ||||
| <AllowUnsafeBlocks>true</AllowUnsafeBlocks> | |||||
| </PropertyGroup> | </PropertyGroup> | ||||
| <ItemGroup> | <ItemGroup> | ||||
| <Reference Include="Newtonsoft.Json, Version=7.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> | <Reference Include="Newtonsoft.Json, Version=7.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> | ||||
| <HintPath>..\..\packages\Newtonsoft.Json.7.0.1\lib\net45\Newtonsoft.Json.dll</HintPath> | <HintPath>..\..\packages\Newtonsoft.Json.7.0.1\lib\net45\Newtonsoft.Json.dll</HintPath> | ||||
| <Private>True</Private> | <Private>True</Private> | ||||
| </Reference> | </Reference> | ||||
| <Reference Include="Sodium, Version=0.8.0.0, Culture=neutral, processorArchitecture=MSIL"> | |||||
| <HintPath>..\..\packages\libsodium-net.0.8.0\lib\Net40\Sodium.dll</HintPath> | |||||
| <Private>True</Private> | |||||
| </Reference> | |||||
| <Reference Include="System" /> | <Reference Include="System" /> | ||||
| <Reference Include="System.Net.Http" /> | <Reference Include="System.Net.Http" /> | ||||
| </ItemGroup> | </ItemGroup> | ||||
| @@ -124,6 +122,12 @@ | |||||
| <Compile Include="..\Discord.Net\Message.cs"> | <Compile Include="..\Discord.Net\Message.cs"> | ||||
| <Link>Message.cs</Link> | <Link>Message.cs</Link> | ||||
| </Compile> | </Compile> | ||||
| <Compile Include="..\Discord.Net\Opus\API.cs"> | |||||
| <Link>Opus\API.cs</Link> | |||||
| </Compile> | |||||
| <Compile Include="..\Discord.Net\Opus\OpusEncoder.cs"> | |||||
| <Link>Opus\OpusEncoder.cs</Link> | |||||
| </Compile> | |||||
| <Compile Include="..\Discord.Net\PackedPermissions.cs"> | <Compile Include="..\Discord.Net\PackedPermissions.cs"> | ||||
| <Link>PackedPermissions.cs</Link> | <Link>PackedPermissions.cs</Link> | ||||
| </Compile> | </Compile> | ||||
| @@ -141,20 +145,8 @@ | |||||
| </Compile> | </Compile> | ||||
| <Compile Include="Properties\AssemblyInfo.cs" /> | <Compile Include="Properties\AssemblyInfo.cs" /> | ||||
| </ItemGroup> | </ItemGroup> | ||||
| <ItemGroup> | |||||
| <ProjectReference Include="..\Opus.Net.Net45\Opus.Net.csproj"> | |||||
| <Project>{114c8c10-7354-4ec3-819a-33e83aa57768}</Project> | |||||
| <Name>Opus.Net</Name> | |||||
| </ProjectReference> | |||||
| </ItemGroup> | |||||
| <ItemGroup /> | |||||
| <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> | <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> | ||||
| <Import Project="..\..\packages\Baseclass.Contrib.Nuget.Output.1.0.0\build\net40\Baseclass.Contrib.Nuget.Output.targets" Condition="Exists('..\..\packages\Baseclass.Contrib.Nuget.Output.1.0.0\build\net40\Baseclass.Contrib.Nuget.Output.targets')" /> | |||||
| <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> | |||||
| <PropertyGroup> | |||||
| <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> | |||||
| </PropertyGroup> | |||||
| <Error Condition="!Exists('..\..\packages\Baseclass.Contrib.Nuget.Output.1.0.0\build\net40\Baseclass.Contrib.Nuget.Output.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Baseclass.Contrib.Nuget.Output.1.0.0\build\net40\Baseclass.Contrib.Nuget.Output.targets'))" /> | |||||
| </Target> | |||||
| <!-- To modify your build process, add your task inside one of the targets below and uncomment it. | <!-- To modify your build process, add your task inside one of the targets below and uncomment it. | ||||
| Other similar extension points exist, see Microsoft.Common.targets. | Other similar extension points exist, see Microsoft.Common.targets. | ||||
| <Target Name="BeforeBuild"> | <Target Name="BeforeBuild"> | ||||
| @@ -13,5 +13,5 @@ using System.Runtime.InteropServices; | |||||
| [assembly: ComVisible(false)] | [assembly: ComVisible(false)] | ||||
| [assembly: Guid("76ea00e6-ea24-41e1-acb2-639c0313fa80")] | [assembly: Guid("76ea00e6-ea24-41e1-acb2-639c0313fa80")] | ||||
| [assembly: AssemblyVersion("0.5.0.0")] | |||||
| [assembly: AssemblyFileVersion("0.5.0.0")] | |||||
| [assembly: AssemblyVersion("0.6.0.0")] | |||||
| [assembly: AssemblyFileVersion("0.6.0.0")] | |||||
| @@ -1,6 +1,4 @@ | |||||
| <?xml version="1.0" encoding="utf-8"?> | <?xml version="1.0" encoding="utf-8"?> | ||||
| <packages> | <packages> | ||||
| <package id="Baseclass.Contrib.Nuget.Output" version="1.0.0" targetFramework="net45" /> | |||||
| <package id="libsodium-net" version="0.8.0" targetFramework="net45" /> | |||||
| <package id="Newtonsoft.Json" version="7.0.1" targetFramework="net45" /> | <package id="Newtonsoft.Json" version="7.0.1" targetFramework="net45" /> | ||||
| </packages> | </packages> | ||||
| @@ -1,5 +1,6 @@ | |||||
| using Discord.API.Models; | using Discord.API.Models; | ||||
| using Discord.Helpers; | using Discord.Helpers; | ||||
| using System; | |||||
| using System.IO; | using System.IO; | ||||
| using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
| @@ -124,7 +125,7 @@ namespace Discord.API | |||||
| } | } | ||||
| public static Task<SelfUserInfo> ChangeEmail(string newEmail, string currentPassword) | public static Task<SelfUserInfo> ChangeEmail(string newEmail, string currentPassword) | ||||
| { | { | ||||
| var request = new APIRequests.ChangeEmail { Email = newEmail, CurrentPassword = currentPassword }; | |||||
| var request = new APIRequests.ChangeEmail { NewEmail = newEmail, CurrentPassword = currentPassword }; | |||||
| return Http.Patch<SelfUserInfo>(Endpoints.UserMe, request); | return Http.Patch<SelfUserInfo>(Endpoints.UserMe, request); | ||||
| } | } | ||||
| public static Task<SelfUserInfo> ChangePassword(string newPassword, string currentEmail, string currentPassword) | public static Task<SelfUserInfo> ChangePassword(string newPassword, string currentEmail, string currentPassword) | ||||
| @@ -132,5 +133,12 @@ namespace Discord.API | |||||
| var request = new APIRequests.ChangePassword { NewPassword = newPassword, CurrentEmail = currentEmail, CurrentPassword = currentPassword }; | var request = new APIRequests.ChangePassword { NewPassword = newPassword, CurrentEmail = currentEmail, CurrentPassword = currentPassword }; | ||||
| return Http.Patch<SelfUserInfo>(Endpoints.UserMe, request); | return Http.Patch<SelfUserInfo>(Endpoints.UserMe, request); | ||||
| } | } | ||||
| public static Task<SelfUserInfo> ChangeAvatar(DiscordClient.AvatarImageType imageType, byte[] bytes, string currentEmail, string currentPassword) | |||||
| { | |||||
| string base64 = Convert.ToBase64String(bytes); | |||||
| string type = imageType == DiscordClient.AvatarImageType.Jpeg ? "image/jpeg;base64" : "image/png;base64"; | |||||
| var request = new APIRequests.ChangeAvatar { Avatar = $"data:{type},/9j/{base64}", CurrentEmail = currentEmail, CurrentPassword = currentPassword }; | |||||
| return Http.Patch<SelfUserInfo>(Endpoints.UserMe, request); | |||||
| } | |||||
| } | } | ||||
| } | } | ||||
| @@ -78,30 +78,34 @@ namespace Discord.API.Models | |||||
| public bool Deaf; | public bool Deaf; | ||||
| } | } | ||||
| public class ChangeUsername | |||||
| public abstract class ChangeProfile | |||||
| { | { | ||||
| [JsonProperty(PropertyName = "username")] | |||||
| public string Username; | |||||
| [JsonProperty(PropertyName = "email")] | [JsonProperty(PropertyName = "email")] | ||||
| public string CurrentEmail; | public string CurrentEmail; | ||||
| [JsonProperty(PropertyName = "password")] | [JsonProperty(PropertyName = "password")] | ||||
| public string CurrentPassword; | public string CurrentPassword; | ||||
| } | } | ||||
| public class ChangeUsername : ChangeProfile | |||||
| { | |||||
| [JsonProperty(PropertyName = "username")] | |||||
| public string Username; | |||||
| } | |||||
| public class ChangeEmail | public class ChangeEmail | ||||
| { | { | ||||
| [JsonProperty(PropertyName = "email")] | [JsonProperty(PropertyName = "email")] | ||||
| public string Email; | |||||
| public string NewEmail; | |||||
| [JsonProperty(PropertyName = "password")] | [JsonProperty(PropertyName = "password")] | ||||
| public string CurrentPassword; | public string CurrentPassword; | ||||
| } | } | ||||
| public class ChangePassword | |||||
| public class ChangePassword : ChangeProfile | |||||
| { | { | ||||
| [JsonProperty(PropertyName = "new_password")] | [JsonProperty(PropertyName = "new_password")] | ||||
| public string NewPassword; | public string NewPassword; | ||||
| [JsonProperty(PropertyName = "email")] | |||||
| public string CurrentEmail; | |||||
| [JsonProperty(PropertyName = "password")] | |||||
| public string CurrentPassword; | |||||
| } | |||||
| public class ChangeAvatar : ChangeProfile | |||||
| { | |||||
| [JsonProperty(PropertyName = "avatar")] | |||||
| public string Avatar; | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -3,7 +3,6 @@ | |||||
| #pragma warning disable CS0169 | #pragma warning disable CS0169 | ||||
| using Newtonsoft.Json; | using Newtonsoft.Json; | ||||
| using Newtonsoft.Json.Linq; | |||||
| using System; | using System; | ||||
| namespace Discord.API.Models | namespace Discord.API.Models | ||||
| @@ -64,7 +64,7 @@ namespace Discord | |||||
| #if !DNXCORE50 | #if !DNXCORE50 | ||||
| private string _currentVoiceServerId, _currentVoiceEndpoint, _currentVoiceToken; | private string _currentVoiceServerId, _currentVoiceEndpoint, _currentVoiceToken; | ||||
| public string CurrentVoiceServerId { get { return _currentVoiceEndpoint != null ? _currentVoiceToken : null; } } | |||||
| public string CurrentVoiceServerId => _currentVoiceEndpoint != null ? _currentVoiceToken : null; | |||||
| public Server CurrentVoiceServer => _servers[CurrentVoiceServerId]; | public Server CurrentVoiceServer => _servers[CurrentVoiceServerId]; | ||||
| #endif | #endif | ||||
| /// <summary> Returns true if the user has successfully logged in and the websocket connection has been established. </summary> | /// <summary> Returns true if the user has successfully logged in and the websocket connection has been established. </summary> | ||||
| @@ -1384,6 +1384,20 @@ namespace Discord | |||||
| _users.Update(response.Id, response); | _users.Update(response.Id, response); | ||||
| } | } | ||||
| public enum AvatarImageType | |||||
| { | |||||
| Jpeg, | |||||
| Png | |||||
| } | |||||
| /// <summary> Changes your avatar. </summary> | |||||
| /// <remarks>Only supports PNG and JPEG (see AvatarImageType)</remarks> | |||||
| public async Task ChangeAvatar(AvatarImageType imageType, byte[] bytes, string currentEmail, string currentPassword) | |||||
| { | |||||
| CheckReady(); | |||||
| var response = await DiscordAPI.ChangeAvatar(imageType, bytes, currentEmail, currentPassword); | |||||
| _users.Update(response.Id, response); | |||||
| } | |||||
| //Helpers | //Helpers | ||||
| private void CheckReady() | private void CheckReady() | ||||
| { | { | ||||
| @@ -1,6 +1,7 @@ | |||||
| //#define USE_THREAD | //#define USE_THREAD | ||||
| #if !DNXCORE50 | #if !DNXCORE50 | ||||
| using Discord.API.Models; | using Discord.API.Models; | ||||
| using Discord.Opus; | |||||
| using Newtonsoft.Json; | using Newtonsoft.Json; | ||||
| using Newtonsoft.Json.Linq; | using Newtonsoft.Json.Linq; | ||||
| using System; | using System; | ||||
| @@ -13,7 +14,6 @@ using System.Threading; | |||||
| using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
| using System.Text; | using System.Text; | ||||
| using WebSocketMessage = Discord.API.Models.VoiceWebSocketCommands.WebSocketMessage; | using WebSocketMessage = Discord.API.Models.VoiceWebSocketCommands.WebSocketMessage; | ||||
| using Opus.Net; | |||||
| namespace Discord | namespace Discord | ||||
| { | { | ||||
| @@ -1,11 +1,7 @@ | |||||
| using System; | using System; | ||||
| using System.Collections.Generic; | |||||
| using System.IO; | |||||
| using System.Linq; | |||||
| using System.Runtime.InteropServices; | using System.Runtime.InteropServices; | ||||
| using System.Threading.Tasks; | |||||
| namespace Opus.Net | |||||
| namespace Discord.Opus | |||||
| { | { | ||||
| internal class API | internal class API | ||||
| { | { | ||||
| @@ -42,9 +38,7 @@ namespace Opus.Net | |||||
| GetInbandFECRequest = 4013 | GetInbandFECRequest = 4013 | ||||
| } | } | ||||
| /// <summary> | |||||
| /// Supported coding modes. | |||||
| /// </summary> | |||||
| /// <summary>Supported coding modes.</summary> | |||||
| public enum Application : int | public enum Application : int | ||||
| { | { | ||||
| /// <summary> | /// <summary> | ||||
| @@ -58,45 +52,27 @@ namespace Opus.Net | |||||
| /// Use this mode for music and mixed (music/voice) content, broadcast, and applications requiring less than 15 ms of coding delay. | /// Use this mode for music and mixed (music/voice) content, broadcast, and applications requiring less than 15 ms of coding delay. | ||||
| /// </summary> | /// </summary> | ||||
| Audio = 2049, | Audio = 2049, | ||||
| /// <summary> | |||||
| /// Low-delay mode that disables the speech-optimized mode in exchange for slightly reduced delay. | |||||
| /// </summary> | |||||
| /// <summary> Low-delay mode that disables the speech-optimized mode in exchange for slightly reduced delay. </summary> | |||||
| Restricted_LowLatency = 2051 | Restricted_LowLatency = 2051 | ||||
| } | } | ||||
| public enum Error : int | public enum Error : int | ||||
| { | { | ||||
| /// <summary> | |||||
| /// No error. | |||||
| /// </summary> | |||||
| /// <summary> No error. </summary> | |||||
| OK = 0, | OK = 0, | ||||
| /// <summary> | |||||
| /// One or more invalid/out of range arguments. | |||||
| /// </summary> | |||||
| /// <summary> One or more invalid/out of range arguments. </summary> | |||||
| BadArg = -1, | BadArg = -1, | ||||
| /// <summary> | |||||
| /// The mode struct passed is invalid. | |||||
| /// </summary> | |||||
| /// <summary> The mode struct passed is invalid. </summary> | |||||
| BufferToSmall = -2, | BufferToSmall = -2, | ||||
| /// <summary> | |||||
| /// An internal error was detected. | |||||
| /// </summary> | |||||
| /// <summary> An internal error was detected. </summary> | |||||
| InternalError = -3, | InternalError = -3, | ||||
| /// <summary> | |||||
| /// The compressed data passed is corrupted. | |||||
| /// </summary> | |||||
| /// <summary> The compressed data passed is corrupted. </summary> | |||||
| InvalidPacket = -4, | InvalidPacket = -4, | ||||
| /// <summary> | |||||
| /// Invalid/unsupported request number. | |||||
| /// </summary> | |||||
| /// <summary> Invalid/unsupported request number. </summary> | |||||
| Unimplemented = -5, | Unimplemented = -5, | ||||
| /// <summary> | |||||
| /// An encoder or decoder structure is invalid or already freed. | |||||
| /// </summary> | |||||
| /// <summary> An encoder or decoder structure is invalid or already freed. </summary> | |||||
| InvalidState = -6, | InvalidState = -6, | ||||
| /// <summary> | |||||
| /// Memory allocation has failed. | |||||
| /// </summary> | |||||
| /// <summary> Memory allocation has failed. </summary> | |||||
| AllocFail = -7 | AllocFail = -7 | ||||
| } | } | ||||
| } | } | ||||
| @@ -1,6 +1,6 @@ | |||||
| using System; | using System; | ||||
| namespace Opus.Net | |||||
| namespace Discord.Opus | |||||
| { | { | ||||
| /// <summary> Opus codec wrapper. </summary> | /// <summary> Opus codec wrapper. </summary> | ||||
| public class OpusEncoder : IDisposable | public class OpusEncoder : IDisposable | ||||
| @@ -29,7 +29,7 @@ namespace Discord | |||||
| public bool IsVerified { get; internal set; } | public bool IsVerified { get; internal set; } | ||||
| /// <summary> Returns the string "<@Id>" to be used as a shortcut when including mentions in text. </summary> | /// <summary> Returns the string "<@Id>" to be used as a shortcut when including mentions in text. </summary> | ||||
| public string Mention { get { return $"<@{Id}>"; } } | |||||
| public string Mention => $"<@{Id}>"; | |||||
| public string PrivateChannelId { get; internal set; } | public string PrivateChannelId { get; internal set; } | ||||
| public Channel PrivateChannel => _client.GetChannel(PrivateChannelId); | public Channel PrivateChannel => _client.GetChannel(PrivateChannelId); | ||||
| @@ -1,5 +1,5 @@ | |||||
| { | { | ||||
| "version": "0.5.0-*", | |||||
| "version": "0.6.0-beta1", | |||||
| "description": "An unofficial .Net API wrapper for the Discord client.", | "description": "An unofficial .Net API wrapper for the Discord client.", | ||||
| "authors": [ "RogueException" ], | "authors": [ "RogueException" ], | ||||
| "tags": [ "discord", "discordapp" ], | "tags": [ "discord", "discordapp" ], | ||||
| @@ -9,6 +9,9 @@ | |||||
| "type": "git", | "type": "git", | ||||
| "url": "git://github.com/RogueException/Discord.Net" | "url": "git://github.com/RogueException/Discord.Net" | ||||
| }, | }, | ||||
| "compilationOptions": { | |||||
| "allowUnsafe": true | |||||
| }, | |||||
| "configurations": { | "configurations": { | ||||
| "FullDebug": { | "FullDebug": { | ||||
| "compilationOptions": { | "compilationOptions": { | ||||
| @@ -24,18 +27,12 @@ | |||||
| "frameworks": { | "frameworks": { | ||||
| "net45": { | "net45": { | ||||
| "dependencies": { | "dependencies": { | ||||
| "Microsoft.Net.Http": "2.2.22", | |||||
| "libsodium-net": "0.8.0", | |||||
| "Baseclass.Contrib.Nuget.Output": "2.1.0", | |||||
| "Opus.Net": "0.1.0" | |||||
| "Microsoft.Net.Http": "2.2.22" | |||||
| } | } | ||||
| }, | }, | ||||
| "dnx451": { | "dnx451": { | ||||
| "dependencies": { | "dependencies": { | ||||
| "Microsoft.Net.Http": "2.2.22", | |||||
| "libsodium-net": "0.8.0", | |||||
| "Baseclass.Contrib.Nuget.Output": "2.1.0", | |||||
| "Opus.Net": "0.1.0" | |||||
| "Microsoft.Net.Http": "2.2.22" | |||||
| } | } | ||||
| }, | }, | ||||
| "dnxcore50": { | "dnxcore50": { | ||||
| @@ -1,76 +0,0 @@ | |||||
| <?xml version="1.0" encoding="utf-8"?> | |||||
| <Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | |||||
| <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> | |||||
| <PropertyGroup> | |||||
| <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | |||||
| <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | |||||
| <ProjectGuid>{114C8C10-7354-4EC3-819A-33E83AA57768}</ProjectGuid> | |||||
| <OutputType>Library</OutputType> | |||||
| <AppDesignerFolder>Properties</AppDesignerFolder> | |||||
| <RootNamespace>Discord.Net</RootNamespace> | |||||
| <AssemblyName>Discord.Net</AssemblyName> | |||||
| <FileAlignment>512</FileAlignment> | |||||
| <TargetFrameworkVersion>v4.5</TargetFrameworkVersion> | |||||
| <NuGetPackageImportStamp> | |||||
| </NuGetPackageImportStamp> | |||||
| </PropertyGroup> | |||||
| <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | |||||
| <DebugSymbols>true</DebugSymbols> | |||||
| <DebugType>full</DebugType> | |||||
| <Optimize>false</Optimize> | |||||
| <OutputPath>bin\Debug\</OutputPath> | |||||
| <DefineConstants>DEBUG;TRACE</DefineConstants> | |||||
| <ErrorReport>prompt</ErrorReport> | |||||
| <WarningLevel>2</WarningLevel> | |||||
| <TreatWarningsAsErrors>false</TreatWarningsAsErrors> | |||||
| <AllowUnsafeBlocks>true</AllowUnsafeBlocks> | |||||
| </PropertyGroup> | |||||
| <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | |||||
| <DebugType>pdbonly</DebugType> | |||||
| <Optimize>true</Optimize> | |||||
| <OutputPath>bin\Release\</OutputPath> | |||||
| <DefineConstants>TRACE</DefineConstants> | |||||
| <ErrorReport>prompt</ErrorReport> | |||||
| <WarningLevel>4</WarningLevel> | |||||
| <TreatWarningsAsErrors>true</TreatWarningsAsErrors> | |||||
| </PropertyGroup> | |||||
| <ItemGroup> | |||||
| <Reference Include="Newtonsoft.Json, Version=7.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> | |||||
| <HintPath>..\..\packages\Newtonsoft.Json.7.0.1\lib\net45\Newtonsoft.Json.dll</HintPath> | |||||
| <Private>True</Private> | |||||
| </Reference> | |||||
| <Reference Include="Sodium, Version=0.8.0.0, Culture=neutral, processorArchitecture=MSIL"> | |||||
| <HintPath>..\..\packages\libsodium-net.0.8.0\lib\Net40\Sodium.dll</HintPath> | |||||
| <Private>True</Private> | |||||
| </Reference> | |||||
| <Reference Include="System" /> | |||||
| <Reference Include="System.Net.Http" /> | |||||
| </ItemGroup> | |||||
| <ItemGroup> | |||||
| <None Include="packages.config" /> | |||||
| </ItemGroup> | |||||
| <ItemGroup> | |||||
| <Compile Include="..\Opus.Net\API.cs"> | |||||
| <Link>API.cs</Link> | |||||
| </Compile> | |||||
| <Compile Include="..\Opus.Net\OpusEncoder.cs"> | |||||
| <Link>OpusEncoder.cs</Link> | |||||
| </Compile> | |||||
| <Compile Include="Properties\AssemblyInfo.cs" /> | |||||
| </ItemGroup> | |||||
| <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> | |||||
| <Import Project="..\..\packages\Baseclass.Contrib.Nuget.Output.1.0.0\build\net40\Baseclass.Contrib.Nuget.Output.targets" Condition="Exists('..\..\packages\Baseclass.Contrib.Nuget.Output.1.0.0\build\net40\Baseclass.Contrib.Nuget.Output.targets')" /> | |||||
| <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> | |||||
| <PropertyGroup> | |||||
| <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> | |||||
| </PropertyGroup> | |||||
| <Error Condition="!Exists('..\..\packages\Baseclass.Contrib.Nuget.Output.1.0.0\build\net40\Baseclass.Contrib.Nuget.Output.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Baseclass.Contrib.Nuget.Output.1.0.0\build\net40\Baseclass.Contrib.Nuget.Output.targets'))" /> | |||||
| </Target> | |||||
| <!-- To modify your build process, add your task inside one of the targets below and uncomment it. | |||||
| Other similar extension points exist, see Microsoft.Common.targets. | |||||
| <Target Name="BeforeBuild"> | |||||
| </Target> | |||||
| <Target Name="AfterBuild"> | |||||
| </Target> | |||||
| --> | |||||
| </Project> | |||||
| @@ -1,17 +0,0 @@ | |||||
| using System.Reflection; | |||||
| using System.Runtime.InteropServices; | |||||
| [assembly: AssemblyTitle("Opus.Net")] | |||||
| [assembly: AssemblyDescription("Opus .NET Wrapper")] | |||||
| [assembly: AssemblyConfiguration("")] | |||||
| [assembly: AssemblyCompany("John Carruthers")] | |||||
| [assembly: AssemblyProduct("Opus.Net")] | |||||
| [assembly: AssemblyCopyright("Copyright © 2013")] | |||||
| [assembly: AssemblyTrademark("")] | |||||
| [assembly: AssemblyCulture("")] | |||||
| [assembly: ComVisible(false)] | |||||
| [assembly: Guid("76ea00e6-ea24-41e1-acb2-639c0313fa80")] | |||||
| [assembly: AssemblyVersion("0.1.0.0")] | |||||
| [assembly: AssemblyFileVersion("0.1.0.0")] | |||||
| @@ -1,6 +0,0 @@ | |||||
| <?xml version="1.0" encoding="utf-8"?> | |||||
| <packages> | |||||
| <package id="Baseclass.Contrib.Nuget.Output" version="1.0.0" targetFramework="net45" /> | |||||
| <package id="libsodium-net" version="0.8.0" targetFramework="net45" /> | |||||
| <package id="Newtonsoft.Json" version="7.0.1" targetFramework="net45" /> | |||||
| </packages> | |||||
| @@ -1,20 +0,0 @@ | |||||
| <?xml version="1.0" encoding="utf-8"?> | |||||
| <Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | |||||
| <PropertyGroup> | |||||
| <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">14.0</VisualStudioVersion> | |||||
| <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath> | |||||
| </PropertyGroup> | |||||
| <Import Project="$(VSToolsPath)\DNX\Microsoft.DNX.Props" Condition="'$(VSToolsPath)' != ''" /> | |||||
| <PropertyGroup Label="Globals"> | |||||
| <ProjectGuid>42ab6a2d-2f2c-4003-80ef-33b5b5b0ed8e</ProjectGuid> | |||||
| <RootNamespace>Opus.Net</RootNamespace> | |||||
| <BaseIntermediateOutputPath Condition="'$(BaseIntermediateOutputPath)'=='' ">..\artifacts\obj\$(MSBuildProjectName)</BaseIntermediateOutputPath> | |||||
| <OutputPath Condition="'$(OutputPath)'=='' ">..\artifacts\bin\$(MSBuildProjectName)\</OutputPath> | |||||
| </PropertyGroup> | |||||
| <PropertyGroup> | |||||
| <SchemaVersion>2.0</SchemaVersion> | |||||
| </PropertyGroup> | |||||
| <Import Project="$(VSToolsPath)\DNX\Microsoft.DNX.targets" Condition="'$(VSToolsPath)' != ''" /> | |||||
| </Project> | |||||
| @@ -1,20 +0,0 @@ | |||||
| { | |||||
| "version": "0.1.0-*", | |||||
| "description": "Opus.Net", | |||||
| "authors": [ "John Carruthers" ], | |||||
| "tags": [ "opus" ], | |||||
| "projectUrl": "https://github.com/JohnACarruthers/Opus.NET", | |||||
| "licenseUrl": "https://github.com/JohnACarruthers/Opus.NET/blob/master/license.txt", | |||||
| "compilationOptions": { | |||||
| "allowUnsafe": true | |||||
| }, | |||||
| "dependencies": { | |||||
| }, | |||||
| "frameworks": { | |||||
| "dnx451": { }, | |||||
| "net45": { } | |||||
| } | |||||
| } | |||||