More work

This commit is contained in:
Kwoth 2016-08-20 13:05:57 +02:00
parent ac7147f5c1
commit e8ffcbf7f6
8 changed files with 89 additions and 104 deletions

@ -1 +1 @@
Subproject commit f531c634996960c64ddfe602a7b6eef63677d30c Subproject commit 06184c1a655232beedd608a8b0190ca2c70b9b23

View File

@ -1,5 +1,5 @@
{ {
"projects": [ "src", "Discord.Net", "discord.net/src" ], "projects": [ "discord.net/src/Discord.Net", "discord.net/src/Discord.Net.Commands", "src" ],
"sdk": { "sdk": {
"version": "1.0.0-preview2-003121" "version": "1.0.0-preview2-003121"
} }

View File

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

View File

@ -423,30 +423,26 @@ namespace NadekoBot.Modules.Administration
} }
//todo maybe split into 3/4 different commands with the same name //delets her own messages, no perm required
[LocalizedCommand, LocalizedDescription, LocalizedSummary] [LocalizedCommand, LocalizedDescription, LocalizedSummary]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]
public async Task Prune(IMessage msg, [Remainder] string target = null) public async Task Prune(IMessage imsg)
{ {
var channel = msg.Channel as ITextChannel; var channel = imsg.Channel as ITextChannel;
var user = await channel.Guild.GetCurrentUserAsync(); var user = await channel.Guild.GetCurrentUserAsync();
if (string.IsNullOrWhiteSpace(target))
{
var enumerable = (await msg.Channel.GetMessagesAsync()).Where(x => x.Author.Id == user.Id); var enumerable = (await imsg.Channel.GetMessagesAsync()).Where(x => x.Author.Id == user.Id);
await msg.Channel.DeleteMessagesAsync(enumerable); await imsg.Channel.DeleteMessagesAsync(enumerable);
return;
} }
target = target.Trim();
if (!user.GetPermissions(channel).ManageMessages) // prune x
{ [LocalizedCommand, LocalizedDescription, LocalizedSummary]
await msg.Reply("Don't have permissions to manage messages in channel"); [RequireContext(ContextType.Guild)]
return; [RequirePermission(ChannelPermission.ManageMessages)]
} public async Task Prune(IMessage msg, int count)
int count;
if (int.TryParse(target, out count))
{ {
var channel = msg.Channel as ITextChannel;
while (count > 0) while (count > 0)
{ {
int limit = (count < 100) ? count : 100; int limit = (count < 100) ? count : 100;
@ -457,39 +453,17 @@ namespace NadekoBot.Modules.Administration
count -= limit; count -= limit;
} }
} }
else if (msg.MentionedUsers.Count > 0)
{
var toDel = new List<IMessage>();
var match = Regex.Match(target, @"\s(\d+)\s"); //prune @user [x]
if (match.Success) [LocalizedCommand, LocalizedDescription, LocalizedSummary]
[RequireContext(ContextType.Guild)]
public async Task Prune(IMessage msg, IGuildUser user, int count = 100)
{ {
int.TryParse(match.Groups[1].Value, out count); var channel = msg.Channel as ITextChannel;
var messages = new List<IMessage>(count); int limit = (count < 100) ? count : 100;
var enumerable = (await msg.Channel.GetMessagesAsync(limit: limit));
while (count > 0) await msg.Channel.DeleteMessagesAsync(enumerable);
{
var toAdd = await msg.Channel.GetMessagesAsync(limit: count < 100 ? count : 100);
messages.AddRange(toAdd);
count -= toAdd.Count;
} }
foreach (var mention in msg.MentionedUsers)
{
toDel.AddRange(messages.Where(m => m.Author.Id == mention.Id));
}
var messagesEnum = messages.AsEnumerable();
while (messagesEnum.Count() > 0)
{
await msg.Channel.DeleteMessagesAsync(messagesEnum.Take(100));
await Task.Delay(1000); // 1 second ratelimit
messagesEnum = messagesEnum.Skip(100);
}
}
}
}
////todo owner only ////todo owner only
//[LocalizedCommand, LocalizedDescription, LocalizedSummary] //[LocalizedCommand, LocalizedDescription, LocalizedSummary]
//[RequireContext(ContextType.Guild)] //[RequireContext(ContextType.Guild)]

View File

