Woops, didn't push correctly. Also added owner only commands now.

This commit is contained in:
Kwoth 2016-09-30 04:20:09 +02:00
parent 94b5c411b9
commit 81753255b9
30 changed files with 359 additions and 2506 deletions

View File

@ -1,11 +1,12 @@
//using System.Threading.Tasks; using System.Threading.Tasks;
//using Discord.Commands; using Discord.Commands;
//using Discord; using Discord;
//namespace NadekoBot.Attributes { namespace NadekoBot.Attributes
// public class OwnerOnlyAttribute : PreconditionAttribute {
// { public class OwnerOnlyAttribute : PreconditionAttribute
// public override Task<PreconditionResult> CheckPermissions(IUserMessage context, Command executingCommand, object moduleInstance) => {
// Task.FromResult((NadekoBot.Credentials.IsOwner(context.Author) ? PreconditionResult.FromSuccess() : PreconditionResult.FromError("Not owner"))); public override Task<PreconditionResult> CheckPermissions(IUserMessage context, Command executingCommand, object moduleInstance) =>
// } Task.FromResult((NadekoBot.Credentials.IsOwner(context.Author) ? PreconditionResult.FromSuccess() : PreconditionResult.FromError("Not owner")));
//} }
}

View File

@ -13,6 +13,9 @@ using System.Text.RegularExpressions;
using Discord.WebSocket; using Discord.WebSocket;
using NadekoBot.Services.Database; using NadekoBot.Services.Database;
using NadekoBot.Services.Database.Models; using NadekoBot.Services.Database.Models;
using System.Net.Http;
using ImageProcessorCore;
using System.IO;
namespace NadekoBot.Modules.Administration namespace NadekoBot.Modules.Administration
{ {
@ -47,18 +50,20 @@ namespace NadekoBot.Modules.Administration
} }
} }
////todo owner only [LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
//[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias] [RequireContext(ContextType.Guild)]
//[RequireContext(ContextType.Guild)] [OwnerOnly]
//public async Task Restart(IUserMessage umsg) public async Task Restart(IUserMessage umsg)
//{ {
// var channel = (ITextChannel)umsg.Channel; var channel = (ITextChannel)umsg.Channel;
// await channel.SendMessageAsync("`Restarting in 2 seconds...`"); await channel.SendMessageAsync("`Restarting in 2 seconds...`");
// await Task.Delay(2000); await Task.Delay(2000);
// System.Diagnostics.Process.Start(System.Reflection.Assembly.GetEntryAssembly().Location); System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo {
// Environment.Exit(0); Arguments = "dotnet " + System.Reflection.Assembly.GetEntryAssembly().Location
//} });
Environment.Exit(0);
}
[LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias] [LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]
@ -205,7 +210,7 @@ namespace NadekoBot.Modules.Administration
var green = Convert.ToByte(rgb ? int.Parse(args[2]) : Convert.ToInt32(arg1.Substring(2, 2), 16)); var green = Convert.ToByte(rgb ? int.Parse(args[2]) : Convert.ToInt32(arg1.Substring(2, 2), 16));
var blue = Convert.ToByte(rgb ? int.Parse(args[3]) : Convert.ToInt32(arg1.Substring(4, 2), 16)); var blue = Convert.ToByte(rgb ? int.Parse(args[3]) : Convert.ToInt32(arg1.Substring(4, 2), 16));
await role.ModifyAsync(r => r.Color = new Color(red, green, blue).RawValue).ConfigureAwait(false); await role.ModifyAsync(r => r.Color = new Discord.Color(red, green, blue).RawValue).ConfigureAwait(false);
await channel.SendMessageAsync($"Role {role.Name}'s color has been changed.").ConfigureAwait(false); await channel.SendMessageAsync($"Role {role.Name}'s color has been changed.").ConfigureAwait(false);
} }
catch (Exception) catch (Exception)
@ -455,7 +460,7 @@ namespace NadekoBot.Modules.Administration
{ {
var channel = (ITextChannel)umsg.Channel; var channel = (ITextChannel)umsg.Channel;
var user = await channel.Guild.GetCurrentUserAsync(); var user = channel.Guild.GetCurrentUser();
var enumerable = (await umsg.Channel.GetMessagesAsync()).Where(x => x.Author.Id == user.Id); var enumerable = (await umsg.Channel.GetMessagesAsync()).Where(x => x.Author.Id == user.Id);
await umsg.Channel.DeleteMessagesAsync(enumerable); await umsg.Channel.DeleteMessagesAsync(enumerable);
@ -483,6 +488,7 @@ namespace NadekoBot.Modules.Administration
//prune @user [x] //prune @user [x]
[LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias] [LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]
[RequirePermission(ChannelPermission.ManageMessages)]
public async Task Prune(IUserMessage msg, IGuildUser user, int count = 100) public async Task Prune(IUserMessage msg, IGuildUser user, int count = 100)
{ {
var channel = (ITextChannel)msg.Channel; var channel = (ITextChannel)msg.Channel;
@ -490,149 +496,163 @@ namespace NadekoBot.Modules.Administration
var enumerable = (await msg.Channel.GetMessagesAsync(limit: limit)).Where(m => m.Author == user); var enumerable = (await msg.Channel.GetMessagesAsync(limit: limit)).Where(m => m.Author == user);
await msg.Channel.DeleteMessagesAsync(enumerable); await msg.Channel.DeleteMessagesAsync(enumerable);
} }
////todo owner only
//[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias]
//[RequireContext(ContextType.Guild)]
//public async Task Die(IUserMessage umsg)
//{
// var channel = (ITextChannel)umsg.Channel;
// await channel.SendMessageAsync("`Shutting down.`").ConfigureAwait(false); [LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
// await Task.Delay(2000).ConfigureAwait(false); [RequireContext(ContextType.Guild)]
// Environment.Exit(0); [OwnerOnly]
//} public async Task Die(IUserMessage umsg)
{
var channel = (ITextChannel)umsg.Channel;
////todo owner only await channel.SendMessageAsync("`Shutting down.`").ConfigureAwait(false);
//[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias] await Task.Delay(2000).ConfigureAwait(false);
//[RequireContext(ContextType.Guild)] Environment.Exit(0);
//public async Task Setname(IUserMessage umsg, [Remainder] string newName = null) }
//{
// var channel = (ITextChannel)umsg.Channel;
//} [LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
[RequireContext(ContextType.Guild)]
[OwnerOnly]
public async Task Setname(IUserMessage umsg, [Remainder] string newName)
{
var channel = (ITextChannel)umsg.Channel;
if (string.IsNullOrWhiteSpace(newName))
return;
////todo owner only await NadekoBot.Client.GetCurrentUser().ModifyAsync(u => u.Username = newName).ConfigureAwait(false);
//[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias]
//[RequireContext(ContextType.Guild)]
//public async Task NewAvatar(IUserMessage umsg, [Remainder] string img = null)
//{
// var channel = (ITextChannel)umsg.Channel;
// if (string.IsNullOrWhiteSpace(img)) await channel.SendMessageAsync($"Successfully changed name to {newName}").ConfigureAwait(false);
// return; }
// // Gather user provided URL.
// var avatarAddress = img;
// var imageStream = await SearchHelper.GetResponseStreamAsync(avatarAddress).ConfigureAwait(false);
// var image = System.Drawing.Image.FromStream(imageStream);
// await client.CurrentUser.Edit("", avatar: image.ToStream()).ConfigureAwait(false);
// // Send confirm. [LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
// await channel.SendMessageAsync("New avatar set.").ConfigureAwait(false); [RequireContext(ContextType.Guild)]
//} [OwnerOnly]
public async Task NewAvatar(IUserMessage umsg, [Remainder] string img = null)
{
var channel = (ITextChannel)umsg.Channel;
////todo owner only if (string.IsNullOrWhiteSpace(img))
//[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias] return;
//[RequireContext(ContextType.Guild)]
//public async Task SetGame(IUserMessage umsg, [Remainder] string game = null)
//{
// var channel = (ITextChannel)umsg.Channel;
// game = game ?? ""; using (var http = new HttpClient())
{
using (var sr = await http.GetStreamAsync(img))
{
var imgStream = new MemoryStream();
await sr.CopyToAsync(imgStream);
imgStream.Position = 0;
// client.SetGame(set_game); await NadekoBot.Client.GetCurrentUser().ModifyAsync(u => u.Avatar = imgStream).ConfigureAwait(false);
//} }
}
////todo owner only await channel.SendMessageAsync("New avatar set.").ConfigureAwait(false);
//[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias] }
//[RequireContext(ContextType.Guild)]
//public async Task Send(IUserMessage umsg, string where, [Remainder] string msg = null)
//{
// var channel = (ITextChannel)umsg.Channel;
// if (string.IsNullOrWhiteSpace(msg)) [LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
// return; [RequireContext(ContextType.Guild)]
[OwnerOnly]
public async Task SetGame(IUserMessage umsg, [Remainder] string game = null)
{
var channel = (ITextChannel)umsg.Channel;
// var ids = where.Split('|'); game = game ?? "";
// if (ids.Length != 2)
// return;
// var sid = ulong.Parse(ids[0]);
// var server = NadekoBot.Client.Servers.Where(s => s.Id == sid).FirstOrDefault();
// if (server == null) await NadekoBot.Client.GetCurrentUser().ModifyStatusAsync(u => u.Game = new Game(game)).ConfigureAwait(false);
// return;
// if (ids[1].ToUpperInvariant().StartsWith("C:")) await channel.SendMessageAsync("New game set.").ConfigureAwait(false);
// { }
// var cid = ulong.Parse(ids[1].Substring(2));
// var channel = server.TextChannels.Where(c => c.Id == cid).FirstOrDefault();
// if (channel == null)
// {
// return;
// }
// await channel.SendMessageAsync(msg);
// }
// else if (ids[1].ToUpperInvariant().StartsWith("U:"))
// {
// var uid = ulong.Parse(ids[1].Substring(2));
// var user = server.Users.Where(u => u.Id == uid).FirstOrDefault();
// if (user == null)
// {
// return;
// }
// await user.SendMessageAsync(msg);
// }
// else
// {
// await channel.SendMessageAsync("`Invalid format.`");
// }
//}
////todo owner only [LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
//[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias] [RequireContext(ContextType.Guild)]
//[RequireContext(ContextType.Guild)] [OwnerOnly]
//public async Task Announce(IUserMessage umsg, [Remainder] string message) public async Task Send(IUserMessage umsg, string where, [Remainder] string msg = null)
//{ {
// var channel = (ITextChannel)umsg.Channel; var channel = (ITextChannel)umsg.Channel;
// foreach (var ch in (await _client.GetGuildsAsync().ConfigureAwait(false)).Select(async g => await g.GetDefaultChannelAsync().ConfigureAwait(false))) if (string.IsNullOrWhiteSpace(msg))
// { return;
// await channel.SendMessageAsync(message).ConfigureAwait(false);
// }
// await channel.SendMessageAsync(":ok:").ConfigureAwait(false); var ids = where.Split('|');
//} if (ids.Length != 2)
return;
var sid = ulong.Parse(ids[0]);
var server = NadekoBot.Client.GetGuilds().Where(s => s.Id == sid).FirstOrDefault();
////todo owner only if (server == null)
//[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias] return;
//[RequireContext(ContextType.Guild)]
//public async Task SaveChat(IUserMessage umsg, int cnt)
//{
// var channel = (ITextChannel)umsg.Channel;
// ulong? lastmsgId = null; if (ids[1].ToUpperInvariant().StartsWith("C:"))
// var sb = new StringBuilder(); {
// var msgs = new List<IUserMessage>(cnt); var cid = ulong.Parse(ids[1].Substring(2));
// while (cnt > 0) var ch = server.GetTextChannels().Where(c => c.Id == cid).FirstOrDefault();
// { if (ch == null)
// var dlcnt = cnt < 100 ? cnt : 100; {
// IReadOnlyCollection<IUserMessage> dledMsgs; return;
// if (lastmsgId == null) }
// dledMsgs = await umsg.Channel.GetMessagesAsync(cnt).ConfigureAwait(false); await ch.SendMessageAsync(msg);
// else }
// dledMsgs = await umsg.Channel.GetMessagesAsync(lastmsgId.Value, Direction.Before, dlcnt); else if (ids[1].ToUpperInvariant().StartsWith("U:"))
{
var uid = ulong.Parse(ids[1].Substring(2));
var user = server.GetUsers().Where(u => u.Id == uid).FirstOrDefault();
if (user == null)
{
return;
}
await user.SendMessageAsync(msg);
}
else
{
await channel.SendMessageAsync("`Invalid format.`");
}
}
// if (!dledMsgs.Any()) [LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
// break; [RequireContext(ContextType.Guild)]
[OwnerOnly]
public async Task Announce(IUserMessage umsg, [Remainder] string message)
{
var channel = (ITextChannel)umsg.Channel;
// msgs.AddRange(dledMsgs); foreach (var ch in (await _client.GetGuildsAsync().ConfigureAwait(false)).Select(async g => await g.GetDefaultChannelAsync().ConfigureAwait(false)))
// lastmsgId = msgs[msgs.Count - 1].Id; {
// cnt -= 100; await channel.SendMessageAsync(message).ConfigureAwait(false);
// } }
// var title = $"Chatlog-{channel.Guild.Name}/#{channel.Name}-{DateTime.Now}.txt";
// await (umsg.Author as IGuildUser).SendFileAsync( await channel.SendMessageAsync(":ok:").ConfigureAwait(false);
// await JsonConvert.SerializeObject(new { Messages = msgs.Select(s => s.ToString()) }, Formatting.Indented).ToStream().ConfigureAwait(false), }
// title, title).ConfigureAwait(false);
//} [LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
[RequireContext(ContextType.Guild)]
[OwnerOnly]
public async Task SaveChat(IUserMessage umsg, int cnt)
{
var channel = (ITextChannel)umsg.Channel;
ulong? lastmsgId = null;
var sb = new StringBuilder();
var msgs = new List<IMessage>(cnt);
while (cnt > 0)
{
var dlcnt = cnt < 100 ? cnt : 100;
IReadOnlyCollection<IMessage> dledMsgs;
if (lastmsgId == null)
dledMsgs = await umsg.Channel.GetMessagesAsync(cnt).ConfigureAwait(false);
else
dledMsgs = await umsg.Channel.GetMessagesAsync(lastmsgId.Value, Direction.Before, dlcnt);
if (!dledMsgs.Any())
break;
msgs.AddRange(dledMsgs);
lastmsgId = msgs[msgs.Count - 1].Id;
cnt -= 100;
}
var title = $"Chatlog-{channel.Guild.Name}/#{channel.Name}-{DateTime.Now}.txt";
await (umsg.Author as IGuildUser).SendFileAsync(
await JsonConvert.SerializeObject(new { Messages = msgs.Select(s => s.ToString()) }, Formatting.Indented).ToStream().ConfigureAwait(false),
title, title).ConfigureAwait(false);
}
[LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias] [LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
@ -691,5 +711,17 @@ namespace NadekoBot.Modules.Administration
await channel.SendMessageAsync($"Successfuly added a new donator. Total donated amount from this user: {don.Amount} 👑").ConfigureAwait(false); await channel.SendMessageAsync($"Successfuly added a new donator. Total donated amount from this user: {don.Amount} 👑").ConfigureAwait(false);
} }
[LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
[RequireContext(ContextType.Guild)]
[OwnerOnly]
public async Task Leave(IUserMessage imsg, [Remainder] IGuild guild)
{
var channel = (ITextChannel)imsg.Channel;
await guild.LeaveAsync();
await channel.SendMessageAsync($"Left guild **{guild.Name}**\nId: `{guild.Id}`.");
}
} }
} }

View File

@ -3,6 +3,7 @@ using Discord.Commands;
using Discord.WebSocket; using Discord.WebSocket;
using NadekoBot.Attributes; using NadekoBot.Attributes;
using NadekoBot.Extensions; using NadekoBot.Extensions;
using NadekoBot.Services;
using System; using System;
using System.Collections.Concurrent; using System.Collections.Concurrent;
using System.Collections.Generic; using System.Collections.Generic;
@ -55,20 +56,20 @@ namespace NadekoBot.Modules.Administration
public static readonly ConcurrentDictionary<int, HashSet<ITextChannel>> Subscribers = new ConcurrentDictionary<int, HashSet<ITextChannel>>(); public static readonly ConcurrentDictionary<int, HashSet<ITextChannel>> Subscribers = new ConcurrentDictionary<int, HashSet<ITextChannel>>();
////todo owner only [LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
//[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias] [RequireContext(ContextType.Guild)]
//[RequireContext(ContextType.Guild)] [OwnerOnly]
//public async Task Scsc(IUserMessage msg) public async Task Scsc(IUserMessage msg)
//{ {
// var channel = (ITextChannel)msg.Channel; var channel = (ITextChannel)msg.Channel;
// var token = new NadekoRandom().Next(); var token = new NadekoRandom().Next();
// var set = new HashSet<ITextChannel>(); var set = new HashSet<ITextChannel>();
// if (Subscribers.TryAdd(token, set)) if (Subscribers.TryAdd(token, set))
// { {
// set.Add(channel); set.Add(channel);
// await ((IGuildUser)msg.Author).SendMessageAsync("This is your CSC token:" + token.ToString()).ConfigureAwait(false); await ((IGuildUser)msg.Author).SendMessageAsync("This is your CSC token:" + token.ToString()).ConfigureAwait(false);
// } }
//} }
[LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias] [LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]

View File

@ -484,6 +484,7 @@ namespace NadekoBot.Modules.Administration
[LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias] [LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]
[OwnerOnly]
public async Task LogServer(IUserMessage msg) public async Task LogServer(IUserMessage msg)
{ {
var channel = (ITextChannel)msg.Channel; var channel = (ITextChannel)msg.Channel;
@ -506,6 +507,7 @@ namespace NadekoBot.Modules.Administration
[LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias] [LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]
[OwnerOnly]
public async Task LogIgnore(IUserMessage imsg) public async Task LogIgnore(IUserMessage imsg)
{ {
var channel = (ITextChannel)imsg.Channel; var channel = (ITextChannel)imsg.Channel;
@ -529,6 +531,7 @@ namespace NadekoBot.Modules.Administration
[LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias] [LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]
[OwnerOnly]
public async Task LogAdd(IUserMessage msg, [Remainder] string eventName) public async Task LogAdd(IUserMessage msg, [Remainder] string eventName)
{ {
var channel = (ITextChannel)msg.Channel; var channel = (ITextChannel)msg.Channel;

View File

@ -88,6 +88,7 @@ namespace NadekoBot.Modules.Administration
[LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias] [LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]
[OwnerOnly]
public async Task RotatePlaying(IUserMessage umsg) public async Task RotatePlaying(IUserMessage umsg)
{ {
var channel = (ITextChannel)umsg.Channel; var channel = (ITextChannel)umsg.Channel;
@ -108,6 +109,7 @@ namespace NadekoBot.Modules.Administration
[LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias] [LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]
[OwnerOnly]
public async Task AddPlaying(IUserMessage umsg, [Remainder] string status) public async Task AddPlaying(IUserMessage umsg, [Remainder] string status)
{ {
var channel = (ITextChannel)umsg.Channel; var channel = (ITextChannel)umsg.Channel;
@ -124,6 +126,7 @@ namespace NadekoBot.Modules.Administration
[LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias] [LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]
[OwnerOnly]
public async Task ListPlaying(IUserMessage umsg) public async Task ListPlaying(IUserMessage umsg)
{ {
var channel = (ITextChannel)umsg.Channel; var channel = (ITextChannel)umsg.Channel;
@ -146,6 +149,7 @@ namespace NadekoBot.Modules.Administration
[LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias] [LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]
[OwnerOnly]
public async Task RemovePlaying(IUserMessage umsg, int index) public async Task RemovePlaying(IUserMessage umsg, int index)
{ {
var channel = (ITextChannel)umsg.Channel; var channel = (ITextChannel)umsg.Channel;

View File

@ -82,14 +82,15 @@ namespace NadekoBot.Modules.Gambling
await channel.SendMessageAsync($"{umsg.Author.Mention} successfully sent {amount} {Gambling.CurrencyPluralName}s to {receiver.Mention}!").ConfigureAwait(false); await channel.SendMessageAsync($"{umsg.Author.Mention} successfully sent {amount} {Gambling.CurrencyPluralName}s to {receiver.Mention}!").ConfigureAwait(false);
} }
//todo owner only
[LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias] [LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]
[OwnerOnly]
public Task Award(IUserMessage umsg, long amount, [Remainder] IGuildUser usr) => public Task Award(IUserMessage umsg, long amount, [Remainder] IGuildUser usr) =>
Award(umsg, amount, usr.Id); Award(umsg, amount, usr.Id);
[LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias] [LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]
[OwnerOnly]
public async Task Award(IUserMessage umsg, long amount, [Remainder] ulong usrId) public async Task Award(IUserMessage umsg, long amount, [Remainder] ulong usrId)
{ {
var channel = (ITextChannel)umsg.Channel; var channel = (ITextChannel)umsg.Channel;
@ -102,25 +103,34 @@ namespace NadekoBot.Modules.Gambling
await channel.SendMessageAsync($"{umsg.Author.Mention} successfully awarded {amount} {Gambling.CurrencyName}s to <@{usrId}>!").ConfigureAwait(false); await channel.SendMessageAsync($"{umsg.Author.Mention} successfully awarded {amount} {Gambling.CurrencyName}s to <@{usrId}>!").ConfigureAwait(false);
} }
////todo owner only [LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
//[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias] [RequireContext(ContextType.Guild)]
//[RequireContext(ContextType.Guild)] [OwnerOnly]
//public Task Take(IUserMessage umsg, long amount, [Remainder] IGuildUser user) => public async Task Take(IUserMessage umsg, long amount, [Remainder] IGuildUser user)
// Take(umsg, amount, user.Id); {
var channel = (ITextChannel)umsg.Channel;
if (amount <= 0)
return;
//todo owner only await CurrencyHandler.RemoveCurrencyAsync(user, $"Taken by bot owner.({umsg.Author.Username}/{umsg.Author.Id})", amount, true).ConfigureAwait(false);
//[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias]
//[RequireContext(ContextType.Guild)]
//public async Task Take(IUserMessage umsg, long amount, [Remainder] ulong usrId)
//{
// var channel = (ITextChannel)umsg.Channel;
// if (amount <= 0)
// return;
// await CurrencyHandler.RemoveFlowers(usrId, $"Taken by bot owner.({umsg.Author.Username}/{umsg.Author.Id})", (int)amount).ConfigureAwait(false); await channel.SendMessageAsync($"{umsg.Author.Mention} successfully took {amount} {Gambling.CurrencyName}s from {user}!").ConfigureAwait(false);
}
// await channel.SendMessageAsync($"{umsg.Author.Mention} successfully took {amount} {Gambling.CurrencyName}s from <@{usrId}>!").ConfigureAwait(false);
//} [LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
[RequireContext(ContextType.Guild)]
[OwnerOnly]
public async Task Take(IUserMessage umsg, long amount, [Remainder] ulong usrId)
{
var channel = (ITextChannel)umsg.Channel;
if (amount <= 0)
return;
await CurrencyHandler.RemoveCurrencyAsync(usrId, $"Taken by bot owner.({umsg.Author.Username}/{umsg.Author.Id})", amount).ConfigureAwait(false);
await channel.SendMessageAsync($"{umsg.Author.Mention} successfully took {amount} {Gambling.CurrencyName}s from <@{usrId}>!").ConfigureAwait(false);
}
[LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias] [LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]

View File

@ -174,24 +174,25 @@ namespace NadekoBot.Modules.Games
await channel.SendMessageAsync("No contest to stop on this channel.").ConfigureAwait(false); await channel.SendMessageAsync("No contest to stop on this channel.").ConfigureAwait(false);
} }
////todo owner only
//[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias]
//[RequireContext(ContextType.Guild)]
//public async Task Typeadd(IUserMessage imsg, [Remainder] string text)
//{
// var channel = (ITextChannel)imsg.Channel;
// using (var uow = DbHandler.UnitOfWork()) [LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
// { [RequireContext(ContextType.Guild)]
// uow.TypingArticles.Add(new Services.Database.Models.TypingArticle [OwnerOnly]
// { public async Task Typeadd(IUserMessage imsg, [Remainder] string text)
// Author = imsg.Author.Username, {
// Text = text var channel = (ITextChannel)imsg.Channel;
// });
// }
// await channel.SendMessageAsync("Added new article for typing game.").ConfigureAwait(false); using (var uow = DbHandler.UnitOfWork())
//} {
uow.TypingArticles.Add(new Services.Database.Models.TypingArticle
{
Author = imsg.Author.Username,
Text = text
});
}
await channel.SendMessageAsync("Added new article for typing game.").ConfigureAwait(false);
}
} }
} }
} }

View File

@ -98,6 +98,7 @@ namespace NadekoBot.Modules.Help
[LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias] [LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]
[OwnerOnly]
public async Task Hgit(IUserMessage umsg) public async Task Hgit(IUserMessage umsg)
{ {
var helpstr = new StringBuilder(); var helpstr = new StringBuilder();

View File

@ -334,6 +334,7 @@ namespace NadekoBot.Modules.Music
[LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias] [LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]
[OwnerOnly]
public async Task LocalPl(IUserMessage umsg, [Remainder] string directory) public async Task LocalPl(IUserMessage umsg, [Remainder] string directory)
{ {
var channel = (ITextChannel)umsg.Channel; var channel = (ITextChannel)umsg.Channel;
@ -381,6 +382,7 @@ namespace NadekoBot.Modules.Music
[LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias] [LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]
[OwnerOnly]
public async Task Local(IUserMessage umsg, [Remainder] string path) public async Task Local(IUserMessage umsg, [Remainder] string path)
{ {
var channel = (ITextChannel)umsg.Channel; var channel = (ITextChannel)umsg.Channel;

View File

@ -37,6 +37,28 @@ namespace NadekoBot.Modules.Permissions
await channel.SendMessageAsync("I will " + (action.Value ? "now" : "no longer") + " show permission warnings.").ConfigureAwait(false); await channel.SendMessageAsync("I will " + (action.Value ? "now" : "no longer") + " show permission warnings.").ConfigureAwait(false);
} }
[LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
[RequireContext(ContextType.Guild)]
public async Task PermRole(IUserMessage msg, [Remainder] IRole role = null)
{
var channel = (ITextChannel)msg.Channel;
using (var uow = DbHandler.UnitOfWork())
{
var config = uow.GuildConfigs.For(channel.Guild.Id);
if (role == null)
{
await channel.SendMessageAsync($"Current permission role is **{config.PermissionRole}**.").ConfigureAwait(false);
return;
}
else {
config.PermissionRole = role.Name.Trim();
await uow.CompleteAsync().ConfigureAwait(false);
}
}
await channel.SendMessageAsync($"Users now require **{role.Name}** role in order to edit permissions.").ConfigureAwait(false);
}
[LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias] [LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]
public async Task ListPerms(IUserMessage msg) public async Task ListPerms(IUserMessage msg)
@ -186,7 +208,7 @@ namespace NadekoBot.Modules.Permissions
[LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias] [LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]
public async Task UsrCmd(IUserMessage imsg, Command command, PermissionAction action, IGuildUser user) public async Task UsrCmd(IUserMessage imsg, Command command, PermissionAction action, [Remainder] IGuildUser user)
{ {
var channel = (ITextChannel)imsg.Channel; var channel = (ITextChannel)imsg.Channel;
@ -209,7 +231,7 @@ namespace NadekoBot.Modules.Permissions
[LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias] [LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]
public async Task UsrMdl(IUserMessage imsg, Module module, PermissionAction action, IGuildUser user) public async Task UsrMdl(IUserMessage imsg, Module module, PermissionAction action, [Remainder] IGuildUser user)
{ {
var channel = (ITextChannel)imsg.Channel; var channel = (ITextChannel)imsg.Channel;
@ -232,7 +254,7 @@ namespace NadekoBot.Modules.Permissions
[LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias] [LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]
public async Task RoleCmd(IUserMessage imsg, Command command, PermissionAction action, IRole role) public async Task RoleCmd(IUserMessage imsg, Command command, PermissionAction action, [Remainder] IRole role)
{ {
var channel = (ITextChannel)imsg.Channel; var channel = (ITextChannel)imsg.Channel;
@ -255,7 +277,7 @@ namespace NadekoBot.Modules.Permissions
[LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias] [LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]
public async Task RoleMdl(IUserMessage imsg, Module module, PermissionAction action, IRole role) public async Task RoleMdl(IUserMessage imsg, Module module, PermissionAction action, [Remainder] IRole role)
{ {
var channel = (ITextChannel)imsg.Channel; var channel = (ITextChannel)imsg.Channel;
@ -278,7 +300,7 @@ namespace NadekoBot.Modules.Permissions
[LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias] [LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]
public async Task ChnlCmd(IUserMessage imsg, Command command, PermissionAction action, ITextChannel chnl) public async Task ChnlCmd(IUserMessage imsg, Command command, PermissionAction action, [Remainder] ITextChannel chnl)
{ {
var channel = (ITextChannel)imsg.Channel; var channel = (ITextChannel)imsg.Channel;
try try
@ -306,7 +328,7 @@ namespace NadekoBot.Modules.Permissions
[LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias] [LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]
public async Task ChnlMdl(IUserMessage imsg, Module module, PermissionAction action, ITextChannel chnl) public async Task ChnlMdl(IUserMessage imsg, Module module, PermissionAction action, [Remainder] ITextChannel chnl)
{ {
var channel = (ITextChannel)imsg.Channel; var channel = (ITextChannel)imsg.Channel;
@ -329,7 +351,7 @@ namespace NadekoBot.Modules.Permissions
[LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias] [LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]
public async Task AllChnlMdls(IUserMessage imsg, PermissionAction action, ITextChannel chnl) public async Task AllChnlMdls(IUserMessage imsg, PermissionAction action, [Remainder] ITextChannel chnl)
{ {
var channel = (ITextChannel)imsg.Channel; var channel = (ITextChannel)imsg.Channel;
@ -352,7 +374,7 @@ namespace NadekoBot.Modules.Permissions
[LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias] [LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]
public async Task AllRoleMdls(IUserMessage imsg, PermissionAction action, IRole role) public async Task AllRoleMdls(IUserMessage imsg, PermissionAction action, [Remainder] IRole role)
{ {
var channel = (ITextChannel)imsg.Channel; var channel = (ITextChannel)imsg.Channel;
@ -375,7 +397,7 @@ namespace NadekoBot.Modules.Permissions
[LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias] [LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]
public async Task AllUsrMdls(IUserMessage imsg, PermissionAction action, IUser user) public async Task AllUsrMdls(IUserMessage imsg, PermissionAction action, [Remainder] IUser user)
{ {
var channel = (ITextChannel)imsg.Channel; var channel = (ITextChannel)imsg.Channel;
@ -398,7 +420,7 @@ namespace NadekoBot.Modules.Permissions
[LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias] [LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]
public async Task AllSrvrMdls(IUserMessage imsg, PermissionAction action, IUser user) public async Task AllSrvrMdls(IUserMessage imsg, PermissionAction action, [Remainder] IUser user)
{ {
var channel = (ITextChannel)imsg.Channel; var channel = (ITextChannel)imsg.Channel;

View File

@ -184,21 +184,23 @@ namespace NadekoBot.Modules.Utility
await StartReminder(rem); await StartReminder(rem);
} }
////todo owner only [LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
//[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias] [RequireContext(ContextType.Guild)]
//[RequireContext(ContextType.Guild)] [OwnerOnly]
//public async Task RemindTemplate(IUserMessage umsg, [Remainder] string arg) public async Task RemindTemplate(IUserMessage umsg, [Remainder] string arg)
//{ {
// var channel = (ITextChannel)umsg.Channel; var channel = (ITextChannel)umsg.Channel;
if (string.IsNullOrWhiteSpace(arg))
return;
// arg = arg?.Trim(); using (var uow = DbHandler.UnitOfWork())
// if (string.IsNullOrWhiteSpace(arg)) {
// return; uow.BotConfig.GetOrCreate().RemindMessageFormat = arg.Trim();
await uow.CompleteAsync().ConfigureAwait(false);
// NadekoBot.Config.RemindMessageFormat = arg; }
// await channel.SendMessageAsync("`New remind message set.`"); await channel.SendMessageAsync("`New remind message set.`");
//} }
} }
} }
} }

View File

@ -70,6 +70,7 @@ namespace NadekoBot
CommandService.AddTypeReader<PermissionAction>(new PermissionActionTypeReader()); CommandService.AddTypeReader<PermissionAction>(new PermissionActionTypeReader());
CommandService.AddTypeReader<Command>(new CommandTypeReader()); CommandService.AddTypeReader<Command>(new CommandTypeReader());
CommandService.AddTypeReader<Module>(new ModuleTypeReader()); CommandService.AddTypeReader<Module>(new ModuleTypeReader());
CommandService.AddTypeReader<IGuild>(new GuildTypeReader());
//connect //connect
await Client.LoginAsync(TokenType.Bot, Credentials.Token).ConfigureAwait(false); await Client.LoginAsync(TokenType.Bot, Credentials.Token).ConfigureAwait(false);

View File

@ -48,7 +48,18 @@ namespace NadekoBot.Services
try try
{ {
var t = await ExecuteCommand(usrMsg, usrMsg.Content, guild, usrMsg.Author, MultiMatchHandling.Best); bool verbose;
Permission rootPerm;
string permRole;
using (var uow = DbHandler.UnitOfWork())
{
var config = uow.GuildConfigs.PermissionsFor(guild.Id);
verbose = config.VerbosePermissions;
rootPerm = config.RootPermission;
permRole = config.PermissionRole.Trim().ToLowerInvariant();
}
var t = await ExecuteCommand(usrMsg, usrMsg.Content, guild, usrMsg.Author, rootPerm, permRole, MultiMatchHandling.Best);
var command = t.Item1; var command = t.Item1;
var result = t.Item2; var result = t.Item2;
sw.Stop(); sw.Stop();
@ -85,11 +96,6 @@ namespace NadekoBot.Services
); );
if (guild != null && command != null && result.Error == CommandError.Exception) if (guild != null && command != null && result.Error == CommandError.Exception)
{ {
bool verbose;
using (var uow = DbHandler.UnitOfWork())
{
verbose = uow.GuildConfigs.For(guild.Id).VerbosePermissions;
}
if (verbose) if (verbose)
await msg.Channel.SendMessageAsync(":warning: " + result.ErrorReason).ConfigureAwait(false); await msg.Channel.SendMessageAsync(":warning: " + result.ErrorReason).ConfigureAwait(false);
} }
@ -112,7 +118,7 @@ namespace NadekoBot.Services
return Task.CompletedTask; return Task.CompletedTask;
} }
public async Task<Tuple<Command,IResult>> ExecuteCommand(IUserMessage message, string input, IGuild guild, IUser user, MultiMatchHandling multiMatchHandling = MultiMatchHandling.Best) { public async Task<Tuple<Command,IResult>> ExecuteCommand(IUserMessage message, string input, IGuild guild, IUser user, Permission rootPerm, string permRole, MultiMatchHandling multiMatchHandling = MultiMatchHandling.Best) {
var searchResult = _commandService.Search(message, input); var searchResult = _commandService.Search(message, input);
if (!searchResult.IsSuccess) if (!searchResult.IsSuccess)
return new Tuple<Command, IResult>(null, searchResult); return new Tuple<Command, IResult>(null, searchResult);
@ -154,20 +160,24 @@ namespace NadekoBot.Services
} }
} }
var cmd = commands[i]; var cmd = commands[i];
Permission rootPerm;
//check permissions //check permissions
if (guild != null) if (guild != null)
{ {
using (var uow = DbHandler.UnitOfWork())
{
rootPerm = uow.GuildConfigs.PermissionsFor(guild.Id).RootPermission;
}
int index; int index;
if (!rootPerm.AsEnumerable().CheckPermissions(message, cmd, out index)) if (!rootPerm.AsEnumerable().CheckPermissions(message, cmd, out index))
{ {
var returnMsg = $"Permission number #{index} **{rootPerm.GetAt(index).GetCommand()}** is preventing this action."; var returnMsg = $"Permission number #{index} **{rootPerm.GetAt(index).GetCommand()}** is preventing this action.";
return new Tuple<Command, IResult>(cmd, SearchResult.FromError(CommandError.Exception, returnMsg)); return new Tuple<Command, IResult>(cmd, SearchResult.FromError(CommandError.Exception, returnMsg));
} }
if (cmd.Module.Source.Name == typeof(Permissions).Name) //permissions, you must have special role
{
if (!((IGuildUser)user).Roles.Any(r => r.Name.Trim().ToLowerInvariant() == permRole))
{
return new Tuple<Command, IResult>(cmd, SearchResult.FromError(CommandError.Exception, $"You need a **{permRole}** role in order to use permission commands."));
}
}
} }
return new Tuple<Command, IResult>(commands[i], await commands[i].Execute(message, parseResult)); return new Tuple<Command, IResult>(commands[i], await commands[i].Execute(message, parseResult));

View File

@ -13,6 +13,16 @@ namespace NadekoBot.Services
public static class CurrencyHandler public static class CurrencyHandler
{ {
public static async Task<bool> RemoveCurrencyAsync(IGuildUser author, string reason, long amount, bool sendMessage) public static async Task<bool> RemoveCurrencyAsync(IGuildUser author, string reason, long amount, bool sendMessage)
{
var success = await RemoveCurrencyAsync(author.Id, reason, amount);
if (success && sendMessage)
try { await author.SendMessageAsync($"`You lost:` {amount} {Gambling.CurrencySign}\n`Reason:` {reason}").ConfigureAwait(false); } catch { }
return success;
}
public static async Task<bool> RemoveCurrencyAsync(ulong authorId, string reason, long amount)
{ {
if (amount < 0) if (amount < 0)
throw new ArgumentNullException(nameof(amount)); throw new ArgumentNullException(nameof(amount));
@ -20,15 +30,12 @@ namespace NadekoBot.Services
using (var uow = DbHandler.UnitOfWork()) using (var uow = DbHandler.UnitOfWork())
{ {
var success = uow.Currency.TryUpdateState(author.Id, -amount); var success = uow.Currency.TryUpdateState(authorId, -amount);
if (!success) if (!success)
return false; return false;
await uow.CompleteAsync(); await uow.CompleteAsync();
} }
if (sendMessage)
try { await author.SendMessageAsync($"`You lost:` {amount} {Gambling.CurrencySign}\n`Reason:` {reason}").ConfigureAwait(false); } catch { }
return true; return true;
} }

View File

@ -0,0 +1,26 @@
using Discord.Commands;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Discord;
using Discord.WebSocket;
namespace NadekoBot.TypeReaders
{
public class GuildTypeReader : TypeReader
{
public override Task<TypeReaderResult> Read(IUserMessage context, string input)
{
input = input.Trim().ToLowerInvariant();
var guild = NadekoBot.Client.GetGuilds().FirstOrDefault(g => g.Id.ToString().Trim().ToLowerInvariant() == input) ?? //by id
NadekoBot.Client.GetGuilds().FirstOrDefault(g => g.Name.Trim().ToLowerInvariant() == input);//by name
if (guild != null)
return Task.FromResult(TypeReaderResult.FromSuccess(guild));
return Task.FromResult(TypeReaderResult.FromError(CommandError.ParseFailed, "No guild by that name or Id found"));
}
}
}

View File

@ -38,7 +38,7 @@ namespace Tests
{ {
var root = GetRoot(); var root = GetRoot();
root.Add(new Permission() { SecondaryTargetName = "Added" }); root.Prepend(new Permission() { SecondaryTargetName = "Added" });
Assert.Equal(11, root.Count()); Assert.Equal(11, root.Count());

View File

@ -1,26 +0,0 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>Discord.Net.Commands</name>
</assembly>
<members>
<member name="T:Discord.Commands.AliasAttribute">
<summary> Provides aliases for a command. </summary>
</member>
<member name="P:Discord.Commands.AliasAttribute.Aliases">
<summary> The aliases which have been defined for the command. </summary>
</member>
<member name="M:Discord.Commands.AliasAttribute.#ctor(System.String[])">
<summary> Creates a new <see cref="T:Discord.Commands.AliasAttribute"/> with the given aliases. </summary>
</member>
<member name="T:Discord.Commands.PriorityAttribute">
<summary> Sets priority of commands </summary>
</member>
<member name="P:Discord.Commands.PriorityAttribute.Priority">
<summary> The priority which has been set for the command </summary>
</member>
<member name="M:Discord.Commands.PriorityAttribute.#ctor(System.Int32)">
<summary> Creates a new <see cref="T:Discord.Commands.PriorityAttribute"/> with the given priority. </summary>
</member>
</members>
</doc>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +0,0 @@
{
"runtimeOptions": {
"additionalProbingPaths": [
"C:\\Users\\Kwoth\\.nuget\\packages"
]
}
}

View File

@ -1,8 +0,0 @@
{
"runtimeOptions": {
"framework": {
"name": "Microsoft.NETCore.App",
"version": "1.0.0"
}
}
}

View File

@ -3614,7 +3614,8 @@
"framework": ".NETCoreApp,Version=v1.0", "framework": ".NETCoreApp,Version=v1.0",
"dependencies": { "dependencies": {
"CoreCLR-NCalc": "2.1.0", "CoreCLR-NCalc": "2.1.0",
"Discord.Net.Commands": "1.0.0-dev", "Discord.Net": "1.0.0-beta",
"Discord.Net.Commands": "1.0.0-beta",
"Google.Apis.Customsearch.v1": "1.16.0.466", "Google.Apis.Customsearch.v1": "1.16.0.466",
"Google.Apis.Urlshortener.v1": "1.15.0.138", "Google.Apis.Urlshortener.v1": "1.15.0.138",
"Google.Apis.YouTube.v3": "1.15.0.582", "Google.Apis.YouTube.v3": "1.15.0.582",