@ -35,7 +35,8 @@ namespace NadekoBot.Modules.Utility
`TextChannels:` **{(await server.GetTextChannelsAsync()).Count()}** `VoiceChannels:` **{(await server.GetVoiceChannelsAsync()).Count()}** `TextChannels:` **{(await server.GetTextChannelsAsync()).Count()}** `VoiceChannels:` **{(await server.GetVoiceChannelsAsync()).Count()}**
`Members:` **{users.Count}** `Online:` **{users.Count(u => u.Status == UserStatus.Online)}** `Members:` **{users.Count}** `Online:` **{users.Count(u => u.Status == UserStatus.Online)}**
`Roles:` **{server.Roles.Count()}** `Roles:` **{server.Roles.Count()}**
`Created At:` **{createdAt}**"); `Created At:` **{createdAt}**
");
if (server.Emojis.Count() > 0) if (server.Emojis.Count() > 0)
sb.AppendLine($"`Custom Emojis:` **{string.Join(", ", server.Emojis)}**"); sb.AppendLine($"`Custom Emojis:` **{string.Join(", ", server.Emojis)}**");
if (server.Features.Count() > 0) if (server.Features.Count() > 0)
@ -53,13 +54,12 @@ namespace NadekoBot.Modules.Utility
if (ch == null) if (ch == null)
return; return;
var createdAt = new DateTime(2015, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).AddMilliseconds(ch.Id >> 22); var createdAt = new DateTime(2015, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).AddMilliseconds(ch.Id >> 22);
var sb = new StringBuilder(); var toReturn = $@"`Name:` **#{ch.Name}**
sb.AppendLine($"`Name:` **#{ch.Name}**"); `Id:` **{ch.Id}**
sb.AppendLine($"`Id:` **{ch.Id}**"); `Created At:` **{createdAt}**
sb.AppendLine($"`Created At:` **{createdAt}**"); `Topic:` **{ch.Topic}**
sb.AppendLine($"`Topic:` **{ch.Topic}**"); `Users:` **{(await ch.GetUsersAsync()).Count()}**";
sb.AppendLine($"`Users:` **{(await ch.GetUsersAsync()).Count()}**"); await msg.Reply(toReturn).ConfigureAwait(false);
await msg.Reply(sb.ToString()).ConfigureAwait(false);
} }
[LocalizedCommand, LocalizedDescription, LocalizedSummary] [LocalizedCommand, LocalizedDescription, LocalizedSummary]
@ -70,17 +70,15 @@ namespace NadekoBot.Modules.Utility
var user = usr ?? msg.Author as IGuildUser; var user = usr ?? msg.Author as IGuildUser;
if (user == null) if (user == null)
return; return;
var sb = new StringBuilder(); var toReturn = $"`Name#Discrim:` **#{user.Username}#{user.Discriminator}**\n";
sb.AppendLine($"`Name#Discrim:` **#{user.Username}#{user.Discriminator}**");
if (!string.IsNullOrWhiteSpace(user.Nickname)) if (!string.IsNullOrWhiteSpace(user.Nickname))
sb.AppendLine($"`Nickname:` **{user.Nickname}**"); toReturn += $"`Nickname:` **{user.Nickname}**";
sb.AppendLine($"`Id:` **{user.Id}**"); toReturn += $@"`Id:` **{user.Id}**
sb.AppendLine($"`Current Game:` **{(user.Game?.Name == null ? "-" : user.Game.Name)}**"); `Current Game:` **{(user.Game?.Name == null ? "-" : user.Game.Name)}**
sb.AppendLine($"`Joined At:` **{user.JoinedAt}**"); `Joined At:` **{user.JoinedAt}**
sb.AppendLine($"`Roles:` **({user.Roles.Count()}) - {string.Join(", ", user.Roles.Select(r => r.Name))}**"); `Roles:` **({user.Roles.Count()}) - {string.Join(", ", user.Roles.Select(r => r.Name))}**
sb.AppendLine($"`AvatarUrl:` **{user.AvatarUrl}**"); `AvatarUrl:` **{user.AvatarUrl}**";
await msg.Reply(sb.ToString()).ConfigureAwait(false); await msg.Reply(toReturn).ConfigureAwait(false);
} }
} }
} }

View File

@ -1,10 +1,16 @@
namespace NadekoBot.Services using Discord;
using System.Linq;
namespace NadekoBot.Services
{ {
public interface IBotCredentials public interface IBotCredentials
{ {
string ClientId { get; } string ClientId { get; }
string Token { get; } string Token { get; }
string GoogleApiKey { get; } string GoogleApiKey { get; }
ulong[] OwnerIds { get; }
bool IsOwner(IUser u);
} }
} }

View File

@ -2,6 +2,8 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using Discord;
using System.Linq;
namespace NadekoBot.Services.Impl namespace NadekoBot.Services.Impl
{ {
@ -16,15 +18,20 @@ namespace NadekoBot.Services.Impl
public string Token { get; } public string Token { get; }
public ulong[] OwnerIds { get; }
public BotCredentials() public BotCredentials()
{ {
var cm = JsonConvert.DeserializeObject<CredentialsModel>(File.ReadAllText("./credentials.json")); var cm = JsonConvert.DeserializeObject<CredentialsModel>(File.ReadAllText("./credentials.json"));
Token = cm.Token; Token = cm.Token;
OwnerIds = cm.OwnerIds;
} }
private class CredentialsModel { private class CredentialsModel {
public string Token { get; set; } public string Token { get; set; }
public ulong[] OwnerIds { get; set; }
} }
public bool IsOwner(IUser u) => OwnerIds.Contains(u.Id);
} }
} }

View File

@ -339,7 +339,7 @@
"Microsoft.NETCore.Jit/1.0.2": { "Microsoft.NETCore.Jit/1.0.2": {
"type": "package" "type": "package"
}, },
"Microsoft.NETCore.Platforms/1.0.2-beta-24410-01": { "Microsoft.NETCore.Platforms/1.0.1": {
"type": "package", "type": "package",
"compile": { "compile": {
"lib/netstandard1.0/_._": {} "lib/netstandard1.0/_._": {}
@ -1509,11 +1509,7 @@
"ref/netstandard1.3/System.Net.Security.dll": {} "ref/netstandard1.3/System.Net.Security.dll": {}
}, },
"runtimeTargets": { "runtimeTargets": {
"runtimes/unix/lib/netstandard1.6/System.Net.Security.dll": { "runtimes/win/lib/netstandard1.3/_._": {
"assetType": "runtime",
"rid": "unix"
},
"runtimes/win/lib/netstandard1.3/System.Net.Security.dll": {
"assetType": "runtime", "assetType": "runtime",
"rid": "win" "rid": "win"
} }
@ -1563,20 +1559,16 @@
"lib/netstandard1.3/System.Net.WebSockets.dll": {} "lib/netstandard1.3/System.Net.WebSockets.dll": {}
} }
}, },
"System.Net.WebSockets.Client/4.0.1-beta-24410-01": { "System.Net.WebSockets.Client/4.0.0": {
"type": "package", "type": "package",
"dependencies": { "dependencies": {
"Microsoft.NETCore.Platforms": "1.0.2-beta-24410-01", "Microsoft.NETCore.Platforms": "1.0.1",
"Microsoft.Win32.Primitives": "4.0.1", "Microsoft.Win32.Primitives": "4.0.1",
"System.Collections": "4.0.11", "System.Collections": "4.0.11",
"System.Diagnostics.Debug": "4.0.11", "System.Diagnostics.Debug": "4.0.11",
"System.Diagnostics.Tracing": "4.1.0", "System.Diagnostics.Tracing": "4.1.0",
"System.Globalization": "4.0.11", "System.Globalization": "4.0.11",
"System.IO": "4.1.0",
"System.Net.NameResolution": "4.0.0",
"System.Net.Primitives": "4.0.11", "System.Net.Primitives": "4.0.11",
"System.Net.Security": "4.0.0",
"System.Net.Sockets": "4.1.0",
"System.Net.WebHeaderCollection": "4.0.1", "System.Net.WebHeaderCollection": "4.0.1",
"System.Net.WebSockets": "4.0.0", "System.Net.WebSockets": "4.0.0",
"System.Resources.ResourceManager": "4.0.1", "System.Resources.ResourceManager": "4.0.1",
@ -1584,14 +1576,10 @@
"System.Runtime.Extensions": "4.1.0", "System.Runtime.Extensions": "4.1.0",
"System.Runtime.Handles": "4.0.1", "System.Runtime.Handles": "4.0.1",
"System.Runtime.InteropServices": "4.1.0", "System.Runtime.InteropServices": "4.1.0",
"System.Security.Cryptography.Algorithms": "4.2.0",
"System.Security.Cryptography.Primitives": "4.0.0",
"System.Security.Cryptography.X509Certificates": "4.1.0", "System.Security.Cryptography.X509Certificates": "4.1.0",
"System.Text.Encoding": "4.0.11", "System.Text.Encoding": "4.0.11",
"System.Text.Encoding.Extensions": "4.0.11",
"System.Threading": "4.0.11", "System.Threading": "4.0.11",
"System.Threading.Tasks": "4.0.11", "System.Threading.Tasks": "4.0.11"
"System.Threading.Timer": "4.0.1"
}, },
"compile": { "compile": {
"ref/netstandard1.3/System.Net.WebSockets.Client.dll": {} "ref/netstandard1.3/System.Net.WebSockets.Client.dll": {}
@ -2534,7 +2522,7 @@
"System.Net.Http": "4.1.0", "System.Net.Http": "4.1.0",
"System.Net.NameResolution": "4.0.0", "System.Net.NameResolution": "4.0.0",
"System.Net.Sockets": "4.1.0", "System.Net.Sockets": "4.1.0",
"System.Net.WebSockets.Client": "4.0.1-beta-24410-01", "System.Net.WebSockets.Client": "4.0.0",
"System.Reflection.Extensions": "4.0.1", "System.Reflection.Extensions": "4.0.1",
"System.Runtime.InteropServices": "4.1.0", "System.Runtime.InteropServices": "4.1.0",
"System.Runtime.InteropServices.RuntimeInformation": "4.0.0", "System.Runtime.InteropServices.RuntimeInformation": "4.0.0",
@ -2918,12 +2906,12 @@
"runtime.json" "runtime.json"
] ]
}, },
"Microsoft.NETCore.Platforms/1.0.2-beta-24410-01": { "Microsoft.NETCore.Platforms/1.0.1": {
"sha512": "uc/pGYdE4sVy3OovFF8hg79MvCxptzICxn0jdA6WusGWZa7VieqFoZYc+a6bHUVhMI0s/7SfBriux0RUq+PpbA==", "sha512": "2G6OjjJzwBfNOO8myRV/nFrbTw5iA+DEm0N+qUqhrOmaVtn4pC77h38I1jsXGw5VH55+dPfQsqHD0We9sCl9FQ==",
"type": "package", "type": "package",
"path": "Microsoft.NETCore.Platforms/1.0.2-beta-24410-01", "path": "Microsoft.NETCore.Platforms/1.0.1",
"files": [ "files": [
"Microsoft.NETCore.Platforms.1.0.2-beta-24410-01.nupkg.sha512", "Microsoft.NETCore.Platforms.1.0.1.nupkg.sha512",
"Microsoft.NETCore.Platforms.nuspec", "Microsoft.NETCore.Platforms.nuspec",
"ThirdPartyNotices.txt", "ThirdPartyNotices.txt",
"dotnet_library_license.txt", "dotnet_library_license.txt",
@ -5548,12 +5536,12 @@
"ref/xamarinwatchos10/_._" "ref/xamarinwatchos10/_._"
] ]
}, },
"System.Net.WebSockets.Client/4.0.1-beta-24410-01": { "System.Net.WebSockets.Client/4.0.0": {
"sha512": "IOqAcR7k+3LwNI6aL7qN61HcCOA9X4MM9LbrZhDeNbeB/IeWTk7zpeb7kh3d7H678s7ndIqN6a7okO8dAAfcYQ==", "sha512": "GY5h9cn0ZVsG4ORQqMytTldrqxet2RC2CSEsgWGf4XNW5jhL5SxzcUZph03xbZsgn7K3qMr+Rq+gkbJNI+FEXg==",
"type": "package", "type": "package",
"path": "System.Net.WebSockets.Client/4.0.1-beta-24410-01", "path": "System.Net.WebSockets.Client/4.0.0",
"files": [ "files": [
"System.Net.WebSockets.Client.4.0.1-beta-24410-01.nupkg.sha512", "System.Net.WebSockets.Client.4.0.0.nupkg.sha512",
"System.Net.WebSockets.Client.nuspec", "System.Net.WebSockets.Client.nuspec",
"ThirdPartyNotices.txt", "ThirdPartyNotices.txt",
"dotnet_library_license.txt", "dotnet_library_license.txt",