A lot of work on moving to b2
This commit is contained in:
parent
39f3ee0190
commit
ac47621476
@ -7,7 +7,7 @@ using System.Linq;
|
|||||||
namespace NadekoBot.Attributes
|
namespace NadekoBot.Attributes
|
||||||
{
|
{
|
||||||
[System.AttributeUsage(AttributeTargets.Class)]
|
[System.AttributeUsage(AttributeTargets.Class)]
|
||||||
sealed class NadekoModuleAttribute : ModuleAttribute
|
sealed class NadekoModuleAttribute : GroupAttribute
|
||||||
{
|
{
|
||||||
//modulename / prefix
|
//modulename / prefix
|
||||||
private static Dictionary<string, string> modulePrefixes = null;
|
private static Dictionary<string, string> modulePrefixes = null;
|
||||||
@ -28,7 +28,7 @@ namespace NadekoBot.Attributes
|
|||||||
|
|
||||||
public NadekoModuleAttribute(string moduleName, string defaultPrefix) : base(GetModulePrefix(moduleName, defaultPrefix))
|
public NadekoModuleAttribute(string moduleName, string defaultPrefix) : base(GetModulePrefix(moduleName, defaultPrefix))
|
||||||
{
|
{
|
||||||
AppendSpace = false;
|
//AppendSpace = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string GetModulePrefix(string moduleName, string defaultPrefix)
|
private static string GetModulePrefix(string moduleName, string defaultPrefix)
|
||||||
|
@ -1,12 +1,13 @@
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Discord.Commands;
|
using Discord.Commands;
|
||||||
using Discord;
|
using Discord;
|
||||||
|
using System;
|
||||||
|
|
||||||
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) =>
|
public override Task<PreconditionResult> CheckPermissions(CommandContext context, CommandInfo executingCommand,IDependencyMap depMap) =>
|
||||||
Task.FromResult((NadekoBot.Credentials.IsOwner(context.Author) ? PreconditionResult.FromSuccess() : PreconditionResult.FromError("Not owner")));
|
Task.FromResult((NadekoBot.Credentials.IsOwner(context.User) ? PreconditionResult.FromSuccess() : PreconditionResult.FromError("Not owner")));
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -41,11 +41,11 @@ namespace NadekoBot.Modules.Administration
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static async Task DelMsgOnCmd_Handler(IUserMessage msg, Command cmd)
|
private static async Task DelMsgOnCmd_Handler(SocketUserMessage msg, CommandInfo cmd)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var channel = msg.Channel as ITextChannel;
|
var channel = Context.Channel as SocketTextChannel;
|
||||||
if (channel == null)
|
if (channel == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -67,14 +67,12 @@ namespace NadekoBot.Modules.Administration
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.Administrator)]
|
[RequireUserPermission(GuildPermission.Administrator)]
|
||||||
public async Task ResetPermissions(IUserMessage imsg)
|
public async Task ResetPermissions()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
|
||||||
|
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
{
|
{
|
||||||
var config = uow.GuildConfigs.PermissionsFor(channel.Guild.Id);
|
var config = uow.GuildConfigs.PermissionsFor(Context.Guild.Id);
|
||||||
config.RootPermission = Permission.GetDefaultRoot();
|
config.RootPermission = Permission.GetDefaultRoot();
|
||||||
var toAdd = new PermissionCache()
|
var toAdd = new PermissionCache()
|
||||||
{
|
{
|
||||||
@ -82,148 +80,136 @@ namespace NadekoBot.Modules.Administration
|
|||||||
PermRole = config.PermissionRole,
|
PermRole = config.PermissionRole,
|
||||||
Verbose = config.VerbosePermissions,
|
Verbose = config.VerbosePermissions,
|
||||||
};
|
};
|
||||||
Permissions.Permissions.Cache.AddOrUpdate(channel.Guild.Id,
|
Permissions.Permissions.Cache.AddOrUpdate(Context.Guild.Id, toAdd, (id, old) => toAdd);
|
||||||
toAdd, (id, old) => toAdd);
|
|
||||||
await uow.CompleteAsync();
|
await uow.CompleteAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
await channel.SendConfirmAsync($"{imsg.Author.Mention} 🆗 **Permissions for this server are reset.**");
|
await Context.Channel.SendConfirmAsync($"{Context.Message.Author.Mention} 🆗 **Permissions for this server are reset.**");
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.Administrator)]
|
[RequireUserPermission(GuildPermission.Administrator)]
|
||||||
public async Task Delmsgoncmd(IUserMessage umsg)
|
public async Task Delmsgoncmd()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
|
||||||
bool enabled;
|
bool enabled;
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
{
|
{
|
||||||
var conf = uow.GuildConfigs.For(channel.Guild.Id, set => set);
|
var conf = uow.GuildConfigs.For(Context.Guild.Id, set => set);
|
||||||
enabled = conf.DeleteMessageOnCommand = !conf.DeleteMessageOnCommand;
|
enabled = conf.DeleteMessageOnCommand = !conf.DeleteMessageOnCommand;
|
||||||
|
|
||||||
await uow.CompleteAsync();
|
await uow.CompleteAsync();
|
||||||
}
|
}
|
||||||
if (enabled)
|
if (enabled)
|
||||||
await channel.SendConfirmAsync("✅ **Now automatically deleting successful command invokations.**").ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync("✅ **Now automatically deleting successful command invokations.**").ConfigureAwait(false);
|
||||||
else
|
else
|
||||||
await channel.SendConfirmAsync("❗**Stopped automatic deletion of successful command invokations.**").ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync("❗**Stopped automatic deletion of successful command invokations.**").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.ManageRoles)]
|
[RequireUserPermission(GuildPermission.ManageRoles)]
|
||||||
public async Task Setrole(IUserMessage umsg, IGuildUser usr, [Remainder] IRole role)
|
public async Task Setrole(IGuildUser usr, [Remainder] IRole role)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await usr.AddRolesAsync(role).ConfigureAwait(false);
|
await usr.AddRolesAsync(role).ConfigureAwait(false);
|
||||||
await channel.SendConfirmAsync($"ℹ️ Successfully added role **{role.Name}** to user **{usr.Username}**").ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync($"ℹ️ Successfully added role **{role.Name}** to user **{usr.Username}**").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
await channel.SendErrorAsync("⚠️ Failed to add role. **Bot has insufficient permissions.**\n").ConfigureAwait(false);
|
await Context.Channel.SendErrorAsync("⚠️ Failed to add role. **Bot has insufficient permissions.**\n").ConfigureAwait(false);
|
||||||
Console.WriteLine(ex.ToString());
|
Console.WriteLine(ex.ToString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.ManageRoles)]
|
[RequireUserPermission(GuildPermission.ManageRoles)]
|
||||||
public async Task Removerole(IUserMessage umsg, IGuildUser usr, [Remainder] IRole role)
|
public async Task Removerole(IGuildUser usr, [Remainder] IRole role)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await usr.RemoveRolesAsync(role).ConfigureAwait(false);
|
await usr.RemoveRolesAsync(role).ConfigureAwait(false);
|
||||||
await channel.SendConfirmAsync($"ℹ️ Successfully removed role **{role.Name}** from user **{usr.Username}**").ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync($"ℹ️ Successfully removed role **{role.Name}** from user **{usr.Username}**").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
await channel.SendErrorAsync("⚠️ Failed to remove role. Most likely reason: **Insufficient permissions.**").ConfigureAwait(false);
|
await Context.Channel.SendErrorAsync("⚠️ Failed to remove role. Most likely reason: **Insufficient permissions.**").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.ManageRoles)]
|
[RequireUserPermission(GuildPermission.ManageRoles)]
|
||||||
public async Task RenameRole(IUserMessage umsg, IRole roleToEdit, string newname)
|
public async Task RenameRole(IRole roleToEdit, string newname)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (roleToEdit.Position > (await channel.Guild.GetCurrentUserAsync().ConfigureAwait(false)).Roles.Max(r => r.Position))
|
if (roleToEdit.Position > (await Context.Guild.GetCurrentUserAsync().ConfigureAwait(false)).Roles.Max(r => r.Position))
|
||||||
{
|
{
|
||||||
await channel.SendErrorAsync("🚫 You can't edit roles higher than your highest role.").ConfigureAwait(false);
|
await Context.Channel.SendErrorAsync("🚫 You can't edit roles higher than your highest role.").ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
await roleToEdit.ModifyAsync(g => g.Name = newname).ConfigureAwait(false);
|
await roleToEdit.ModifyAsync(g => g.Name = newname).ConfigureAwait(false);
|
||||||
await channel.SendConfirmAsync("✅ Role renamed.").ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync("✅ Role renamed.").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception)
|
||||||
{
|
{
|
||||||
await channel.SendErrorAsync("⚠️ Failed to rename role. Probably **insufficient permissions.**").ConfigureAwait(false);
|
await Context.Channel.SendErrorAsync("⚠️ Failed to rename role. Probably **insufficient permissions.**").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.ManageRoles)]
|
[RequireUserPermission(GuildPermission.ManageRoles)]
|
||||||
public async Task RemoveAllRoles(IUserMessage umsg, [Remainder] IGuildUser user)
|
public async Task RemoveAllRoles([Remainder] IGuildUser user)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await user.RemoveRolesAsync(user.Roles).ConfigureAwait(false);
|
await user.RemoveRolesAsync(user.Roles).ConfigureAwait(false);
|
||||||
await channel.SendConfirmAsync($"🗑 Successfully removed **all** roles from user **{user.Username}**").ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync($"🗑 Successfully removed **all** roles from user **{user.Username}**").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
await channel.SendErrorAsync("⚠️ Failed to remove roles. Most likely reason: **Insufficient permissions.**").ConfigureAwait(false);
|
await Context.Channel.SendErrorAsync("⚠️ Failed to remove roles. Most likely reason: **Insufficient permissions.**").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.ManageRoles)]
|
[RequireUserPermission(GuildPermission.ManageRoles)]
|
||||||
public async Task CreateRole(IUserMessage umsg, [Remainder] string roleName = null)
|
public async Task CreateRole([Remainder] string roleName = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
|
||||||
|
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(roleName))
|
if (string.IsNullOrWhiteSpace(roleName))
|
||||||
return;
|
return;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var r = await channel.Guild.CreateRoleAsync(roleName).ConfigureAwait(false);
|
var r = await Context.Guild.CreateRoleAsync(roleName).ConfigureAwait(false);
|
||||||
await channel.SendConfirmAsync($"✅ Successfully created role **{r.Name}**.").ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync($"✅ Successfully created role **{r.Name}**.").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception)
|
||||||
{
|
{
|
||||||
await channel.SendErrorAsync("⚠️ Unspecified error.").ConfigureAwait(false);
|
await Context.Channel.SendErrorAsync("⚠️ Unspecified error.").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.ManageRoles)]
|
[RequireUserPermission(GuildPermission.ManageRoles)]
|
||||||
public async Task RoleColor(IUserMessage umsg, params string[] args)
|
public async Task RoleColor(params string[] args)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
|
||||||
|
|
||||||
if (args.Count() != 2 && args.Count() != 4)
|
if (args.Count() != 2 && args.Count() != 4)
|
||||||
{
|
{
|
||||||
await channel.SendErrorAsync("❌ The parameters specified are **invalid.**").ConfigureAwait(false);
|
await Context.Channel.SendErrorAsync("❌ The parameters specified are **invalid.**").ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var roleName = args[0].ToUpperInvariant();
|
var roleName = args[0].ToUpperInvariant();
|
||||||
var role = channel.Guild.Roles.Where(r=>r.Name.ToUpperInvariant() == roleName).FirstOrDefault();
|
var role = Context.Guild.Roles.Where(r=>r.Name.ToUpperInvariant() == roleName).FirstOrDefault();
|
||||||
|
|
||||||
if (role == null)
|
if (role == null)
|
||||||
{
|
{
|
||||||
await channel.SendErrorAsync("🚫 That role **does not exist.**").ConfigureAwait(false);
|
await Context.Channel.SendErrorAsync("🚫 That role **does not exist.**").ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try
|
try
|
||||||
@ -236,108 +222,104 @@ namespace NadekoBot.Modules.Administration
|
|||||||
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 Discord.Color(red, green, blue).RawValue).ConfigureAwait(false);
|
await role.ModifyAsync(r => r.Color = new Discord.Color(red, green, blue).RawValue).ConfigureAwait(false);
|
||||||
await channel.SendConfirmAsync($"☑️ Role **{role.Name}'s** color has been changed.").ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync($"☑️ Role **{role.Name}'s** color has been changed.").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception)
|
||||||
{
|
{
|
||||||
await channel.SendErrorAsync("⚠️ Error occured, most likely **invalid parameters** or **insufficient permissions.**").ConfigureAwait(false);
|
await Context.Channel.SendErrorAsync("⚠️ Error occured, most likely **invalid parameters** or **insufficient permissions.**").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.BanMembers)]
|
[RequireUserPermission(GuildPermission.BanMembers)]
|
||||||
public async Task Ban(IUserMessage umsg, IGuildUser user, [Remainder] string msg = null)
|
public async Task Ban(IGuildUser user, [Remainder] string msg = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
|
||||||
if (string.IsNullOrWhiteSpace(msg))
|
if (string.IsNullOrWhiteSpace(msg))
|
||||||
{
|
{
|
||||||
msg = "❗️No reason provided.";
|
msg = "❗️No reason provided.";
|
||||||
}
|
}
|
||||||
if (umsg.Author.Id != user.Guild.OwnerId && user.Roles.Select(r=>r.Position).Max() >= ((IGuildUser)umsg.Author).Roles.Select(r => r.Position).Max())
|
if (Context.User.Id != user.Guild.OwnerId && Context.User.Roles.Select(r=>r.Position).Max() >= ((IGuildUser)Context.User).Roles.Select(r => r.Position).Max())
|
||||||
{
|
{
|
||||||
await channel.SendErrorAsync("⚠️ You can't use this command on users with a role higher or equal to yours in the role hierarchy.");
|
await Context.Channel.SendErrorAsync("⚠️ You can't use this command on users with a role higher or equal to yours in the role hierarchy.").ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await (await user.CreateDMChannelAsync()).SendErrorAsync($"⛔️ **You have been BANNED from `{channel.Guild.Name}` server.**\n" +
|
await (await user.CreateDMChannelAsync()).SendErrorAsync($"⛔️ **You have been BANNED from `{Context.Guild.Name}` server.**\n" +
|
||||||
$"⚖ *Reason:* {msg}").ConfigureAwait(false);
|
$"⚖ *Reason:* {msg}").ConfigureAwait(false);
|
||||||
await Task.Delay(2000).ConfigureAwait(false);
|
await Task.Delay(2000).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
catch { }
|
catch { }
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await channel.Guild.AddBanAsync(user, 7).ConfigureAwait(false);
|
await Context.Guild.AddBanAsync(user, 7).ConfigureAwait(false);
|
||||||
|
|
||||||
await channel.SendConfirmAsync("⛔️ **Banned** user **" + user.Username + "** ID: `" + user.Id + "`").ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync("⛔️ **Banned** user **" + user.Username + "** ID: `" + user.Id + "`").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
await channel.SendErrorAsync("⚠️ **Error.** Most likely I don't have sufficient permissions.").ConfigureAwait(false);
|
await Context.Channel.SendErrorAsync("⚠️ **Error.** Most likely I don't have sufficient permissions.").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.KickMembers)]
|
[RequireUserPermission(GuildPermission.KickMembers)]
|
||||||
[RequirePermission(GuildPermission.ManageMessages)]
|
[RequireUserPermission(GuildPermission.ManageMessages)]
|
||||||
public async Task Softban(IUserMessage umsg, IGuildUser user, [Remainder] string msg = null)
|
public async Task Softban(IGuildUser user, [Remainder] string msg = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
|
||||||
if (string.IsNullOrWhiteSpace(msg))
|
if (string.IsNullOrWhiteSpace(msg))
|
||||||
{
|
{
|
||||||
msg = "❗️No reason provided.";
|
msg = "❗️No reason provided.";
|
||||||
}
|
}
|
||||||
if (umsg.Author.Id != user.Guild.OwnerId && user.Roles.Select(r => r.Position).Max() >= ((IGuildUser)umsg.Author).Roles.Select(r => r.Position).Max())
|
if (Context.User.Id != user.Guild.OwnerId && user.Roles.Select(r => r.Position).Max() >= ((IGuildUser)Context.User).Roles.Select(r => r.Position).Max())
|
||||||
{
|
{
|
||||||
await channel.SendErrorAsync("⚠️ You can't use this command on users with a role higher or equal to yours in the role hierarchy.");
|
await Context.Channel.SendErrorAsync("⚠️ You can't use this command on users with a role higher or equal to yours in the role hierarchy.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await user.SendErrorAsync($"☣ **You have been SOFT-BANNED from `{channel.Guild.Name}` server.**\n" +
|
await user.SendErrorAsync($"☣ **You have been SOFT-BANNED from `{Context.Guild.Name}` server.**\n" +
|
||||||
$"⚖ *Reason:* {msg}").ConfigureAwait(false);
|
$"⚖ *Reason:* {msg}").ConfigureAwait(false);
|
||||||
await Task.Delay(2000).ConfigureAwait(false);
|
await Task.Delay(2000).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
catch { }
|
catch { }
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await channel.Guild.AddBanAsync(user, 7).ConfigureAwait(false);
|
await Context.Guild.AddBanAsync(user, 7).ConfigureAwait(false);
|
||||||
try { await channel.Guild.RemoveBanAsync(user).ConfigureAwait(false); }
|
try { await Context.Guild.RemoveBanAsync(user).ConfigureAwait(false); }
|
||||||
catch { await channel.Guild.RemoveBanAsync(user).ConfigureAwait(false); }
|
catch { await Context.Guild.RemoveBanAsync(user).ConfigureAwait(false); }
|
||||||
|
|
||||||
await channel.SendConfirmAsync("☣ **Soft-Banned** user **" + user.Username + "** ID: `" + user.Id + "`").ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync("☣ **Soft-Banned** user **" + user.Username + "** ID: `" + user.Id + "`").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
await channel.SendErrorAsync("⚠️ Error. Most likely I don't have sufficient permissions.").ConfigureAwait(false);
|
await Context.Channel.SendErrorAsync("⚠️ Error. Most likely I don't have sufficient permissions.").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.KickMembers)]
|
[RequireUserPermission(GuildPermission.KickMembers)]
|
||||||
public async Task Kick(IUserMessage umsg, IGuildUser user, [Remainder] string msg = null)
|
public async Task Kick(IGuildUser user, [Remainder] string msg = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
|
||||||
|
|
||||||
if (user == null)
|
if (user == null)
|
||||||
{
|
{
|
||||||
await channel.SendErrorAsync("❗️User not found.").ConfigureAwait(false);
|
await Context.Channel.SendErrorAsync("❗️User not found.").ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (umsg.Author.Id != user.Guild.OwnerId && user.Roles.Select(r => r.Position).Max() >= ((IGuildUser)umsg.Author).Roles.Select(r => r.Position).Max())
|
if (Context.Message.Author.Id != user.Guild.OwnerId && user.Roles.Select(r => r.Position).Max() >= ((IGuildUser)Context.User).Roles.Select(r => r.Position).Max())
|
||||||
{
|
{
|
||||||
await channel.SendErrorAsync("⚠️ You can't use this command on users with a role higher or equal to yours in the role hierarchy.");
|
await Context.Channel.SendErrorAsync("⚠️ You can't use this command on users with a role higher or equal to yours in the role hierarchy.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!string.IsNullOrWhiteSpace(msg))
|
if (!string.IsNullOrWhiteSpace(msg))
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await user.SendErrorAsync($"‼️**You have been KICKED from `{channel.Guild.Name}` server.**\n" +
|
await user.SendErrorAsync($"‼️**You have been KICKED from `{Context.Guild.Name}` server.**\n" +
|
||||||
$"⚖ *Reason:* {msg}").ConfigureAwait(false);
|
$"⚖ *Reason:* {msg}").ConfigureAwait(false);
|
||||||
await Task.Delay(2000).ConfigureAwait(false);
|
await Task.Delay(2000).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
@ -346,21 +328,19 @@ namespace NadekoBot.Modules.Administration
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
await user.KickAsync().ConfigureAwait(false);
|
await user.KickAsync().ConfigureAwait(false);
|
||||||
await channel.SendConfirmAsync("‼️**Kicked** user **" + user.Username + "** ID: `" + user.Id + "`").ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync("‼️**Kicked** user **" + user.Username + "** ID: `" + user.Id + "`").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
await channel.SendErrorAsync("⚠️ Error. Most likely I don't have sufficient permissions.").ConfigureAwait(false);
|
await Context.Channel.SendErrorAsync("⚠️ Error. Most likely I don't have sufficient permissions.").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.DeafenMembers)]
|
[RequireUserPermission(GuildPermission.DeafenMembers)]
|
||||||
public async Task Deafen(IUserMessage umsg, params IGuildUser[] users)
|
public async Task Deafen(params IGuildUser[] users)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
|
||||||
|
|
||||||
if (!users.Any())
|
if (!users.Any())
|
||||||
return;
|
return;
|
||||||
try
|
try
|
||||||
@ -369,21 +349,19 @@ namespace NadekoBot.Modules.Administration
|
|||||||
{
|
{
|
||||||
await u.ModifyAsync(usr=>usr.Deaf = true).ConfigureAwait(false);
|
await u.ModifyAsync(usr=>usr.Deaf = true).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
await channel.SendConfirmAsync("🔇 **Deafen** successful.").ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync("🔇 **Deafen** successful.").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
await channel.SendErrorAsync("⚠️ I most likely don't have the permission necessary for that.").ConfigureAwait(false);
|
await Context.Channel.SendErrorAsync("⚠️ I most likely don't have the permission necessary for that.").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.DeafenMembers)]
|
[RequireUserPermission(GuildPermission.DeafenMembers)]
|
||||||
public async Task UnDeafen(IUserMessage umsg, params IGuildUser[] users)
|
public async Task UnDeafen(params IGuildUser[] users)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
|
||||||
|
|
||||||
if (!users.Any())
|
if (!users.Any())
|
||||||
return;
|
return;
|
||||||
try
|
try
|
||||||
@ -392,138 +370,131 @@ namespace NadekoBot.Modules.Administration
|
|||||||
{
|
{
|
||||||
await u.ModifyAsync(usr=> usr.Deaf = false).ConfigureAwait(false);
|
await u.ModifyAsync(usr=> usr.Deaf = false).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
await channel.SendConfirmAsync("🔊 **Undeafen** successful.").ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync("🔊 **Undeafen** successful.").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
await channel.SendErrorAsync("⚠️ I most likely don't have the permission necessary for that.").ConfigureAwait(false);
|
await Context.Channel.SendErrorAsync("⚠️ I most likely don't have the permission necessary for that.").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.ManageChannels)]
|
[RequireUserPermission(GuildPermission.ManageChannels)]
|
||||||
public async Task DelVoiChanl(IUserMessage umsg, [Remainder] IVoiceChannel voiceChannel)
|
public async Task DelVoiChanl([Remainder] IVoiceChannel voiceChannel)
|
||||||
{
|
{
|
||||||
await voiceChannel.DeleteAsync().ConfigureAwait(false);
|
await voiceChannel.DeleteAsync().ConfigureAwait(false);
|
||||||
await umsg.Channel.SendConfirmAsync($"🗑 Removed voice channel **{voiceChannel.Name}** successfully.").ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync($"🗑 Removed voice channel **{voiceChannel.Name}** successfully.").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.ManageChannels)]
|
[RequireUserPermission(GuildPermission.ManageChannels)]
|
||||||
public async Task CreatVoiChanl(IUserMessage umsg, [Remainder] string channelName)
|
public async Task CreatVoiChanl([Remainder] string channelName)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var ch = await Context.Guild.CreateVoiceChannelAsync(channelName).ConfigureAwait(false);
|
||||||
var ch = await channel.Guild.CreateVoiceChannelAsync(channelName).ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync($"✅ Created voice channel **{ch.Name}**. ID: `{ch.Id}`").ConfigureAwait(false);
|
||||||
await channel.SendConfirmAsync($"✅ Created voice channel **{ch.Name}**. ID: `{ch.Id}`").ConfigureAwait(false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.ManageChannels)]
|
[RequireUserPermission(GuildPermission.ManageChannels)]
|
||||||
public async Task DelTxtChanl(IUserMessage umsg, [Remainder] ITextChannel toDelete)
|
public async Task DelTxtChanl([Remainder] ITextChannel toDelete)
|
||||||
{
|
{
|
||||||
await toDelete.DeleteAsync().ConfigureAwait(false);
|
await toDelete.DeleteAsync().ConfigureAwait(false);
|
||||||
await umsg.Channel.SendConfirmAsync($"🗑 Removed text channel **{toDelete.Name}**. ID: `{toDelete.Id}`").ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync($"🗑 Removed text channel **{toDelete.Name}**. ID: `{toDelete.Id}`").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.ManageChannels)]
|
[RequireUserPermission(GuildPermission.ManageChannels)]
|
||||||
public async Task CreaTxtChanl(IUserMessage umsg, [Remainder] string channelName)
|
public async Task CreaTxtChanl([Remainder] string channelName)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var txtCh = await Context.Guild.CreateTextChannelAsync(channelName).ConfigureAwait(false);
|
||||||
var txtCh = await channel.Guild.CreateTextChannelAsync(channelName).ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync($"✅ Added text channel **{txtCh.Name}**. ID: `{txtCh.Id}`").ConfigureAwait(false);
|
||||||
await channel.SendConfirmAsync($"✅ Added text channel **{txtCh.Name}**. ID: `{txtCh.Id}`").ConfigureAwait(false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.ManageChannels)]
|
[RequireUserPermission(GuildPermission.ManageChannels)]
|
||||||
public async Task SetTopic(IUserMessage umsg, [Remainder] string topic = null)
|
public async Task SetTopic([Remainder] string topic = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
|
||||||
topic = topic ?? "";
|
topic = topic ?? "";
|
||||||
await channel.ModifyAsync(c => c.Topic = topic);
|
await Context.Channel.ModifyAsync(c => c.Topic = topic);
|
||||||
await channel.SendConfirmAsync("🆗 **New channel topic set.**").ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync("🆗 **New channel topic set.**").ConfigureAwait(false);
|
||||||
|
|
||||||
}
|
}
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.ManageChannels)]
|
[RequireUserPermission(GuildPermission.ManageChannels)]
|
||||||
public async Task SetChanlName(IUserMessage umsg, [Remainder] string name)
|
public async Task SetChanlName([Remainder] string name)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
await Context.Channel.ModifyAsync(c => c.Name = name).ConfigureAwait(false);
|
||||||
|
await Context.Channel.SendConfirmAsync("🆗 **New channel name set.**").ConfigureAwait(false);
|
||||||
await channel.ModifyAsync(c => c.Name = name).ConfigureAwait(false);
|
|
||||||
await channel.SendConfirmAsync("🆗 **New channel name set.**").ConfigureAwait(false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//delets her own messages, no perm required
|
//delets her own messages, no perm required
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Prune(IUserMessage umsg)
|
public async Task Prune()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var user = await Context.Guild.GetCurrentUserAsync().ConfigureAwait(false);
|
||||||
|
|
||||||
var user = channel.Guild.GetCurrentUser();
|
var enumerable = (await Context.Channel.GetMessagesAsync().Flatten()).AsEnumerable();
|
||||||
|
|
||||||
var enumerable = (await umsg.Channel.GetMessagesAsync()).AsEnumerable();
|
|
||||||
enumerable = enumerable.Where(x => x.Author.Id == user.Id);
|
enumerable = enumerable.Where(x => x.Author.Id == user.Id);
|
||||||
await umsg.Channel.DeleteMessagesAsync(enumerable).ConfigureAwait(false);
|
await Context.Channel.DeleteMessagesAsync(enumerable).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
// prune x
|
// prune x
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(ChannelPermission.ManageMessages)]
|
[RequireUserPermission(ChannelPermission.ManageMessages)]
|
||||||
public async Task Prune(IUserMessage msg, int count)
|
public async Task Prune(int count)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)msg.Channel;
|
|
||||||
await (msg as IUserMessage).DeleteAsync();
|
await (Context.Message as IUserMessage).DeleteAsync();
|
||||||
int limit = (count < 100) ? count : 100;
|
int limit = (count < 100) ? count : 100;
|
||||||
var enumerable = (await msg.Channel.GetMessagesAsync(limit: limit));
|
var enumerable = (await Context.Channel.GetMessagesAsync(limit: limit).Flatten().ConfigureAwait(false));
|
||||||
await msg.Channel.DeleteMessagesAsync(enumerable).ConfigureAwait(false);
|
await Context.Channel.DeleteMessagesAsync(enumerable).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
//prune @user [x]
|
//prune @user [x]
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(ChannelPermission.ManageMessages)]
|
[RequireUserPermission(ChannelPermission.ManageMessages)]
|
||||||
public async Task Prune(IUserMessage msg, IGuildUser user, int count = 100)
|
public async Task Prune(IGuildUser user, int count = 100)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)msg.Channel;
|
|
||||||
int limit = (count < 100) ? count : 100;
|
int limit = (count < 100) ? count : 100;
|
||||||
var enumerable = (await msg.Channel.GetMessagesAsync(limit: limit)).Where(m => m.Author == user);
|
var enumerable = (await Context.Channel.GetMessagesAsync(limit: limit).Flatten()).Where(m => m.Author == user);
|
||||||
await msg.Channel.DeleteMessagesAsync(enumerable).ConfigureAwait(false);
|
await Context.Channel.DeleteMessagesAsync(enumerable).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[OwnerOnly]
|
[OwnerOnly]
|
||||||
public async Task Die(IUserMessage umsg)
|
public async Task Die()
|
||||||
{
|
{
|
||||||
try { await umsg.Channel.SendConfirmAsync("ℹ️ **Shutting down.**").ConfigureAwait(false); } catch (Exception ex) { _log.Warn(ex); }
|
try { await Context.Channel.SendConfirmAsync("ℹ️ **Shutting down.**").ConfigureAwait(false); } catch (Exception ex) { _log.Warn(ex); }
|
||||||
await Task.Delay(2000).ConfigureAwait(false);
|
await Task.Delay(2000).ConfigureAwait(false);
|
||||||
Environment.Exit(0);
|
Environment.Exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[OwnerOnly]
|
[OwnerOnly]
|
||||||
public async Task SetName(IUserMessage umsg, [Remainder] string newName)
|
public async Task SetName([Remainder] string newName)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrWhiteSpace(newName))
|
if (string.IsNullOrWhiteSpace(newName))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
await (await NadekoBot.Client.GetCurrentUserAsync()).ModifyAsync(u => u.Username = newName).ConfigureAwait(false);
|
await NadekoBot.Client.CurrentUser().ModifyAsync(u => u.Username = newName).ConfigureAwait(false);
|
||||||
|
|
||||||
await umsg.Channel.SendConfirmAsync($"ℹ️ Successfully changed name to **{newName}**").ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync($"ℹ️ Successfully changed name to **{newName}**").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[OwnerOnly]
|
[OwnerOnly]
|
||||||
public async Task SetAvatar(IUserMessage umsg, [Remainder] string img = null)
|
public async Task SetAvatar([Remainder] string img = null)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrWhiteSpace(img))
|
if (string.IsNullOrWhiteSpace(img))
|
||||||
return;
|
return;
|
||||||
@ -536,38 +507,38 @@ namespace NadekoBot.Modules.Administration
|
|||||||
await sr.CopyToAsync(imgStream);
|
await sr.CopyToAsync(imgStream);
|
||||||
imgStream.Position = 0;
|
imgStream.Position = 0;
|
||||||
|
|
||||||
await (await NadekoBot.Client.GetCurrentUserAsync().ConfigureAwait(false)).ModifyAsync(u => u.Avatar = imgStream).ConfigureAwait(false);
|
await NadekoBot.Client.CurrentUser().ModifyAsync(u => u.Avatar = imgStream).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
await umsg.Channel.SendConfirmAsync("🆒 **New avatar set.**").ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync("🆒 **New avatar set.**").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[OwnerOnly]
|
[OwnerOnly]
|
||||||
public async Task SetGame(IUserMessage umsg, [Remainder] string game = null)
|
public async Task SetGame([Remainder] string game = null)
|
||||||
{
|
{
|
||||||
game = game ?? "";
|
game = game ?? "";
|
||||||
|
|
||||||
await NadekoBot.Client.SetGame(game).ConfigureAwait(false);
|
await NadekoBot.Client.SetGame(game).ConfigureAwait(false);
|
||||||
|
|
||||||
await umsg.Channel.SendConfirmAsync("👾 **New game set.**").ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync("👾 **New game set.**").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[OwnerOnly]
|
[OwnerOnly]
|
||||||
public async Task SetStream(IUserMessage umsg, string url, [Remainder] string name = null)
|
public async Task SetStream(string url, [Remainder] string name = null)
|
||||||
{
|
{
|
||||||
name = name ?? "";
|
name = name ?? "";
|
||||||
|
|
||||||
await NadekoBot.Client.SetStream(name, url).ConfigureAwait(false);
|
await NadekoBot.Client.SetStream(name, url).ConfigureAwait(false);
|
||||||
|
|
||||||
await umsg.Channel.SendConfirmAsync("ℹ️ **New stream set.**").ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync("ℹ️ **New stream set.**").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[OwnerOnly]
|
[OwnerOnly]
|
||||||
public async Task Send(IUserMessage umsg, string where, [Remainder] string msg = null)
|
public async Task Send(string where, [Remainder] string msg = null)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrWhiteSpace(msg))
|
if (string.IsNullOrWhiteSpace(msg))
|
||||||
return;
|
return;
|
||||||
@ -584,7 +555,7 @@ namespace NadekoBot.Modules.Administration
|
|||||||
if (ids[1].ToUpperInvariant().StartsWith("C:"))
|
if (ids[1].ToUpperInvariant().StartsWith("C:"))
|
||||||
{
|
{
|
||||||
var cid = ulong.Parse(ids[1].Substring(2));
|
var cid = ulong.Parse(ids[1].Substring(2));
|
||||||
var ch = server.GetTextChannels().Where(c => c.Id == cid).FirstOrDefault();
|
var ch = (await server.GetTextChannelsAsync()).Where(c => c.Id == cid).FirstOrDefault();
|
||||||
if (ch == null)
|
if (ch == null)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
@ -594,7 +565,7 @@ namespace NadekoBot.Modules.Administration
|
|||||||
else if (ids[1].ToUpperInvariant().StartsWith("U:"))
|
else if (ids[1].ToUpperInvariant().StartsWith("U:"))
|
||||||
{
|
{
|
||||||
var uid = ulong.Parse(ids[1].Substring(2));
|
var uid = ulong.Parse(ids[1].Substring(2));
|
||||||
var user = server.GetUsers().Where(u => u.Id == uid).FirstOrDefault();
|
var user = (await server.GetUsersAsync()).Where(u => u.Id == uid).FirstOrDefault();
|
||||||
if (user == null)
|
if (user == null)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
@ -603,42 +574,40 @@ namespace NadekoBot.Modules.Administration
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
await umsg.Channel.SendErrorAsync("⚠️ Invalid format.").ConfigureAwait(false);
|
await Context.Channel.SendErrorAsync("⚠️ Invalid format.").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[OwnerOnly]
|
[OwnerOnly]
|
||||||
public async Task Announce(IUserMessage umsg, [Remainder] string message)
|
public async Task Announce([Remainder] string message)
|
||||||
{
|
{
|
||||||
var channels = await Task.WhenAll(NadekoBot.Client.GetGuilds().Select(g =>
|
var channels = await Task.WhenAll(NadekoBot.Client.GetGuilds().Select(g =>
|
||||||
g.GetDefaultChannelAsync()
|
g.GetDefaultChannelAsync()
|
||||||
)).ConfigureAwait(false);
|
)).ConfigureAwait(false);
|
||||||
|
|
||||||
await Task.WhenAll(channels.Select(c => c.SendConfirmAsync($"🆕 Message from {umsg.Author} `[Bot Owner]`:", message)))
|
await Task.WhenAll(channels.Select(c => c.SendConfirmAsync($"🆕 Message from {Context.User} `[Bot Owner]`:", message)))
|
||||||
.ConfigureAwait(false);
|
.ConfigureAwait(false);
|
||||||
|
|
||||||
await umsg.Channel.SendConfirmAsync("🆗").ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync("🆗").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[OwnerOnly]
|
[OwnerOnly]
|
||||||
public async Task SaveChat(IUserMessage umsg, int cnt)
|
public async Task SaveChat(int cnt)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
|
||||||
|
|
||||||
ulong? lastmsgId = null;
|
ulong? lastmsgId = null;
|
||||||
var sb = new StringBuilder();
|
var sb = new StringBuilder();
|
||||||
var msgs = new List<IMessage>(cnt);
|
var msgs = new List<IMessage>(cnt);
|
||||||
while (cnt > 0)
|
while (cnt > 0)
|
||||||
{
|
{
|
||||||
var dlcnt = cnt < 100 ? cnt : 100;
|
var dlcnt = cnt < 100 ? cnt : 100;
|
||||||
IReadOnlyCollection<IMessage> dledMsgs;
|
IEnumerable<IMessage> dledMsgs;
|
||||||
if (lastmsgId == null)
|
if (lastmsgId == null)
|
||||||
dledMsgs = await umsg.Channel.GetMessagesAsync(cnt).ConfigureAwait(false);
|
dledMsgs = await Context.Channel.GetMessagesAsync(cnt).Flatten().ConfigureAwait(false);
|
||||||
else
|
else
|
||||||
dledMsgs = await umsg.Channel.GetMessagesAsync(lastmsgId.Value, Direction.Before, dlcnt);
|
dledMsgs = await Context.Channel.GetMessagesAsync(lastmsgId.Value, Direction.Before, dlcnt).Flatten().ConfigureAwait(false);
|
||||||
|
|
||||||
if (!dledMsgs.Any())
|
if (!dledMsgs.Any())
|
||||||
break;
|
break;
|
||||||
@ -647,8 +616,8 @@ namespace NadekoBot.Modules.Administration
|
|||||||
lastmsgId = msgs[msgs.Count - 1].Id;
|
lastmsgId = msgs[msgs.Count - 1].Id;
|
||||||
cnt -= 100;
|
cnt -= 100;
|
||||||
}
|
}
|
||||||
var title = $"Chatlog-{channel.Guild.Name}/#{channel.Name}-{DateTime.Now}.txt";
|
var title = $"Chatlog-{Context.Guild.Name}/#{Context.Channel.Name}-{DateTime.Now}.txt";
|
||||||
await (umsg.Author as IGuildUser).SendFileAsync(
|
await (Context.User as IGuildUser).SendFileAsync(
|
||||||
await JsonConvert.SerializeObject(new { Messages = msgs.Select(s => $"【{s.Timestamp:HH:mm:ss}】{s.Author}:" + s.ToString()) }, Formatting.Indented).ToStream().ConfigureAwait(false),
|
await JsonConvert.SerializeObject(new { Messages = msgs.Select(s => $"【{s.Timestamp:HH:mm:ss}】{s.Author}:" + s.ToString()) }, Formatting.Indented).ToStream().ConfigureAwait(false),
|
||||||
title, title).ConfigureAwait(false);
|
title, title).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
@ -656,32 +625,30 @@ namespace NadekoBot.Modules.Administration
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.MentionEveryone)]
|
[RequireUserPermission(GuildPermission.MentionEveryone)]
|
||||||
public async Task MentionRole(IUserMessage umsg, params IRole[] roles)
|
public async Task MentionRole(params IRole[] roles)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
string send = $"❕{Context.User.Mention} has invoked a mention on the following roles ❕";
|
||||||
|
|
||||||
string send = $"❕{umsg.Author.Mention} has invoked a mention on the following roles ❕";
|
|
||||||
foreach (var role in roles)
|
foreach (var role in roles)
|
||||||
{
|
{
|
||||||
send += $"\n**{role.Name}**\n";
|
send += $"\n**{role.Name}**\n";
|
||||||
send += string.Join(", ", (await channel.Guild.GetUsersAsync()).Where(u => u.Roles.Contains(role)).Distinct().Select(u=>u.Mention));
|
send += string.Join(", ", (await Context.Guild.GetUsersAsync()).Where(u => u.Roles.Contains(role)).Distinct().Select(u=>u.Mention));
|
||||||
}
|
}
|
||||||
|
|
||||||
while (send.Length > 2000)
|
while (send.Length > 2000)
|
||||||
{
|
{
|
||||||
var curstr = send.Substring(0, 2000);
|
var curstr = send.Substring(0, 2000);
|
||||||
await channel.SendMessageAsync(curstr.Substring(0,
|
await Context.Channel.SendMessageAsync(curstr.Substring(0,
|
||||||
curstr.LastIndexOf(", ", StringComparison.Ordinal) + 1)).ConfigureAwait(false);
|
curstr.LastIndexOf(", ", StringComparison.Ordinal) + 1)).ConfigureAwait(false);
|
||||||
send = curstr.Substring(curstr.LastIndexOf(", ", StringComparison.Ordinal) + 1) +
|
send = curstr.Substring(curstr.LastIndexOf(", ", StringComparison.Ordinal) + 1) +
|
||||||
send.Substring(2000);
|
send.Substring(2000);
|
||||||
}
|
}
|
||||||
await channel.SendMessageAsync(send).ConfigureAwait(false);
|
await Context.Channel.SendMessageAsync(send).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
IGuild nadekoSupportServer;
|
IGuild nadekoSupportServer;
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
public async Task Donators(IUserMessage umsg)
|
public async Task Donators()
|
||||||
{
|
{
|
||||||
IEnumerable<Donator> donatorsOrdered;
|
IEnumerable<Donator> donatorsOrdered;
|
||||||
|
|
||||||
@ -689,7 +656,7 @@ namespace NadekoBot.Modules.Administration
|
|||||||
{
|
{
|
||||||
donatorsOrdered = uow.Donators.GetDonatorsOrdered();
|
donatorsOrdered = uow.Donators.GetDonatorsOrdered();
|
||||||
}
|
}
|
||||||
await umsg.Channel.SendConfirmAsync("Thanks to the people listed below for making this project happen!", string.Join("⭐", donatorsOrdered.Select(d => d.Name))).ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync("Thanks to the people listed below for making this project happen!", string.Join("⭐", donatorsOrdered.Select(d => d.Name))).ConfigureAwait(false);
|
||||||
|
|
||||||
nadekoSupportServer = nadekoSupportServer ?? NadekoBot.Client.GetGuild(117523346618318850);
|
nadekoSupportServer = nadekoSupportServer ?? NadekoBot.Client.GetGuild(117523346618318850);
|
||||||
|
|
||||||
@ -700,14 +667,14 @@ namespace NadekoBot.Modules.Administration
|
|||||||
if (patreonRole == null)
|
if (patreonRole == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var usrs = nadekoSupportServer.GetUsers().Where(u => u.Roles.Contains(patreonRole));
|
var usrs = (await nadekoSupportServer.GetUsersAsync()).Where(u => u.RoleIds.Contains(236667642088259585u));
|
||||||
await umsg.Channel.SendConfirmAsync("Patreon supporters", string.Join("⭐", usrs.Select(d => d.Username))).ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync("Patreon supporters", string.Join("⭐", usrs.Select(d => d.Username))).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[OwnerOnly]
|
[OwnerOnly]
|
||||||
public async Task Donadd(IUserMessage umsg, IUser donator, int amount)
|
public async Task Donadd(IUser donator, int amount)
|
||||||
{
|
{
|
||||||
Donator don;
|
Donator don;
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
@ -716,7 +683,7 @@ namespace NadekoBot.Modules.Administration
|
|||||||
await uow.CompleteAsync();
|
await uow.CompleteAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
await umsg.Channel.SendConfirmAsync($"Successfuly added a new donator. Total donated amount from this user: {don.Amount} 👑").ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync($"Successfuly added a new donator. Total donated amount from this user: {don.Amount} 👑").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -84,10 +84,10 @@ namespace NadekoBot.Modules.Administration
|
|||||||
NadekoBot.Client.MessageReceived += (imsg) =>
|
NadekoBot.Client.MessageReceived += (imsg) =>
|
||||||
{
|
{
|
||||||
var msg = imsg as IUserMessage;
|
var msg = imsg as IUserMessage;
|
||||||
if (msg == null || msg.Author.IsBot)
|
if (msg == null || Context.User.IsBot)
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
|
|
||||||
var channel = msg.Channel as ITextChannel;
|
var channel = Context.Channel as ITextChannel;
|
||||||
if (channel == null)
|
if (channel == null)
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
|
|
||||||
@ -99,14 +99,14 @@ namespace NadekoBot.Modules.Administration
|
|||||||
if (!antiSpamGuilds.TryGetValue(channel.Guild.Id, out spamSettings))
|
if (!antiSpamGuilds.TryGetValue(channel.Guild.Id, out spamSettings))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var stats = spamSettings.UserStats.AddOrUpdate(msg.Author.Id, new UserSpamStats(msg.Content),
|
var stats = spamSettings.UserStats.AddOrUpdate(Context.User.Id, new UserSpamStats(msg.Content),
|
||||||
(id, old) => { old.ApplyNextMessage(msg.Content); return old; });
|
(id, old) => { old.ApplyNextMessage(msg.Content); return old; });
|
||||||
|
|
||||||
if (stats.Count >= spamSettings.MessageThreshold)
|
if (stats.Count >= spamSettings.MessageThreshold)
|
||||||
{
|
{
|
||||||
if (spamSettings.UserStats.TryRemove(msg.Author.Id, out stats))
|
if (spamSettings.UserStats.TryRemove(Context.User.Id, out stats))
|
||||||
{
|
{
|
||||||
await PunishUsers(spamSettings.Action, ProtectionType.Spamming, (IGuildUser)msg.Author)
|
await PunishUsers(spamSettings.Action, ProtectionType.Spamming, (IGuildUser)Context.User)
|
||||||
.ConfigureAwait(false);
|
.ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -196,10 +196,10 @@ namespace NadekoBot.Modules.Administration
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.Administrator)]
|
[RequireUserPermission(GuildPermission.Administrator)]
|
||||||
public async Task AntiRaid(IUserMessage imsg, int userThreshold, int seconds, PunishmentAction action)
|
public async Task AntiRaid(IUserMessage imsg, int userThreshold, int seconds, PunishmentAction action)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
if (userThreshold < 2 || userThreshold > 30)
|
if (userThreshold < 2 || userThreshold > 30)
|
||||||
{
|
{
|
||||||
@ -234,16 +234,16 @@ namespace NadekoBot.Modules.Administration
|
|||||||
};
|
};
|
||||||
antiRaidGuilds.AddOrUpdate(channel.Guild.Id, setting, (id, old) => setting);
|
antiRaidGuilds.AddOrUpdate(channel.Guild.Id, setting, (id, old) => setting);
|
||||||
|
|
||||||
await channel.SendConfirmAsync($"ℹ️ {imsg.Author.Mention} If **{userThreshold}** or more users join within **{seconds}** seconds, I will **{action}** them.")
|
await channel.SendConfirmAsync($"ℹ️ {Context.User.Mention} If **{userThreshold}** or more users join within **{seconds}** seconds, I will **{action}** them.")
|
||||||
.ConfigureAwait(false);
|
.ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.Administrator)]
|
[RequireUserPermission(GuildPermission.Administrator)]
|
||||||
public async Task AntiSpam(IUserMessage imsg, int messageCount=3, PunishmentAction action = PunishmentAction.Mute)
|
public async Task AntiSpam(IUserMessage imsg, int messageCount=3, PunishmentAction action = PunishmentAction.Mute)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
if (messageCount < 2 || messageCount > 10)
|
if (messageCount < 2 || messageCount > 10)
|
||||||
return;
|
return;
|
||||||
|
@ -45,10 +45,10 @@ namespace NadekoBot.Modules.Administration
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.ManageRoles)]
|
[RequireUserPermission(GuildPermission.ManageRoles)]
|
||||||
public async Task AutoAssignRole(IUserMessage umsg, [Remainder] IRole role = null)
|
public async Task AutoAssignRole(IUserMessage umsg, [Remainder] IRole role = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
GuildConfig conf;
|
GuildConfig conf;
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
|
@ -21,28 +21,28 @@ namespace NadekoBot.Modules.Administration
|
|||||||
_log = LogManager.GetCurrentClassLogger();
|
_log = LogManager.GetCurrentClassLogger();
|
||||||
NadekoBot.Client.MessageReceived += (imsg) =>
|
NadekoBot.Client.MessageReceived += (imsg) =>
|
||||||
{
|
{
|
||||||
if (imsg.Author.IsBot)
|
if (Context.User.IsBot)
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
|
|
||||||
var msg = imsg as IUserMessage;
|
var msg = imsg as IUserMessage;
|
||||||
if (msg == null)
|
if (msg == null)
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
|
|
||||||
var channel = imsg.Channel as ITextChannel;
|
var channel = Context.Channel as ITextChannel;
|
||||||
if (channel == null)
|
if (channel == null)
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
|
|
||||||
Task.Run(async () =>
|
Task.Run(async () =>
|
||||||
{
|
{
|
||||||
if (msg.Author.Id == NadekoBot.Client.GetCurrentUser().Id) return;
|
if (Context.User.Id == NadekoBot.Client.CurrentUser().Id) return;
|
||||||
foreach (var subscriber in Subscribers)
|
foreach (var subscriber in Subscribers)
|
||||||
{
|
{
|
||||||
var set = subscriber.Value;
|
var set = subscriber.Value;
|
||||||
if (!set.Contains(msg.Channel))
|
if (!set.Contains(Context.Channel))
|
||||||
continue;
|
continue;
|
||||||
foreach (var chan in set.Except(new[] { channel }))
|
foreach (var chan in set.Except(new[] { channel }))
|
||||||
{
|
{
|
||||||
try { await chan.SendMessageAsync(GetText(channel.Guild, channel, (IGuildUser)msg.Author, msg)).ConfigureAwait(false); } catch (Exception ex) { _log.Warn(ex); }
|
try { await chan.SendMessageAsync(GetText(channel.Guild, channel, (IGuildUser)Context.User, msg)).ConfigureAwait(false); } catch (Exception ex) { _log.Warn(ex); }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -59,24 +59,24 @@ namespace NadekoBot.Modules.Administration
|
|||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[OwnerOnly]
|
[OwnerOnly]
|
||||||
public async Task Scsc(IUserMessage msg)
|
public async Task Scsc()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)msg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
var token = new NadekoRandom().Next();
|
var token = new NadekoRandom().Next();
|
||||||
var set = new ConcurrentHashSet<ITextChannel>();
|
var set = new ConcurrentHashSet<ITextChannel>();
|
||||||
if (Subscribers.TryAdd(token, set))
|
if (Subscribers.TryAdd(token, set))
|
||||||
{
|
{
|
||||||
set.Add(channel);
|
set.Add(channel);
|
||||||
await ((IGuildUser)msg.Author).SendConfirmAsync("This is your CSC token", token.ToString()).ConfigureAwait(false);
|
await ((IGuildUser)Context.User).SendConfirmAsync("This is your CSC token", token.ToString()).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.ManageGuild)]
|
[RequireUserPermission(GuildPermission.ManageGuild)]
|
||||||
public async Task Jcsc(IUserMessage imsg, int token)
|
public async Task Jcsc(IUserMessage imsg, int token)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
ConcurrentHashSet<ITextChannel> set;
|
ConcurrentHashSet<ITextChannel> set;
|
||||||
if (!Subscribers.TryGetValue(token, out set))
|
if (!Subscribers.TryGetValue(token, out set))
|
||||||
@ -87,10 +87,10 @@ namespace NadekoBot.Modules.Administration
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.ManageGuild)]
|
[RequireUserPermission(GuildPermission.ManageGuild)]
|
||||||
public async Task Lcsc(IUserMessage imsg)
|
public async Task Lcsc()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
foreach (var subscriber in Subscribers)
|
foreach (var subscriber in Subscribers)
|
||||||
{
|
{
|
||||||
|
@ -29,9 +29,9 @@ namespace NadekoBot.Modules.Administration
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[OwnerOnly]
|
[OwnerOnly]
|
||||||
public async Task ForwardMessages(IUserMessage imsg)
|
public async Task ForwardMessages()
|
||||||
{
|
{
|
||||||
var channel = imsg.Channel;
|
var channel = Context.Channel;
|
||||||
|
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
{
|
{
|
||||||
@ -47,9 +47,9 @@ namespace NadekoBot.Modules.Administration
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[OwnerOnly]
|
[OwnerOnly]
|
||||||
public async Task ForwardToAll(IUserMessage imsg)
|
public async Task ForwardToAll()
|
||||||
{
|
{
|
||||||
var channel = imsg.Channel;
|
var channel = Context.Channel;
|
||||||
|
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
{
|
{
|
||||||
@ -68,16 +68,16 @@ namespace NadekoBot.Modules.Administration
|
|||||||
{
|
{
|
||||||
if (ForwardDMs && ownerChannels.Any())
|
if (ForwardDMs && ownerChannels.Any())
|
||||||
{
|
{
|
||||||
var title = $"DM from [{msg.Author}]({msg.Author.Id})";
|
var title = $"DM from [{Context.User}]({Context.User.Id})";
|
||||||
if (ForwardDMsToAllOwners)
|
if (ForwardDMsToAllOwners)
|
||||||
{
|
{
|
||||||
var msgs = await Task.WhenAll(ownerChannels.Where(ch => ch.Recipient.Id != msg.Author.Id)
|
var msgs = await Task.WhenAll(ownerChannels.Where(ch => ch.Recipient.Id != Context.User.Id)
|
||||||
.Select(ch => ch.SendConfirmAsync(title, msg.Content))).ConfigureAwait(false);
|
.Select(ch => ch.SendConfirmAsync(title, msg.Content))).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var firstOwnerChannel = ownerChannels.First();
|
var firstOwnerChannel = ownerChannels.First();
|
||||||
if (firstOwnerChannel.Recipient.Id != msg.Author.Id)
|
if (firstOwnerChannel.Recipient.Id != Context.User.Id)
|
||||||
try { await firstOwnerChannel.SendConfirmAsync(title, msg.Content).ConfigureAwait(false); } catch { }
|
try { await firstOwnerChannel.SendConfirmAsync(title, msg.Content).ConfigureAwait(false); } catch { }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -469,7 +469,7 @@ namespace NadekoBot.Modules.Administration
|
|||||||
if (msg == null || msg.IsAuthor())
|
if (msg == null || msg.IsAuthor())
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
|
|
||||||
var channel = msg.Channel as ITextChannel;
|
var channel = Context.Channel as ITextChannel;
|
||||||
if (channel == null)
|
if (channel == null)
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
|
|
||||||
@ -488,7 +488,7 @@ namespace NadekoBot.Modules.Administration
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var str = $@"🕔`{prettyCurrentTime}`👤__**{msg.Author.Username}#{msg.Author.Discriminator}**__ **| Deleted Message |** 🆔 `{msg.Author.Id}` #⃣ `{channel.Name}`
|
var str = $@"🕔`{prettyCurrentTime}`👤__**{Context.User.Username}#{Context.User.Discriminator}**__ **| Deleted Message |** 🆔 `{Context.User.Id}` #⃣ `{channel.Name}`
|
||||||
🗑 {msg.Resolve(userHandling: UserMentionHandling.NameAndDiscriminator)}";
|
🗑 {msg.Resolve(userHandling: UserMentionHandling.NameAndDiscriminator)}";
|
||||||
if (msg.Attachments.Any())
|
if (msg.Attachments.Any())
|
||||||
str += $"{Environment.NewLine}📎 {string.Join(", ", msg.Attachments.Select(a => a.ProxyUrl))}";
|
str += $"{Environment.NewLine}📎 {string.Join(", ", msg.Attachments.Select(a => a.ProxyUrl))}";
|
||||||
@ -581,11 +581,11 @@ namespace NadekoBot.Modules.Administration
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.Administrator)]
|
[RequireUserPermission(GuildPermission.Administrator)]
|
||||||
[OwnerOnly]
|
[OwnerOnly]
|
||||||
public async Task LogServer(IUserMessage msg)
|
public async Task LogServer()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)msg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
LogSetting logSetting;
|
LogSetting logSetting;
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
{
|
{
|
||||||
@ -605,11 +605,11 @@ namespace NadekoBot.Modules.Administration
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.Administrator)]
|
[RequireUserPermission(GuildPermission.Administrator)]
|
||||||
[OwnerOnly]
|
[OwnerOnly]
|
||||||
public async Task LogIgnore(IUserMessage imsg)
|
public async Task LogIgnore()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
int removed;
|
int removed;
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
{
|
{
|
||||||
@ -635,9 +635,9 @@ namespace NadekoBot.Modules.Administration
|
|||||||
//[LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
|
//[LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
|
||||||
//[RequireContext(ContextType.Guild)]
|
//[RequireContext(ContextType.Guild)]
|
||||||
//[OwnerOnly]
|
//[OwnerOnly]
|
||||||
//public async Task LogAdd(IUserMessage msg, [Remainder] string eventName)
|
//public async Task LogAdd([Remainder] string eventName)
|
||||||
//{
|
//{
|
||||||
// var channel = (ITextChannel)msg.Channel;
|
// var channel = (ITextChannel)Context.Channel;
|
||||||
// //eventName = eventName?.Replace(" ","").ToLowerInvariant();
|
// //eventName = eventName?.Replace(" ","").ToLowerInvariant();
|
||||||
|
|
||||||
// switch (eventName.ToLowerInvariant())
|
// switch (eventName.ToLowerInvariant())
|
||||||
@ -669,9 +669,9 @@ namespace NadekoBot.Modules.Administration
|
|||||||
|
|
||||||
//[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias]
|
//[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias]
|
||||||
//[RequireContext(ContextType.Guild)]
|
//[RequireContext(ContextType.Guild)]
|
||||||
//public async Task LogRemove(IUserMessage msg, string eventName)
|
//public async Task LogRemove(string eventName)
|
||||||
//{
|
//{
|
||||||
// var channel = (ITextChannel)msg.Channel;
|
// var channel = (ITextChannel)Context.Channel;
|
||||||
// eventName = eventName.ToLowerInvariant();
|
// eventName = eventName.ToLowerInvariant();
|
||||||
|
|
||||||
// switch (eventName)
|
// switch (eventName)
|
||||||
@ -704,10 +704,10 @@ namespace NadekoBot.Modules.Administration
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.Administrator)]
|
[RequireUserPermission(GuildPermission.Administrator)]
|
||||||
public async Task UserPresence(IUserMessage imsg)
|
public async Task UserPresence()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
bool enabled;
|
bool enabled;
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
{
|
{
|
||||||
@ -727,10 +727,10 @@ namespace NadekoBot.Modules.Administration
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.Administrator)]
|
[RequireUserPermission(GuildPermission.Administrator)]
|
||||||
public async Task VoicePresence(IUserMessage imsg)
|
public async Task VoicePresence()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
bool enabled;
|
bool enabled;
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
{
|
{
|
||||||
@ -754,7 +754,7 @@ namespace NadekoBot.Modules.Administration
|
|||||||
//[RequireContext(ContextType.Guild)]
|
//[RequireContext(ContextType.Guild)]
|
||||||
//public async Task VoiPresIgnore(IUserMessage imsg, IVoiceChannel voiceChannel)
|
//public async Task VoiPresIgnore(IUserMessage imsg, IVoiceChannel voiceChannel)
|
||||||
//{
|
//{
|
||||||
// var channel = (ITextChannel)imsg.Channel;
|
// var channel = (ITextChannel)Context.Channel;
|
||||||
// int removed;
|
// int removed;
|
||||||
// using (var uow = DbHandler.UnitOfWork())
|
// using (var uow = DbHandler.UnitOfWork())
|
||||||
// {
|
// {
|
||||||
|
@ -81,10 +81,10 @@ namespace NadekoBot.Modules.Administration
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.ManageMessages)]
|
[RequireUserPermission(GuildPermission.ManageMessages)]
|
||||||
public async Task RepeatInvoke(IUserMessage imsg)
|
public async Task RepeatInvoke()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
RepeatRunner rep;
|
RepeatRunner rep;
|
||||||
if (!repeaters.TryGetValue(channel.Id, out rep))
|
if (!repeaters.TryGetValue(channel.Id, out rep))
|
||||||
@ -98,10 +98,10 @@ namespace NadekoBot.Modules.Administration
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.ManageMessages)]
|
[RequireUserPermission(GuildPermission.ManageMessages)]
|
||||||
public async Task Repeat(IUserMessage imsg)
|
public async Task Repeat()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
RepeatRunner rep;
|
RepeatRunner rep;
|
||||||
if (repeaters.TryRemove(channel.Id, out rep))
|
if (repeaters.TryRemove(channel.Id, out rep))
|
||||||
{
|
{
|
||||||
@ -119,10 +119,10 @@ namespace NadekoBot.Modules.Administration
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.ManageMessages)]
|
[RequireUserPermission(GuildPermission.ManageMessages)]
|
||||||
public async Task Repeat(IUserMessage imsg, int minutes, [Remainder] string message)
|
public async Task Repeat(IUserMessage imsg, int minutes, [Remainder] string message)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
if (minutes < 1 || minutes > 10080)
|
if (minutes < 1 || minutes > 10080)
|
||||||
return;
|
return;
|
||||||
|
@ -34,9 +34,9 @@ namespace NadekoBot.Modules.Administration
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[OwnerOnly]
|
[OwnerOnly]
|
||||||
public async Task MigrateData(IUserMessage umsg)
|
public async Task MigrateData()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
var version = 0;
|
var version = 0;
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
@ -54,12 +54,12 @@ namespace NadekoBot.Modules.Administration
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
await umsg.Channel.SendMessageAsync("🆙 **Migration done.**").ConfigureAwait(false);
|
await Context.Channel.SendMessageAsync("🆙 **Migration done.**").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
_log.Error(ex);
|
_log.Error(ex);
|
||||||
await umsg.Channel.SendMessageAsync("⚠️ **Error while migrating, check `logs` for more informations.**").ConfigureAwait(false);
|
await Context.Channel.SendMessageAsync("⚠️ **Error while migrating, check `logs` for more informations.**").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -137,11 +137,11 @@ namespace NadekoBot.Modules.Administration
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.ManageRoles)]
|
[RequireUserPermission(GuildPermission.ManageRoles)]
|
||||||
[Priority(1)]
|
[Priority(1)]
|
||||||
public async Task SetMuteRole(IUserMessage imsg, [Remainder] string name)
|
public async Task SetMuteRole(IUserMessage imsg, [Remainder] string name)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
name = name.Trim();
|
name = name.Trim();
|
||||||
if (string.IsNullOrWhiteSpace(name))
|
if (string.IsNullOrWhiteSpace(name))
|
||||||
return;
|
return;
|
||||||
@ -158,18 +158,18 @@ namespace NadekoBot.Modules.Administration
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.ManageRoles)]
|
[RequireUserPermission(GuildPermission.ManageRoles)]
|
||||||
[Priority(0)]
|
[Priority(0)]
|
||||||
public Task SetMuteRole(IUserMessage imsg, [Remainder] IRole role)
|
public Task SetMuteRole(IUserMessage imsg, [Remainder] IRole role)
|
||||||
=> SetMuteRole(imsg, role.Name);
|
=> SetMuteRole(imsg, role.Name);
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.ManageRoles)]
|
[RequireUserPermission(GuildPermission.ManageRoles)]
|
||||||
[RequirePermission(GuildPermission.MuteMembers)]
|
[RequireUserPermission(GuildPermission.MuteMembers)]
|
||||||
public async Task Mute(IUserMessage umsg, IGuildUser user)
|
public async Task Mute(IUserMessage umsg, IGuildUser user)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -184,11 +184,11 @@ namespace NadekoBot.Modules.Administration
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.ManageRoles)]
|
[RequireUserPermission(GuildPermission.ManageRoles)]
|
||||||
[RequirePermission(GuildPermission.MuteMembers)]
|
[RequireUserPermission(GuildPermission.MuteMembers)]
|
||||||
public async Task Unmute(IUserMessage umsg, IGuildUser user)
|
public async Task Unmute(IUserMessage umsg, IGuildUser user)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -203,10 +203,10 @@ namespace NadekoBot.Modules.Administration
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.ManageRoles)]
|
[RequireUserPermission(GuildPermission.ManageRoles)]
|
||||||
public async Task ChatMute(IUserMessage umsg, IGuildUser user)
|
public async Task ChatMute(IUserMessage umsg, IGuildUser user)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -222,10 +222,10 @@ namespace NadekoBot.Modules.Administration
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.ManageRoles)]
|
[RequireUserPermission(GuildPermission.ManageRoles)]
|
||||||
public async Task ChatUnmute(IUserMessage umsg, IGuildUser user)
|
public async Task ChatUnmute(IUserMessage umsg, IGuildUser user)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -241,10 +241,10 @@ namespace NadekoBot.Modules.Administration
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.MuteMembers)]
|
[RequireUserPermission(GuildPermission.MuteMembers)]
|
||||||
public async Task VoiceMute(IUserMessage umsg, IGuildUser user)
|
public async Task VoiceMute(IUserMessage umsg, IGuildUser user)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -260,10 +260,10 @@ namespace NadekoBot.Modules.Administration
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.MuteMembers)]
|
[RequireUserPermission(GuildPermission.MuteMembers)]
|
||||||
public async Task VoiceUnmute(IUserMessage umsg, IGuildUser user)
|
public async Task VoiceUnmute(IUserMessage umsg, IGuildUser user)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await user.ModifyAsync(usr => usr.Mute = false).ConfigureAwait(false);
|
await user.ModifyAsync(usr => usr.Mute = false).ConfigureAwait(false);
|
||||||
|
@ -88,7 +88,7 @@ namespace NadekoBot.Modules.Administration
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[OwnerOnly]
|
[OwnerOnly]
|
||||||
public async Task RotatePlaying(IUserMessage umsg)
|
public async Task RotatePlaying()
|
||||||
{
|
{
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
{
|
{
|
||||||
@ -98,9 +98,9 @@ namespace NadekoBot.Modules.Administration
|
|||||||
await uow.CompleteAsync();
|
await uow.CompleteAsync();
|
||||||
}
|
}
|
||||||
if (RotatingStatuses)
|
if (RotatingStatuses)
|
||||||
await umsg.Channel.SendConfirmAsync("🆗 **Rotating playing status enabled.**").ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync("🆗 **Rotating playing status enabled.**").ConfigureAwait(false);
|
||||||
else
|
else
|
||||||
await umsg.Channel.SendConfirmAsync("ℹ️ **Rotating playing status disabled.**").ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync("ℹ️ **Rotating playing status disabled.**").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
@ -116,19 +116,19 @@ namespace NadekoBot.Modules.Administration
|
|||||||
await uow.CompleteAsync();
|
await uow.CompleteAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
await umsg.Channel.SendConfirmAsync("✅ **Added.**").ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync("✅ **Added.**").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[OwnerOnly]
|
[OwnerOnly]
|
||||||
public async Task ListPlaying(IUserMessage umsg)
|
public async Task ListPlaying()
|
||||||
{
|
{
|
||||||
if (!RotatingStatusMessages.Any())
|
if (!RotatingStatusMessages.Any())
|
||||||
await umsg.Channel.SendErrorAsync("❎ **No rotating playing statuses set.**");
|
await Context.Channel.SendErrorAsync("❎ **No rotating playing statuses set.**");
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var i = 1;
|
var i = 1;
|
||||||
await umsg.Channel.SendConfirmAsync($"ℹ️ {umsg.Author.Mention} `Here is a list of rotating statuses:`\n\n\t" + string.Join("\n\t", RotatingStatusMessages.Select(rs => $"`{i++}.` {rs.Status}")));
|
await Context.Channel.SendConfirmAsync($"ℹ️ {Context.User.Mention} `Here is a list of rotating statuses:`\n\n\t" + string.Join("\n\t", RotatingStatusMessages.Select(rs => $"`{i++}.` {rs.Status}")));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -151,7 +151,7 @@ namespace NadekoBot.Modules.Administration
|
|||||||
RotatingStatusMessages.RemoveAt(index);
|
RotatingStatusMessages.RemoveAt(index);
|
||||||
await uow.CompleteAsync();
|
await uow.CompleteAsync();
|
||||||
}
|
}
|
||||||
await umsg.Channel.SendConfirmAsync($"🗑 **Removed the the playing message:** {msg}").ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync($"🗑 **Removed the the playing message:** {msg}").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -68,7 +68,7 @@ namespace NadekoBot.Modules.Administration
|
|||||||
var t = Task.Run(async () =>
|
var t = Task.Run(async () =>
|
||||||
{
|
{
|
||||||
var usrMsg = umsg as IUserMessage;
|
var usrMsg = umsg as IUserMessage;
|
||||||
var channel = usrMsg.Channel as ITextChannel;
|
var channel = usrContext.Channel as ITextChannel;
|
||||||
|
|
||||||
if (channel == null || usrMsg.IsAuthor())
|
if (channel == null || usrMsg.IsAuthor())
|
||||||
return;
|
return;
|
||||||
@ -76,7 +76,7 @@ namespace NadekoBot.Modules.Administration
|
|||||||
if (!RatelimitingChannels.TryGetValue(channel.Id, out limiter))
|
if (!RatelimitingChannels.TryGetValue(channel.Id, out limiter))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (limiter.CheckUserRatelimit(usrMsg.Author.Id))
|
if (limiter.CheckUserRatelimit(usrContext.User.Id))
|
||||||
try { await usrMsg.DeleteAsync(); } catch (Exception ex) { _log.Warn(ex); }
|
try { await usrMsg.DeleteAsync(); } catch (Exception ex) { _log.Warn(ex); }
|
||||||
});
|
});
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
@ -85,10 +85,10 @@ namespace NadekoBot.Modules.Administration
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.ManageMessages)]
|
[RequireUserPermission(GuildPermission.ManageMessages)]
|
||||||
public async Task Slowmode(IUserMessage umsg)
|
public async Task Slowmode()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
Ratelimiter throwaway;
|
Ratelimiter throwaway;
|
||||||
if (RatelimitingChannels.TryRemove(channel.Id, out throwaway))
|
if (RatelimitingChannels.TryRemove(channel.Id, out throwaway))
|
||||||
@ -101,11 +101,11 @@ namespace NadekoBot.Modules.Administration
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.ManageMessages)]
|
[RequireUserPermission(GuildPermission.ManageMessages)]
|
||||||
public async Task Slowmode(IUserMessage umsg, int msg, int perSec)
|
public async Task Slowmode(IUserMessage umsg, int msg, int perSec)
|
||||||
{
|
{
|
||||||
await Slowmode(umsg).ConfigureAwait(false); // disable if exists
|
await Slowmode(umsg).ConfigureAwait(false); // disable if exists
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
if (msg < 1 || perSec < 1 || msg > 100 || perSec > 3600)
|
if (msg < 1 || perSec < 1 || msg > 100 || perSec > 3600)
|
||||||
{
|
{
|
||||||
|
@ -21,10 +21,10 @@ namespace NadekoBot.Modules.Administration
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.ManageMessages)]
|
[RequireUserPermission(GuildPermission.ManageMessages)]
|
||||||
public async Task AdSarm(IUserMessage imsg)
|
public async Task AdSarm()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
bool newval;
|
bool newval;
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
{
|
{
|
||||||
@ -39,10 +39,10 @@ namespace NadekoBot.Modules.Administration
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.ManageRoles)]
|
[RequireUserPermission(GuildPermission.ManageRoles)]
|
||||||
public async Task Asar(IUserMessage umsg, [Remainder] IRole role)
|
public async Task Asar(IUserMessage umsg, [Remainder] IRole role)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
IEnumerable<SelfAssignedRole> roles;
|
IEnumerable<SelfAssignedRole> roles;
|
||||||
|
|
||||||
@ -70,10 +70,10 @@ namespace NadekoBot.Modules.Administration
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.ManageRoles)]
|
[RequireUserPermission(GuildPermission.ManageRoles)]
|
||||||
public async Task Rsar(IUserMessage umsg, [Remainder] IRole role)
|
public async Task Rsar(IUserMessage umsg, [Remainder] IRole role)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
bool success;
|
bool success;
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
@ -91,9 +91,9 @@ namespace NadekoBot.Modules.Administration
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Lsar(IUserMessage umsg)
|
public async Task Lsar()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
var toRemove = new ConcurrentHashSet<SelfAssignedRole>();
|
var toRemove = new ConcurrentHashSet<SelfAssignedRole>();
|
||||||
var removeMsg = new StringBuilder();
|
var removeMsg = new StringBuilder();
|
||||||
@ -128,10 +128,10 @@ namespace NadekoBot.Modules.Administration
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.ManageRoles)]
|
[RequireUserPermission(GuildPermission.ManageRoles)]
|
||||||
public async Task Tesar(IUserMessage umsg)
|
public async Task Tesar()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
bool areExclusive;
|
bool areExclusive;
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
@ -149,8 +149,8 @@ namespace NadekoBot.Modules.Administration
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Iam(IUserMessage umsg, [Remainder] IRole role)
|
public async Task Iam(IUserMessage umsg, [Remainder] IRole role)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
var guildUser = (IGuildUser)umsg.Author;
|
var guildUser = (IGuildUser)Context.User;
|
||||||
var usrMsg = (IUserMessage)umsg;
|
var usrMsg = (IUserMessage)umsg;
|
||||||
|
|
||||||
GuildConfig conf;
|
GuildConfig conf;
|
||||||
@ -208,8 +208,8 @@ namespace NadekoBot.Modules.Administration
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Iamnot(IUserMessage umsg, [Remainder] IRole role)
|
public async Task Iamnot(IUserMessage umsg, [Remainder] IRole role)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
var guildUser = (IGuildUser)umsg.Author;
|
var guildUser = (IGuildUser)Context.User;
|
||||||
|
|
||||||
bool autoDeleteSelfAssignedRoleMessages;
|
bool autoDeleteSelfAssignedRoleMessages;
|
||||||
IEnumerable<SelfAssignedRole> roles;
|
IEnumerable<SelfAssignedRole> roles;
|
||||||
|
@ -24,7 +24,7 @@ namespace NadekoBot.Modules.Administration
|
|||||||
[OwnerOnly]
|
[OwnerOnly]
|
||||||
public async Task Leave(IUserMessage umsg, [Remainder] string guildStr)
|
public async Task Leave(IUserMessage umsg, [Remainder] string guildStr)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
guildStr = guildStr.Trim().ToUpperInvariant();
|
guildStr = guildStr.Trim().ToUpperInvariant();
|
||||||
var server = _client.GetGuilds().FirstOrDefault(g => g.Id.ToString().Trim().ToUpperInvariant() == guildStr) ??
|
var server = _client.GetGuilds().FirstOrDefault(g => g.Id.ToString().Trim().ToUpperInvariant() == guildStr) ??
|
||||||
@ -35,7 +35,7 @@ namespace NadekoBot.Modules.Administration
|
|||||||
await channel.SendErrorAsync("⚠️ Cannot find that server").ConfigureAwait(false);
|
await channel.SendErrorAsync("⚠️ Cannot find that server").ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (server.OwnerId != _client.GetCurrentUser().Id)
|
if (server.OwnerId != _client.CurrentUser().Id)
|
||||||
{
|
{
|
||||||
await server.LeaveAsync().ConfigureAwait(false);
|
await server.LeaveAsync().ConfigureAwait(false);
|
||||||
await channel.SendConfirmAsync("✅ Left server " + server.Name).ConfigureAwait(false);
|
await channel.SendConfirmAsync("✅ Left server " + server.Name).ConfigureAwait(false);
|
||||||
|
@ -124,10 +124,10 @@ namespace NadekoBot.Modules.Administration
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.ManageGuild)]
|
[RequireUserPermission(GuildPermission.ManageGuild)]
|
||||||
public async Task GreetDel(IUserMessage umsg, int timer = 30)
|
public async Task GreetDel(IUserMessage umsg, int timer = 30)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
if (timer < 0 || timer > 600)
|
if (timer < 0 || timer > 600)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -155,10 +155,10 @@ namespace NadekoBot.Modules.Administration
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.ManageGuild)]
|
[RequireUserPermission(GuildPermission.ManageGuild)]
|
||||||
public async Task Greet(IUserMessage umsg)
|
public async Task Greet()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
var enabled = await ServerGreetCommands.SetGreet(channel.Guild.Id, channel.Id).ConfigureAwait(false);
|
var enabled = await ServerGreetCommands.SetGreet(channel.Guild.Id, channel.Id).ConfigureAwait(false);
|
||||||
|
|
||||||
@ -184,10 +184,10 @@ namespace NadekoBot.Modules.Administration
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.ManageGuild)]
|
[RequireUserPermission(GuildPermission.ManageGuild)]
|
||||||
public async Task GreetMsg(IUserMessage umsg, [Remainder] string text = null)
|
public async Task GreetMsg(IUserMessage umsg, [Remainder] string text = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(text))
|
if (string.IsNullOrWhiteSpace(text))
|
||||||
{
|
{
|
||||||
@ -228,10 +228,10 @@ namespace NadekoBot.Modules.Administration
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.ManageGuild)]
|
[RequireUserPermission(GuildPermission.ManageGuild)]
|
||||||
public async Task GreetDm(IUserMessage umsg)
|
public async Task GreetDm()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
var enabled = await ServerGreetCommands.SetGreetDm(channel.Guild.Id).ConfigureAwait(false);
|
var enabled = await ServerGreetCommands.SetGreetDm(channel.Guild.Id).ConfigureAwait(false);
|
||||||
|
|
||||||
@ -256,10 +256,10 @@ namespace NadekoBot.Modules.Administration
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.ManageGuild)]
|
[RequireUserPermission(GuildPermission.ManageGuild)]
|
||||||
public async Task GreetDmMsg(IUserMessage umsg, [Remainder] string text = null)
|
public async Task GreetDmMsg(IUserMessage umsg, [Remainder] string text = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(text))
|
if (string.IsNullOrWhiteSpace(text))
|
||||||
{
|
{
|
||||||
@ -300,10 +300,10 @@ namespace NadekoBot.Modules.Administration
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.ManageGuild)]
|
[RequireUserPermission(GuildPermission.ManageGuild)]
|
||||||
public async Task Bye(IUserMessage umsg)
|
public async Task Bye()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
var enabled = await ServerGreetCommands.SetBye(channel.Guild.Id, channel.Id).ConfigureAwait(false);
|
var enabled = await ServerGreetCommands.SetBye(channel.Guild.Id, channel.Id).ConfigureAwait(false);
|
||||||
|
|
||||||
@ -329,10 +329,10 @@ namespace NadekoBot.Modules.Administration
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.ManageGuild)]
|
[RequireUserPermission(GuildPermission.ManageGuild)]
|
||||||
public async Task ByeMsg(IUserMessage umsg, [Remainder] string text = null)
|
public async Task ByeMsg(IUserMessage umsg, [Remainder] string text = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(text))
|
if (string.IsNullOrWhiteSpace(text))
|
||||||
{
|
{
|
||||||
@ -373,10 +373,10 @@ namespace NadekoBot.Modules.Administration
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.ManageGuild)]
|
[RequireUserPermission(GuildPermission.ManageGuild)]
|
||||||
public async Task ByeDel(IUserMessage umsg, int timer = 30)
|
public async Task ByeDel(IUserMessage umsg, int timer = 30)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
await ServerGreetCommands.SetByeDel(channel.Guild.Id, timer).ConfigureAwait(false);
|
await ServerGreetCommands.SetByeDel(channel.Guild.Id, timer).ConfigureAwait(false);
|
||||||
|
|
||||||
|
@ -106,11 +106,11 @@ namespace NadekoBot.Modules.Administration
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.ManageRoles)]
|
[RequireUserPermission(GuildPermission.ManageRoles)]
|
||||||
[RequirePermission(GuildPermission.ManageChannels)]
|
[RequireUserPermission(GuildPermission.ManageChannels)]
|
||||||
public async Task VoicePlusText(IUserMessage msg)
|
public async Task VoicePlusText()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)msg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
var guild = channel.Guild;
|
var guild = channel.Guild;
|
||||||
|
|
||||||
var botUser = await guild.GetCurrentUserAsync().ConfigureAwait(false);
|
var botUser = await guild.GetCurrentUserAsync().ConfigureAwait(false);
|
||||||
@ -159,11 +159,11 @@ namespace NadekoBot.Modules.Administration
|
|||||||
}
|
}
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.ManageChannels)]
|
[RequireUserPermission(GuildPermission.ManageChannels)]
|
||||||
[RequirePermission(GuildPermission.ManageRoles)]
|
[RequireUserPermission(GuildPermission.ManageRoles)]
|
||||||
public async Task CleanVPlusT(IUserMessage msg)
|
public async Task CleanVPlusT()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)msg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
var guild = channel.Guild;
|
var guild = channel.Guild;
|
||||||
var botUser = await guild.GetCurrentUserAsync().ConfigureAwait(false);
|
var botUser = await guild.GetCurrentUserAsync().ConfigureAwait(false);
|
||||||
if (!botUser.GuildPermissions.Administrator)
|
if (!botUser.GuildPermissions.Administrator)
|
||||||
|
@ -59,9 +59,9 @@ namespace NadekoBot.Modules.ClashOfClans
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task CreateWar(IUserMessage umsg, int size, [Remainder] string enemyClan = null)
|
public async Task CreateWar(IUserMessage umsg, int size, [Remainder] string enemyClan = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
if (!(umsg.Author as IGuildUser).GuildPermissions.ManageChannels)
|
if (!(Context.User as IGuildUser).GuildPermissions.ManageChannels)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(enemyClan))
|
if (string.IsNullOrWhiteSpace(enemyClan))
|
||||||
@ -81,7 +81,7 @@ namespace NadekoBot.Modules.ClashOfClans
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
var cw = await CreateWar(enemyClan, size, channel.Guild.Id, umsg.Channel.Id);
|
var cw = await CreateWar(enemyClan, size, channel.Guild.Id, Context.Channel.Id);
|
||||||
|
|
||||||
wars.Add(cw);
|
wars.Add(cw);
|
||||||
await channel.SendConfirmAsync($"❗🔰**CREATED CLAN WAR AGAINST {cw.ShortPrint()}**").ConfigureAwait(false);
|
await channel.SendConfirmAsync($"❗🔰**CREATED CLAN WAR AGAINST {cw.ShortPrint()}**").ConfigureAwait(false);
|
||||||
@ -91,7 +91,7 @@ namespace NadekoBot.Modules.ClashOfClans
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task StartWar(IUserMessage umsg, [Remainder] string number = null)
|
public async Task StartWar(IUserMessage umsg, [Remainder] string number = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
int num = 0;
|
int num = 0;
|
||||||
int.TryParse(number, out num);
|
int.TryParse(number, out num);
|
||||||
@ -119,7 +119,7 @@ namespace NadekoBot.Modules.ClashOfClans
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task ListWar(IUserMessage umsg, [Remainder] string number = null)
|
public async Task ListWar(IUserMessage umsg, [Remainder] string number = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
// if number is null, print all wars in a short way
|
// if number is null, print all wars in a short way
|
||||||
if (string.IsNullOrWhiteSpace(number))
|
if (string.IsNullOrWhiteSpace(number))
|
||||||
@ -162,7 +162,7 @@ namespace NadekoBot.Modules.ClashOfClans
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Claim(IUserMessage umsg, int number, int baseNumber, [Remainder] string other_name = null)
|
public async Task Claim(IUserMessage umsg, int number, int baseNumber, [Remainder] string other_name = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
var warsInfo = GetWarInfo(umsg, number);
|
var warsInfo = GetWarInfo(umsg, number);
|
||||||
if (warsInfo == null || warsInfo.Item1.Count == 0)
|
if (warsInfo == null || warsInfo.Item1.Count == 0)
|
||||||
{
|
{
|
||||||
@ -171,7 +171,7 @@ namespace NadekoBot.Modules.ClashOfClans
|
|||||||
}
|
}
|
||||||
var usr =
|
var usr =
|
||||||
string.IsNullOrWhiteSpace(other_name) ?
|
string.IsNullOrWhiteSpace(other_name) ?
|
||||||
umsg.Author.Username :
|
Context.User.Username :
|
||||||
other_name;
|
other_name;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -190,7 +190,7 @@ namespace NadekoBot.Modules.ClashOfClans
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task ClaimFinish1(IUserMessage umsg, int number, int baseNumber = 0)
|
public async Task ClaimFinish1(IUserMessage umsg, int number, int baseNumber = 0)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
await FinishClaim(umsg, number, baseNumber - 1, 1);
|
await FinishClaim(umsg, number, baseNumber - 1, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -198,7 +198,7 @@ namespace NadekoBot.Modules.ClashOfClans
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task ClaimFinish2(IUserMessage umsg, int number, int baseNumber = 0)
|
public async Task ClaimFinish2(IUserMessage umsg, int number, int baseNumber = 0)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
await FinishClaim(umsg, number, baseNumber - 1, 2);
|
await FinishClaim(umsg, number, baseNumber - 1, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -206,7 +206,7 @@ namespace NadekoBot.Modules.ClashOfClans
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task ClaimFinish(IUserMessage umsg, int number, int baseNumber = 0)
|
public async Task ClaimFinish(IUserMessage umsg, int number, int baseNumber = 0)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
await FinishClaim(umsg, number, baseNumber - 1);
|
await FinishClaim(umsg, number, baseNumber - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -214,7 +214,7 @@ namespace NadekoBot.Modules.ClashOfClans
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task EndWar(IUserMessage umsg, int number)
|
public async Task EndWar(IUserMessage umsg, int number)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
var warsInfo = GetWarInfo(umsg,number);
|
var warsInfo = GetWarInfo(umsg,number);
|
||||||
if (warsInfo == null)
|
if (warsInfo == null)
|
||||||
@ -235,7 +235,7 @@ namespace NadekoBot.Modules.ClashOfClans
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Unclaim(IUserMessage umsg, int number, [Remainder] string otherName = null)
|
public async Task Unclaim(IUserMessage umsg, int number, [Remainder] string otherName = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
var warsInfo = GetWarInfo(umsg, number);
|
var warsInfo = GetWarInfo(umsg, number);
|
||||||
if (warsInfo == null || warsInfo.Item1.Count == 0)
|
if (warsInfo == null || warsInfo.Item1.Count == 0)
|
||||||
@ -245,7 +245,7 @@ namespace NadekoBot.Modules.ClashOfClans
|
|||||||
}
|
}
|
||||||
var usr =
|
var usr =
|
||||||
string.IsNullOrWhiteSpace(otherName) ?
|
string.IsNullOrWhiteSpace(otherName) ?
|
||||||
umsg.Author.Username :
|
Context.User.Username :
|
||||||
otherName;
|
otherName;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -262,7 +262,7 @@ namespace NadekoBot.Modules.ClashOfClans
|
|||||||
|
|
||||||
private async Task FinishClaim(IUserMessage umsg, int number, int baseNumber, int stars = 3)
|
private async Task FinishClaim(IUserMessage umsg, int number, int baseNumber, int stars = 3)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
var warInfo = GetWarInfo(umsg, number);
|
var warInfo = GetWarInfo(umsg, number);
|
||||||
if (warInfo == null || warInfo.Item1.Count == 0)
|
if (warInfo == null || warInfo.Item1.Count == 0)
|
||||||
{
|
{
|
||||||
@ -274,14 +274,14 @@ namespace NadekoBot.Modules.ClashOfClans
|
|||||||
{
|
{
|
||||||
if (baseNumber == -1)
|
if (baseNumber == -1)
|
||||||
{
|
{
|
||||||
baseNumber = war.FinishClaim(umsg.Author.Username, stars);
|
baseNumber = war.FinishClaim(Context.User.Username, stars);
|
||||||
SaveWar(war);
|
SaveWar(war);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
war.FinishClaim(baseNumber, stars);
|
war.FinishClaim(baseNumber, stars);
|
||||||
}
|
}
|
||||||
await channel.SendConfirmAsync($"❗🔰{umsg.Author.Mention} **DESTROYED** a base #{baseNumber + 1} in a war against {war.ShortPrint()}").ConfigureAwait(false);
|
await channel.SendConfirmAsync($"❗🔰{Context.User.Mention} **DESTROYED** a base #{baseNumber + 1} in a war against {war.ShortPrint()}").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@ -291,7 +291,7 @@ namespace NadekoBot.Modules.ClashOfClans
|
|||||||
|
|
||||||
private static Tuple<List<ClashWar>, int> GetWarInfo(IUserMessage umsg, int num)
|
private static Tuple<List<ClashWar>, int> GetWarInfo(IUserMessage umsg, int num)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
//check if there are any wars
|
//check if there are any wars
|
||||||
List<ClashWar> wars = null;
|
List<ClashWar> wars = null;
|
||||||
ClashWars.TryGetValue(channel.Guild.Id, out wars);
|
ClashWars.TryGetValue(channel.Guild.Id, out wars);
|
||||||
|
@ -33,9 +33,9 @@ namespace NadekoBot.Modules.CustomReactions
|
|||||||
|
|
||||||
public void ClearStats() => ReactionStats.Clear();
|
public void ClearStats() => ReactionStats.Clear();
|
||||||
|
|
||||||
public static async Task<bool> TryExecuteCustomReaction(IUserMessage umsg)
|
public static async Task<bool> TryExecuteCustomReaction()
|
||||||
{
|
{
|
||||||
var channel = umsg.Channel as ITextChannel;
|
var channel = Context.Channel as ITextChannel;
|
||||||
if (channel == null)
|
if (channel == null)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@ -78,15 +78,15 @@ namespace NadekoBot.Modules.CustomReactions
|
|||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
public async Task AddCustReact(IUserMessage imsg, string key, [Remainder] string message)
|
public async Task AddCustReact(IUserMessage imsg, string key, [Remainder] string message)
|
||||||
{
|
{
|
||||||
var channel = imsg.Channel as ITextChannel;
|
var channel = Context.Channel as ITextChannel;
|
||||||
if (string.IsNullOrWhiteSpace(message) || string.IsNullOrWhiteSpace(key))
|
if (string.IsNullOrWhiteSpace(message) || string.IsNullOrWhiteSpace(key))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
key = key.ToLowerInvariant();
|
key = key.ToLowerInvariant();
|
||||||
|
|
||||||
if ((channel == null && !NadekoBot.Credentials.IsOwner(imsg.Author)) || (channel != null && !((IGuildUser)imsg.Author).GuildPermissions.Administrator))
|
if ((channel == null && !NadekoBot.Credentials.IsOwner(Context.User)) || (channel != null && !((IGuildUser)Context.User).GuildPermissions.Administrator))
|
||||||
{
|
{
|
||||||
try { await imsg.Channel.SendErrorAsync("Insufficient permissions. Requires Bot ownership for global custom reactions, and Administrator for guild custom reactions."); } catch { }
|
try { await Context.Channel.SendErrorAsync("Insufficient permissions. Requires Bot ownership for global custom reactions, and Administrator for guild custom reactions."); } catch { }
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -115,19 +115,19 @@ namespace NadekoBot.Modules.CustomReactions
|
|||||||
reactions.Add(cr);
|
reactions.Add(cr);
|
||||||
}
|
}
|
||||||
|
|
||||||
await imsg.Channel.EmbedAsync(new EmbedBuilder().WithColor(NadekoBot.OkColor)
|
await Context.Channel.EmbedAsync(new EmbedBuilder().WithColor(NadekoBot.OkColor)
|
||||||
.WithTitle("New Custom Reaction")
|
.WithTitle("New Custom Reaction")
|
||||||
.WithDescription($"#{cr.Id}")
|
.WithDescription($"#{cr.Id}")
|
||||||
.AddField(efb => efb.WithName("Trigger").WithValue(key))
|
.AddField(efb => efb.WithName("Trigger").WithValue(key))
|
||||||
.AddField(efb => efb.WithName("Response").WithValue(message))
|
.AddField(efb => efb.WithName("Response").WithValue(message))
|
||||||
.Build()).ConfigureAwait(false);
|
).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[Priority(0)]
|
[Priority(0)]
|
||||||
public async Task ListCustReact(IUserMessage imsg, int page = 1)
|
public async Task ListCustReact(IUserMessage imsg, int page = 1)
|
||||||
{
|
{
|
||||||
var channel = imsg.Channel as ITextChannel;
|
var channel = Context.Channel as ITextChannel;
|
||||||
|
|
||||||
if (page < 1 || page > 1000)
|
if (page < 1 || page > 1000)
|
||||||
return;
|
return;
|
||||||
@ -138,9 +138,9 @@ namespace NadekoBot.Modules.CustomReactions
|
|||||||
customReactions = GuildReactions.GetOrAdd(channel.Guild.Id, new ConcurrentHashSet<CustomReaction>());
|
customReactions = GuildReactions.GetOrAdd(channel.Guild.Id, new ConcurrentHashSet<CustomReaction>());
|
||||||
|
|
||||||
if (customReactions == null || !customReactions.Any())
|
if (customReactions == null || !customReactions.Any())
|
||||||
await imsg.Channel.SendErrorAsync("No custom reactions found").ConfigureAwait(false);
|
await Context.Channel.SendErrorAsync("No custom reactions found").ConfigureAwait(false);
|
||||||
else
|
else
|
||||||
await imsg.Channel.SendConfirmAsync(
|
await Context.Channel.SendConfirmAsync(
|
||||||
$"Page {page} of custom reactions:",
|
$"Page {page} of custom reactions:",
|
||||||
string.Join("\n", customReactions.OrderBy(cr => cr.Trigger)
|
string.Join("\n", customReactions.OrderBy(cr => cr.Trigger)
|
||||||
.Skip((page - 1) * 20)
|
.Skip((page - 1) * 20)
|
||||||
@ -158,7 +158,7 @@ namespace NadekoBot.Modules.CustomReactions
|
|||||||
[Priority(1)]
|
[Priority(1)]
|
||||||
public async Task ListCustReact(IUserMessage imsg, All x)
|
public async Task ListCustReact(IUserMessage imsg, All x)
|
||||||
{
|
{
|
||||||
var channel = imsg.Channel as ITextChannel;
|
var channel = Context.Channel as ITextChannel;
|
||||||
|
|
||||||
ConcurrentHashSet<CustomReaction> customReactions;
|
ConcurrentHashSet<CustomReaction> customReactions;
|
||||||
if (channel == null)
|
if (channel == null)
|
||||||
@ -167,7 +167,7 @@ namespace NadekoBot.Modules.CustomReactions
|
|||||||
customReactions = GuildReactions.GetOrAdd(channel.Guild.Id, new ConcurrentHashSet<CustomReaction>());
|
customReactions = GuildReactions.GetOrAdd(channel.Guild.Id, new ConcurrentHashSet<CustomReaction>());
|
||||||
|
|
||||||
if (customReactions == null || !customReactions.Any())
|
if (customReactions == null || !customReactions.Any())
|
||||||
await imsg.Channel.SendErrorAsync("No custom reactions found").ConfigureAwait(false);
|
await Context.Channel.SendErrorAsync("No custom reactions found").ConfigureAwait(false);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var txtStream = await customReactions.GroupBy(cr => cr.Trigger)
|
var txtStream = await customReactions.GroupBy(cr => cr.Trigger)
|
||||||
@ -177,16 +177,16 @@ namespace NadekoBot.Modules.CustomReactions
|
|||||||
.ToStream()
|
.ToStream()
|
||||||
.ConfigureAwait(false);
|
.ConfigureAwait(false);
|
||||||
if (channel == null) // its a private one, just send back
|
if (channel == null) // its a private one, just send back
|
||||||
await imsg.Channel.SendFileAsync(txtStream, "customreactions.txt", "List of all custom reactions").ConfigureAwait(false);
|
await Context.Channel.SendFileAsync(txtStream, "customreactions.txt", "List of all custom reactions").ConfigureAwait(false);
|
||||||
else
|
else
|
||||||
await ((IGuildUser)imsg.Author).SendFileAsync(txtStream, "customreactions.txt", "List of all custom reactions").ConfigureAwait(false);
|
await ((IGuildUser)Context.User).SendFileAsync(txtStream, "customreactions.txt", "List of all custom reactions").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
public async Task ListCustReactG(IUserMessage imsg, int page = 1)
|
public async Task ListCustReactG(IUserMessage imsg, int page = 1)
|
||||||
{
|
{
|
||||||
var channel = imsg.Channel as ITextChannel;
|
var channel = Context.Channel as ITextChannel;
|
||||||
if (page < 1 || page > 10000)
|
if (page < 1 || page > 10000)
|
||||||
return;
|
return;
|
||||||
ConcurrentHashSet<CustomReaction> customReactions;
|
ConcurrentHashSet<CustomReaction> customReactions;
|
||||||
@ -196,9 +196,9 @@ namespace NadekoBot.Modules.CustomReactions
|
|||||||
customReactions = GuildReactions.GetOrAdd(channel.Guild.Id, new ConcurrentHashSet<CustomReaction>());
|
customReactions = GuildReactions.GetOrAdd(channel.Guild.Id, new ConcurrentHashSet<CustomReaction>());
|
||||||
|
|
||||||
if (customReactions == null || !customReactions.Any())
|
if (customReactions == null || !customReactions.Any())
|
||||||
await imsg.Channel.SendErrorAsync("No custom reactions found").ConfigureAwait(false);
|
await Context.Channel.SendErrorAsync("No custom reactions found").ConfigureAwait(false);
|
||||||
else
|
else
|
||||||
await imsg.Channel.SendConfirmAsync($"Page {page} of custom reactions (grouped):",
|
await Context.Channel.SendConfirmAsync($"Page {page} of custom reactions (grouped):",
|
||||||
string.Join("\r\n", customReactions
|
string.Join("\r\n", customReactions
|
||||||
.GroupBy(cr => cr.Trigger)
|
.GroupBy(cr => cr.Trigger)
|
||||||
.OrderBy(cr => cr.Key)
|
.OrderBy(cr => cr.Key)
|
||||||
@ -211,7 +211,7 @@ namespace NadekoBot.Modules.CustomReactions
|
|||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
public async Task ShowCustReact(IUserMessage imsg, int id)
|
public async Task ShowCustReact(IUserMessage imsg, int id)
|
||||||
{
|
{
|
||||||
var channel = imsg.Channel as ITextChannel;
|
var channel = Context.Channel as ITextChannel;
|
||||||
|
|
||||||
ConcurrentHashSet<CustomReaction> customReactions;
|
ConcurrentHashSet<CustomReaction> customReactions;
|
||||||
if (channel == null)
|
if (channel == null)
|
||||||
@ -222,25 +222,25 @@ namespace NadekoBot.Modules.CustomReactions
|
|||||||
var found = customReactions.FirstOrDefault(cr => cr.Id == id);
|
var found = customReactions.FirstOrDefault(cr => cr.Id == id);
|
||||||
|
|
||||||
if (found == null)
|
if (found == null)
|
||||||
await imsg.Channel.SendErrorAsync("No custom reaction found with that id.").ConfigureAwait(false);
|
await Context.Channel.SendErrorAsync("No custom reaction found with that id.").ConfigureAwait(false);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
await imsg.Channel.EmbedAsync(new EmbedBuilder().WithColor(NadekoBot.OkColor)
|
await Context.Channel.EmbedAsync(new EmbedBuilder().WithColor(NadekoBot.OkColor)
|
||||||
.WithDescription($"#{id}")
|
.WithDescription($"#{id}")
|
||||||
.AddField(efb => efb.WithName("Trigger").WithValue(found.Trigger))
|
.AddField(efb => efb.WithName("Trigger").WithValue(found.Trigger))
|
||||||
.AddField(efb => efb.WithName("Response").WithValue(found.Response + "\n```css\n" + found.Response + "```"))
|
.AddField(efb => efb.WithName("Response").WithValue(found.Response + "\n```css\n" + found.Response + "```"))
|
||||||
.Build()).ConfigureAwait(false);
|
).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
public async Task DelCustReact(IUserMessage imsg, int id)
|
public async Task DelCustReact(IUserMessage imsg, int id)
|
||||||
{
|
{
|
||||||
var channel = imsg.Channel as ITextChannel;
|
var channel = Context.Channel as ITextChannel;
|
||||||
|
|
||||||
if ((channel == null && !NadekoBot.Credentials.IsOwner(imsg.Author)) || (channel != null && !((IGuildUser)imsg.Author).GuildPermissions.Administrator))
|
if ((channel == null && !NadekoBot.Credentials.IsOwner(Context.User)) || (channel != null && !((IGuildUser)Context.User).GuildPermissions.Administrator))
|
||||||
{
|
{
|
||||||
try { await imsg.Channel.SendErrorAsync("Insufficient permissions. Requires Bot ownership for global custom reactions, and Administrator for guild custom reactions."); } catch { }
|
try { await Context.Channel.SendErrorAsync("Insufficient permissions. Requires Bot ownership for global custom reactions, and Administrator for guild custom reactions."); } catch { }
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -269,9 +269,9 @@ namespace NadekoBot.Modules.CustomReactions
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (success)
|
if (success)
|
||||||
await imsg.Channel.SendConfirmAsync("Deleted custom reaction", toDelete.ToString()).ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync("Deleted custom reaction", toDelete.ToString()).ConfigureAwait(false);
|
||||||
else
|
else
|
||||||
await imsg.Channel.SendErrorAsync("Failed to find that custom reaction.").ConfigureAwait(false);
|
await Context.Channel.SendErrorAsync("Failed to find that custom reaction.").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
@ -280,18 +280,18 @@ namespace NadekoBot.Modules.CustomReactions
|
|||||||
if (string.IsNullOrWhiteSpace(trigger))
|
if (string.IsNullOrWhiteSpace(trigger))
|
||||||
{
|
{
|
||||||
ClearStats();
|
ClearStats();
|
||||||
await imsg.Channel.SendConfirmAsync($"Custom reaction stats cleared.").ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync($"Custom reaction stats cleared.").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
uint throwaway;
|
uint throwaway;
|
||||||
if (ReactionStats.TryRemove(trigger, out throwaway))
|
if (ReactionStats.TryRemove(trigger, out throwaway))
|
||||||
{
|
{
|
||||||
await imsg.Channel.SendConfirmAsync($"Stats cleared for `{trigger}` custom reaction.").ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync($"Stats cleared for `{trigger}` custom reaction.").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
await imsg.Channel.SendErrorAsync("No stats for that trigger found, no action taken.").ConfigureAwait(false);
|
await Context.Channel.SendErrorAsync("No stats for that trigger found, no action taken.").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -301,12 +301,12 @@ namespace NadekoBot.Modules.CustomReactions
|
|||||||
{
|
{
|
||||||
if (page < 1)
|
if (page < 1)
|
||||||
return;
|
return;
|
||||||
await imsg.Channel.EmbedAsync(ReactionStats.OrderByDescending(x => x.Value)
|
await Context.Channel.EmbedAsync(ReactionStats.OrderByDescending(x => x.Value)
|
||||||
.Skip((page - 1)*9)
|
.Skip((page - 1)*9)
|
||||||
.Take(9)
|
.Take(9)
|
||||||
.Aggregate(new EmbedBuilder().WithColor(NadekoBot.OkColor).WithTitle($"Custom Reaction stats page #{page}"),
|
.Aggregate(new EmbedBuilder().WithColor(NadekoBot.OkColor).WithTitle($"Custom Reaction stats page #{page}"),
|
||||||
(agg, cur) => agg.AddField(efb => efb.WithName(cur.Key).WithValue(cur.Value.ToString()).WithIsInline(true)))
|
(agg, cur) => agg.AddField(efb => efb.WithName(cur.Key).WithValue(cur.Value.ToString()).WithIsInline(true)))
|
||||||
.Build())
|
)
|
||||||
.ConfigureAwait(false);
|
.ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,7 @@ namespace NadekoBot.Modules.CustomReactions
|
|||||||
|
|
||||||
public static Dictionary<string, Func<IUserMessage, string>> placeholders = new Dictionary<string, Func<IUserMessage, string>>()
|
public static Dictionary<string, Func<IUserMessage, string>> placeholders = new Dictionary<string, Func<IUserMessage, string>>()
|
||||||
{
|
{
|
||||||
{"%mention%", (ctx) => { return $"<@{NadekoBot.Client.GetCurrentUser().Id}>"; } },
|
{"%mention%", (ctx) => { return $"<@{NadekoBot.Client.CurrentUser().Id}>"; } },
|
||||||
{"%user%", (ctx) => { return ctx.Author.Mention; } },
|
{"%user%", (ctx) => { return ctx.Author.Mention; } },
|
||||||
{"%rnduser%", (ctx) => {
|
{"%rnduser%", (ctx) => {
|
||||||
var ch = ctx.Channel as ITextChannel;
|
var ch = ctx.Channel as ITextChannel;
|
||||||
|
@ -4,7 +4,7 @@ using NLog;
|
|||||||
|
|
||||||
namespace NadekoBot.Modules
|
namespace NadekoBot.Modules
|
||||||
{
|
{
|
||||||
public class DiscordModule
|
public class DiscordModule : ModuleBase
|
||||||
{
|
{
|
||||||
protected Logger _log { get; }
|
protected Logger _log { get; }
|
||||||
protected string _prefix { get; }
|
protected string _prefix { get; }
|
||||||
|
@ -22,9 +22,9 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Race(IUserMessage umsg)
|
public async Task Race()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
var ar = new AnimalRace(channel.Guild.Id, channel);
|
var ar = new AnimalRace(channel.Guild.Id, channel);
|
||||||
|
|
||||||
@ -36,7 +36,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task JoinRace(IUserMessage umsg, int amount = 0)
|
public async Task JoinRace(IUserMessage umsg, int amount = 0)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
if (amount < 0)
|
if (amount < 0)
|
||||||
amount = 0;
|
amount = 0;
|
||||||
@ -48,7 +48,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
await channel.SendErrorAsync("No race exists on this server");
|
await channel.SendErrorAsync("No race exists on this server");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
await ar.JoinRace(umsg.Author as IGuildUser, amount);
|
await ar.JoinRace(Context.User as IGuildUser, amount);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class AnimalRace
|
public class AnimalRace
|
||||||
@ -199,7 +199,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
var msg = imsg as IUserMessage;
|
var msg = imsg as IUserMessage;
|
||||||
if (msg == null)
|
if (msg == null)
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
if (msg.IsAuthor() || !(imsg.Channel is ITextChannel) || imsg.Channel != raceChannel)
|
if (msg.IsAuthor() || !(Context.Channel is ITextChannel) || Context.Channel != raceChannel)
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
messagesSinceGameStarted++;
|
messagesSinceGameStarted++;
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
|
@ -22,9 +22,9 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Roll(IUserMessage umsg)
|
public async Task Roll()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
if (channel == null)
|
if (channel == null)
|
||||||
return;
|
return;
|
||||||
var rng = new NadekoRandom();
|
var rng = new NadekoRandom();
|
||||||
@ -44,7 +44,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
catch { return new MemoryStream(); }
|
catch { return new MemoryStream(); }
|
||||||
});
|
});
|
||||||
|
|
||||||
await channel.SendFileAsync(imageStream, "dice.png", $"{umsg.Author.Mention} rolled " + Format.Code(gen.ToString())).ConfigureAwait(false);
|
await channel.SendFileAsync(imageStream, "dice.png", $"{Context.User.Mention} rolled " + Format.Code(gen.ToString())).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
//todo merge into internallDndRoll and internalRoll
|
//todo merge into internallDndRoll and internalRoll
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
@ -52,7 +52,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
[Priority(1)]
|
[Priority(1)]
|
||||||
public async Task Roll(IUserMessage umsg, string arg)
|
public async Task Roll(IUserMessage umsg, string arg)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
if (channel == null)
|
if (channel == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -78,7 +78,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
arr[i] = rng.Next(1, n2 + 1) + add - sub;
|
arr[i] = rng.Next(1, n2 + 1) + add - sub;
|
||||||
}
|
}
|
||||||
var elemCnt = 0;
|
var elemCnt = 0;
|
||||||
await channel.SendConfirmAsync($"{umsg.Author.Mention} rolled {n1} {(n1 == 1 ? "die" : "dice")} `1 to {n2}` +`{add}` -`{sub}`.\n`Result:` " + string.Join(", ", (ordered ? arr.OrderBy(x => x).AsEnumerable() : arr).Select(x => elemCnt++ % 2 == 0 ? $"**{x}**" : x.ToString()))).ConfigureAwait(false);
|
await channel.SendConfirmAsync($"{Context.User.Mention} rolled {n1} {(n1 == 1 ? "die" : "dice")} `1 to {n2}` +`{add}` -`{sub}`.\n`Result:` " + string.Join(", ", (ordered ? arr.OrderBy(x => x).AsEnumerable() : arr).Select(x => elemCnt++ % 2 == 0 ? $"**{x}**" : x.ToString()))).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -88,7 +88,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
[Priority(0)]
|
[Priority(0)]
|
||||||
public async Task Roll(IUserMessage umsg, int num)
|
public async Task Roll(IUserMessage umsg, int num)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
if (channel == null)
|
if (channel == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -134,14 +134,14 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
var ms = new MemoryStream();
|
var ms = new MemoryStream();
|
||||||
bitmap.SaveAsPng(ms);
|
bitmap.SaveAsPng(ms);
|
||||||
ms.Position = 0;
|
ms.Position = 0;
|
||||||
await channel.SendFileAsync(ms, "dice.png", $"{umsg.Author.Mention} rolled {values.Count} {(values.Count == 1 ? "die" : "dice")}. Total: **{values.Sum()}** Average: **{(values.Sum() / (1.0f * values.Count)).ToString("N2")}**").ConfigureAwait(false);
|
await channel.SendFileAsync(ms, "dice.png", $"{Context.User.Mention} rolled {values.Count} {(values.Count == 1 ? "die" : "dice")}. Total: **{values.Sum()}** Average: **{(values.Sum() / (1.0f * values.Count)).ToString("N2")}**").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Rolluo(IUserMessage umsg, string arg)
|
public async Task Rolluo(IUserMessage umsg, string arg)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
if (channel == null)
|
if (channel == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -167,7 +167,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
arr[i] = rng.Next(1, n2 + 1) + add - sub;
|
arr[i] = rng.Next(1, n2 + 1) + add - sub;
|
||||||
}
|
}
|
||||||
var elemCnt = 0;
|
var elemCnt = 0;
|
||||||
await channel.SendConfirmAsync($"{umsg.Author.Mention} rolled {n1} {(n1 == 1 ? "die" : "dice")} `1 to {n2}` +`{add}` -`{sub}`.\n`Result:` " + string.Join(", ", (ordered ? arr.OrderBy(x => x).AsEnumerable() : arr).Select(x => elemCnt++ % 2 == 0 ? $"**{x}**" : x.ToString()))).ConfigureAwait(false);
|
await channel.SendConfirmAsync($"{Context.User.Mention} rolled {n1} {(n1 == 1 ? "die" : "dice")} `1 to {n2}` +`{add}` -`{sub}`.\n`Result:` " + string.Join(", ", (ordered ? arr.OrderBy(x => x).AsEnumerable() : arr).Select(x => elemCnt++ % 2 == 0 ? $"**{x}**" : x.ToString()))).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -176,7 +176,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Rolluo(IUserMessage umsg, int num)
|
public async Task Rolluo(IUserMessage umsg, int num)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
if (channel == null)
|
if (channel == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -222,14 +222,14 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
var ms = new MemoryStream();
|
var ms = new MemoryStream();
|
||||||
bitmap.SaveAsPng(ms);
|
bitmap.SaveAsPng(ms);
|
||||||
ms.Position = 0;
|
ms.Position = 0;
|
||||||
await channel.SendFileAsync(ms, "dice.png", $"{umsg.Author.Mention} rolled {values.Count} {(values.Count == 1 ? "die" : "dice")}. Total: **{values.Sum()}** Average: **{(values.Sum() / (1.0f * values.Count)).ToString("N2")}**").ConfigureAwait(false);
|
await channel.SendFileAsync(ms, "dice.png", $"{Context.User.Mention} rolled {values.Count} {(values.Count == 1 ? "die" : "dice")}. Total: **{values.Sum()}** Average: **{(values.Sum() / (1.0f * values.Count)).ToString("N2")}**").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task NRoll(IUserMessage umsg, [Remainder] string range)
|
public async Task NRoll(IUserMessage umsg, [Remainder] string range)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -249,7 +249,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
rolled = new NadekoRandom().Next(0, int.Parse(range) + 1);
|
rolled = new NadekoRandom().Next(0, int.Parse(range) + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
await channel.SendConfirmAsync($"{umsg.Author.Mention} rolled **{rolled}**.").ConfigureAwait(false);
|
await channel.SendConfirmAsync($"{Context.User.Mention} rolled **{rolled}**.").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
@ -31,9 +31,9 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Draw(IUserMessage msg, int num = 1)
|
public async Task Draw(int num = 1)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)msg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
var cards = AllDecks.GetOrAdd(channel.Guild, (s) => new Cards());
|
var cards = AllDecks.GetOrAdd(channel.Guild, (s) => new Cards());
|
||||||
var images = new List<Image>();
|
var images = new List<Image>();
|
||||||
var cardObjects = new List<Cards.Card>();
|
var cardObjects = new List<Cards.Card>();
|
||||||
@ -54,7 +54,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
images.Merge().SaveAsPng(bitmapStream);
|
images.Merge().SaveAsPng(bitmapStream);
|
||||||
bitmapStream.Position = 0;
|
bitmapStream.Position = 0;
|
||||||
//todo CARD NAMES?
|
//todo CARD NAMES?
|
||||||
var toSend = $"{msg.Author.Mention}";
|
var toSend = $"{Context.User.Mention}";
|
||||||
if (cardObjects.Count == 5)
|
if (cardObjects.Count == 5)
|
||||||
toSend += $" drew `{Cards.GetHandValue(cardObjects)}`";
|
toSend += $" drew `{Cards.GetHandValue(cardObjects)}`";
|
||||||
|
|
||||||
@ -63,9 +63,9 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task ShuffleDeck(IUserMessage imsg)
|
public async Task ShuffleDeck()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
AllDecks.AddOrUpdate(channel.Guild,
|
AllDecks.AddOrUpdate(channel.Guild,
|
||||||
(g) => new Cards(),
|
(g) => new Cards(),
|
||||||
|
@ -23,13 +23,13 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Flip(IUserMessage imsg, int count = 1)
|
public async Task Flip(IUserMessage imsg, int count = 1)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
if (count == 1)
|
if (count == 1)
|
||||||
{
|
{
|
||||||
if (rng.Next(0, 2) == 1)
|
if (rng.Next(0, 2) == 1)
|
||||||
await channel.SendFileAsync(headsPath, $"{imsg.Author.Mention} flipped " + Format.Code("Heads") + ".").ConfigureAwait(false);
|
await channel.SendFileAsync(headsPath, $"{Context.User.Mention} flipped " + Format.Code("Heads") + ".").ConfigureAwait(false);
|
||||||
else
|
else
|
||||||
await channel.SendFileAsync(tailsPath, $"{imsg.Author.Mention} flipped " + Format.Code("Tails") + ".").ConfigureAwait(false);
|
await channel.SendFileAsync(tailsPath, $"{Context.User.Mention} flipped " + Format.Code("Tails") + ".").ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (count > 10 || count < 1)
|
if (count > 10 || count < 1)
|
||||||
@ -51,8 +51,8 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Betflip(IUserMessage umsg, int amount, string guess)
|
public async Task Betflip(IUserMessage umsg, int amount, string guess)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
var guildUser = (IGuildUser)umsg.Author;
|
var guildUser = (IGuildUser)Context.User;
|
||||||
var guessStr = guess.Trim().ToUpperInvariant();
|
var guessStr = guess.Trim().ToUpperInvariant();
|
||||||
if (guessStr != "H" && guessStr != "T" && guessStr != "HEADS" && guessStr != "TAILS")
|
if (guessStr != "H" && guessStr != "T" && guessStr != "HEADS" && guessStr != "TAILS")
|
||||||
return;
|
return;
|
||||||
@ -67,12 +67,12 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
long userFlowers;
|
long userFlowers;
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
{
|
{
|
||||||
userFlowers = uow.Currency.GetOrCreate(umsg.Author.Id).Amount;
|
userFlowers = uow.Currency.GetOrCreate(Context.User.Id).Amount;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (userFlowers < amount)
|
if (userFlowers < amount)
|
||||||
{
|
{
|
||||||
await channel.SendErrorAsync($"{umsg.Author.Mention} You don't have enough {Gambling.CurrencyPluralName}. You only have {userFlowers}{Gambling.CurrencySign}.").ConfigureAwait(false);
|
await channel.SendErrorAsync($"{Context.User.Mention} You don't have enough {Gambling.CurrencyPluralName}. You only have {userFlowers}{Gambling.CurrencySign}.").ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -97,12 +97,12 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
if (isHeads == result)
|
if (isHeads == result)
|
||||||
{
|
{
|
||||||
var toWin = (int)Math.Round(amount * 1.8);
|
var toWin = (int)Math.Round(amount * 1.8);
|
||||||
str = $"{umsg.Author.Mention}`You guessed it!` You won {toWin}{Gambling.CurrencySign}";
|
str = $"{Context.User.Mention}`You guessed it!` You won {toWin}{Gambling.CurrencySign}";
|
||||||
await CurrencyHandler.AddCurrencyAsync((IGuildUser)umsg.Author, "Betflip Gamble", toWin, false).ConfigureAwait(false);
|
await CurrencyHandler.AddCurrencyAsync((IGuildUser)Context.User, "Betflip Gamble", toWin, false).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
str = $"{umsg.Author.Mention}`Better luck next time.`";
|
str = $"{Context.User.Mention}`Better luck next time.`";
|
||||||
}
|
}
|
||||||
|
|
||||||
await channel.SendFileAsync(imgPathToSend, str).ConfigureAwait(false);
|
await channel.SendFileAsync(imgPathToSend, str).ConfigureAwait(false);
|
||||||
|
@ -44,7 +44,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Raffle(IUserMessage umsg, [Remainder] IRole role = null)
|
public async Task Raffle(IUserMessage umsg, [Remainder] IRole role = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
role = role ?? channel.Guild.EveryoneRole;
|
role = role ?? channel.Guild.EveryoneRole;
|
||||||
|
|
||||||
@ -58,9 +58,9 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
[Priority(0)]
|
[Priority(0)]
|
||||||
public async Task Cash(IUserMessage umsg, [Remainder] IUser user = null)
|
public async Task Cash(IUserMessage umsg, [Remainder] IUser user = null)
|
||||||
{
|
{
|
||||||
var channel = umsg.Channel;
|
var channel = Context.Channel;
|
||||||
|
|
||||||
user = user ?? umsg.Author;
|
user = user ?? Context.User;
|
||||||
|
|
||||||
await channel.SendConfirmAsync($"{user.Username} has {GetCurrency(user.Id)} {CurrencySign}").ConfigureAwait(false);
|
await channel.SendConfirmAsync($"{user.Username} has {GetCurrency(user.Id)} {CurrencySign}").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
@ -69,7 +69,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
[Priority(1)]
|
[Priority(1)]
|
||||||
public async Task Cash(IUserMessage umsg, ulong userId)
|
public async Task Cash(IUserMessage umsg, ulong userId)
|
||||||
{
|
{
|
||||||
var channel = umsg.Channel;
|
var channel = Context.Channel;
|
||||||
|
|
||||||
await channel.SendConfirmAsync($"`{userId}` has {GetCurrency(userId)} {CurrencySign}").ConfigureAwait(false);
|
await channel.SendConfirmAsync($"`{userId}` has {GetCurrency(userId)} {CurrencySign}").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
@ -78,17 +78,17 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Give(IUserMessage umsg, long amount, [Remainder] IGuildUser receiver)
|
public async Task Give(IUserMessage umsg, long amount, [Remainder] IGuildUser receiver)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
if (amount <= 0 || umsg.Author.Id == receiver.Id)
|
if (amount <= 0 || Context.User.Id == receiver.Id)
|
||||||
return;
|
return;
|
||||||
var success = await CurrencyHandler.RemoveCurrencyAsync((IGuildUser)umsg.Author, $"Gift to {receiver.Username} ({receiver.Id}).", amount, true).ConfigureAwait(false);
|
var success = await CurrencyHandler.RemoveCurrencyAsync((IGuildUser)Context.User, $"Gift to {receiver.Username} ({receiver.Id}).", amount, true).ConfigureAwait(false);
|
||||||
if (!success)
|
if (!success)
|
||||||
{
|
{
|
||||||
await channel.SendErrorAsync($"{umsg.Author.Mention} You don't have enough {Gambling.CurrencyPluralName}.").ConfigureAwait(false);
|
await channel.SendErrorAsync($"{Context.User.Mention} You don't have enough {Gambling.CurrencyPluralName}.").ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
await CurrencyHandler.AddCurrencyAsync(receiver, $"Gift from {umsg.Author.Username} ({umsg.Author.Id}).", amount, true).ConfigureAwait(false);
|
await CurrencyHandler.AddCurrencyAsync(receiver, $"Gift from {Context.User.Username} ({Context.User.Id}).", amount, true).ConfigureAwait(false);
|
||||||
await channel.SendConfirmAsync($"{umsg.Author.Mention} successfully sent {amount} {(amount == 1 ? Gambling.CurrencyName : Gambling.CurrencyPluralName)} to {receiver.Mention}!").ConfigureAwait(false);
|
await channel.SendConfirmAsync($"{Context.User.Mention} successfully sent {amount} {(amount == 1 ? Gambling.CurrencyName : Gambling.CurrencyPluralName)} to {receiver.Mention}!").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
@ -104,14 +104,14 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
[Priority(1)]
|
[Priority(1)]
|
||||||
public async Task Award(IUserMessage umsg, int amount, ulong usrId)
|
public async Task Award(IUserMessage umsg, int amount, ulong usrId)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
if (amount <= 0)
|
if (amount <= 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
await CurrencyHandler.AddCurrencyAsync(usrId, $"Awarded by bot owner. ({umsg.Author.Username}/{umsg.Author.Id})", amount).ConfigureAwait(false);
|
await CurrencyHandler.AddCurrencyAsync(usrId, $"Awarded by bot owner. ({Context.User.Username}/{Context.User.Id})", amount).ConfigureAwait(false);
|
||||||
|
|
||||||
await channel.SendConfirmAsync($"{umsg.Author.Mention} successfully awarded {amount} {(amount == 1 ? Gambling.CurrencyName : Gambling.CurrencyPluralName)} to <@{usrId}>!").ConfigureAwait(false);
|
await channel.SendConfirmAsync($"{Context.User.Mention} successfully awarded {amount} {(amount == 1 ? Gambling.CurrencyName : Gambling.CurrencyPluralName)} to <@{usrId}>!").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
@ -120,12 +120,12 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
[Priority(0)]
|
[Priority(0)]
|
||||||
public async Task Award(IUserMessage umsg, int amount, [Remainder] IRole role)
|
public async Task Award(IUserMessage umsg, int amount, [Remainder] IRole role)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
var users = channel.Guild.GetUsers()
|
var users = channel.Guild.GetUsers()
|
||||||
.Where(u => u.Roles.Contains(role))
|
.Where(u => u.Roles.Contains(role))
|
||||||
.ToList();
|
.ToList();
|
||||||
await Task.WhenAll(users.Select(u => CurrencyHandler.AddCurrencyAsync(u.Id,
|
await Task.WhenAll(users.Select(u => CurrencyHandler.AddCurrencyAsync(u.Id,
|
||||||
$"Awarded by bot owner to **{role.Name}** role. ({umsg.Author.Username}/{umsg.Author.Id})",
|
$"Awarded by bot owner to **{role.Name}** role. ({Context.User.Username}/{Context.User.Id})",
|
||||||
amount)))
|
amount)))
|
||||||
.ConfigureAwait(false);
|
.ConfigureAwait(false);
|
||||||
|
|
||||||
@ -139,14 +139,14 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
[OwnerOnly]
|
[OwnerOnly]
|
||||||
public async Task Take(IUserMessage umsg, long amount, [Remainder] IGuildUser user)
|
public async Task Take(IUserMessage umsg, long amount, [Remainder] IGuildUser user)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
if (amount <= 0)
|
if (amount <= 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if(await CurrencyHandler.RemoveCurrencyAsync(user, $"Taken by bot owner.({umsg.Author.Username}/{umsg.Author.Id})", amount, true).ConfigureAwait(false))
|
if(await CurrencyHandler.RemoveCurrencyAsync(user, $"Taken by bot owner.({Context.User.Username}/{Context.User.Id})", amount, true).ConfigureAwait(false))
|
||||||
await channel.SendConfirmAsync($"{umsg.Author.Mention} successfully took {amount} {(amount == 1? Gambling.CurrencyName : Gambling.CurrencyPluralName)} from {user}!").ConfigureAwait(false);
|
await channel.SendConfirmAsync($"{Context.User.Mention} successfully took {amount} {(amount == 1? Gambling.CurrencyName : Gambling.CurrencyPluralName)} from {user}!").ConfigureAwait(false);
|
||||||
else
|
else
|
||||||
await channel.SendErrorAsync($"{umsg.Author.Mention} was unable to take {amount} {(amount == 1 ? Gambling.CurrencyName : Gambling.CurrencyPluralName)} from {user} because the user doesn't have that much {Gambling.CurrencyPluralName}!").ConfigureAwait(false);
|
await channel.SendErrorAsync($"{Context.User.Mention} was unable to take {amount} {(amount == 1 ? Gambling.CurrencyName : Gambling.CurrencyPluralName)} from {user} because the user doesn't have that much {Gambling.CurrencyPluralName}!").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -155,31 +155,31 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
[OwnerOnly]
|
[OwnerOnly]
|
||||||
public async Task Take(IUserMessage umsg, long amount, [Remainder] ulong usrId)
|
public async Task Take(IUserMessage umsg, long amount, [Remainder] ulong usrId)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
if (amount <= 0)
|
if (amount <= 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if(await CurrencyHandler.RemoveCurrencyAsync(usrId, $"Taken by bot owner.({umsg.Author.Username}/{umsg.Author.Id})", amount).ConfigureAwait(false))
|
if(await CurrencyHandler.RemoveCurrencyAsync(usrId, $"Taken by bot owner.({Context.User.Username}/{Context.User.Id})", amount).ConfigureAwait(false))
|
||||||
await channel.SendConfirmAsync($"{umsg.Author.Mention} successfully took {amount} {(amount == 1 ? Gambling.CurrencyName : Gambling.CurrencyPluralName)} from <@{usrId}>!").ConfigureAwait(false);
|
await channel.SendConfirmAsync($"{Context.User.Mention} successfully took {amount} {(amount == 1 ? Gambling.CurrencyName : Gambling.CurrencyPluralName)} from <@{usrId}>!").ConfigureAwait(false);
|
||||||
else
|
else
|
||||||
await channel.SendErrorAsync($"{umsg.Author.Mention} was unable to take {amount} {(amount == 1 ? Gambling.CurrencyName : Gambling.CurrencyPluralName)} from `{usrId}` because the user doesn't have that much {Gambling.CurrencyPluralName}!").ConfigureAwait(false);
|
await channel.SendErrorAsync($"{Context.User.Mention} was unable to take {amount} {(amount == 1 ? Gambling.CurrencyName : Gambling.CurrencyPluralName)} from `{usrId}` because the user doesn't have that much {Gambling.CurrencyPluralName}!").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task BetRoll(IUserMessage umsg, long amount)
|
public async Task BetRoll(IUserMessage umsg, long amount)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
if (amount < 1)
|
if (amount < 1)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var guildUser = (IGuildUser)umsg.Author;
|
var guildUser = (IGuildUser)Context.User;
|
||||||
|
|
||||||
long userFlowers;
|
long userFlowers;
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
{
|
{
|
||||||
userFlowers = uow.Currency.GetOrCreate(umsg.Author.Id).Amount;
|
userFlowers = uow.Currency.GetOrCreate(Context.User.Id).Amount;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (userFlowers < amount)
|
if (userFlowers < amount)
|
||||||
@ -217,9 +217,9 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Leaderboard(IUserMessage umsg)
|
public async Task Leaderboard()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
IEnumerable<Currency> richest = new List<Currency>();
|
IEnumerable<Currency> richest = new List<Currency>();
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
|
@ -41,8 +41,8 @@ namespace NadekoBot.Modules.Games
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async Task<bool> TryAsk(IUserMessage msg) {
|
public static async Task<bool> TryAsk() {
|
||||||
var channel = msg.Channel as ITextChannel;
|
var channel = Context.Channel as ITextChannel;
|
||||||
|
|
||||||
if (channel == null)
|
if (channel == null)
|
||||||
return false;
|
return false;
|
||||||
@ -51,7 +51,7 @@ namespace NadekoBot.Modules.Games
|
|||||||
if (!CleverbotGuilds.TryGetValue(channel.Guild.Id, out cleverbot))
|
if (!CleverbotGuilds.TryGetValue(channel.Guild.Id, out cleverbot))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
var nadekoId = NadekoBot.Client.GetCurrentUser().Id;
|
var nadekoId = NadekoBot.Client.CurrentUser().Id;
|
||||||
var normalMention = $"<@{nadekoId}> ";
|
var normalMention = $"<@{nadekoId}> ";
|
||||||
var nickMention = $"<@!{nadekoId}> ";
|
var nickMention = $"<@!{nadekoId}> ";
|
||||||
string message;
|
string message;
|
||||||
@ -68,26 +68,26 @@ namespace NadekoBot.Modules.Games
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
await msg.Channel.TriggerTypingAsync().ConfigureAwait(false);
|
await Context.Channel.TriggerTypingAsync().ConfigureAwait(false);
|
||||||
|
|
||||||
var response = await cleverbot.Think(message).ConfigureAwait(false);
|
var response = await cleverbot.Think(message).ConfigureAwait(false);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await msg.Channel.SendConfirmAsync(response.SanitizeMentions()).ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync(response.SanitizeMentions()).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
await msg.Channel.SendConfirmAsync(response.SanitizeMentions()).ConfigureAwait(false); // try twice :\
|
await Context.Channel.SendConfirmAsync(response.SanitizeMentions()).ConfigureAwait(false); // try twice :\
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(ChannelPermission.ManageMessages)]
|
[RequireUserPermission(ChannelPermission.ManageMessages)]
|
||||||
public async Task Cleverbot(IUserMessage imsg)
|
public async Task Cleverbot()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
ChatterBotSession throwaway;
|
ChatterBotSession throwaway;
|
||||||
if (CleverbotGuilds.TryRemove(channel.Guild.Id, out throwaway))
|
if (CleverbotGuilds.TryRemove(channel.Guild.Id, out throwaway))
|
||||||
@ -97,7 +97,7 @@ namespace NadekoBot.Modules.Games
|
|||||||
uow.GuildConfigs.SetCleverbotEnabled(channel.Guild.Id, false);
|
uow.GuildConfigs.SetCleverbotEnabled(channel.Guild.Id, false);
|
||||||
await uow.CompleteAsync().ConfigureAwait(false);
|
await uow.CompleteAsync().ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
await channel.SendConfirmAsync($"{imsg.Author.Mention} Disabled cleverbot on this server.").ConfigureAwait(false);
|
await channel.SendConfirmAsync($"{Context.User.Mention} Disabled cleverbot on this server.").ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -112,7 +112,7 @@ namespace NadekoBot.Modules.Games
|
|||||||
await uow.CompleteAsync().ConfigureAwait(false);
|
await uow.CompleteAsync().ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
await channel.SendConfirmAsync($"{imsg.Author.Mention} Enabled cleverbot on this server.").ConfigureAwait(false);
|
await channel.SendConfirmAsync($"{Context.User.Mention} Enabled cleverbot on this server.").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -118,14 +118,14 @@ namespace NadekoBot.Modules.Games.Commands.Hangman
|
|||||||
.AddField(efb => efb.WithName("It was").WithValue(Term.Word))
|
.AddField(efb => efb.WithName("It was").WithValue(Term.Word))
|
||||||
.WithImage(eib => eib.WithUrl(Term.ImageUrl));
|
.WithImage(eib => eib.WithUrl(Term.ImageUrl));
|
||||||
if (Errors >= MaxErrors)
|
if (Errors >= MaxErrors)
|
||||||
await GameChannel.EmbedAsync(embed.WithColor(NadekoBot.ErrorColor).Build()).ConfigureAwait(false);
|
await GameChannel.EmbedAsync(embed.WithColor(NadekoBot.ErrorColor)).ConfigureAwait(false);
|
||||||
else
|
else
|
||||||
await GameChannel.EmbedAsync(embed.WithColor(NadekoBot.OkColor).Build()).ConfigureAwait(false);
|
await GameChannel.EmbedAsync(embed.WithColor(NadekoBot.OkColor)).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Task PotentialGuess(IMessage msg)
|
private Task PotentialGuess(IMessage msg)
|
||||||
{
|
{
|
||||||
if (msg.Channel != GameChannel)
|
if (Context.Channel != GameChannel)
|
||||||
return Task.CompletedTask; // message's channel has to be the same as game's
|
return Task.CompletedTask; // message's channel has to be the same as game's
|
||||||
if (msg.Content.Length != 1) // message must be 1 char long
|
if (msg.Content.Length != 1) // message must be 1 char long
|
||||||
{
|
{
|
||||||
@ -155,7 +155,7 @@ namespace NadekoBot.Modules.Games.Commands.Hangman
|
|||||||
{
|
{
|
||||||
++Errors;
|
++Errors;
|
||||||
if (Errors < MaxErrors)
|
if (Errors < MaxErrors)
|
||||||
await GameChannel.SendErrorAsync("Hangman Game", $"{msg.Author.Mention} Letter `{guess}` has already been used.\n" + ScrambledWord + "\n" + GetHangman()).ConfigureAwait(false);
|
await GameChannel.SendErrorAsync("Hangman Game", $"{Context.User.Mention} Letter `{guess}` has already been used.\n" + ScrambledWord + "\n" + GetHangman()).ConfigureAwait(false);
|
||||||
else
|
else
|
||||||
await End().ConfigureAwait(false);
|
await End().ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
@ -167,19 +167,19 @@ namespace NadekoBot.Modules.Games.Commands.Hangman
|
|||||||
{
|
{
|
||||||
if (GuessedAll)
|
if (GuessedAll)
|
||||||
{
|
{
|
||||||
try { await GameChannel.SendConfirmAsync("Hangman Game", $"{msg.Author.Mention} guessed a letter `{guess}`!").ConfigureAwait(false); } catch { }
|
try { await GameChannel.SendConfirmAsync("Hangman Game", $"{Context.User.Mention} guessed a letter `{guess}`!").ConfigureAwait(false); } catch { }
|
||||||
|
|
||||||
await End().ConfigureAwait(false);
|
await End().ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try { await GameChannel.SendConfirmAsync("Hangman Game", $"{msg.Author.Mention} guessed a letter `{guess}`!\n" + ScrambledWord + "\n" + GetHangman()).ConfigureAwait(false); } catch { }
|
try { await GameChannel.SendConfirmAsync("Hangman Game", $"{Context.User.Mention} guessed a letter `{guess}`!\n" + ScrambledWord + "\n" + GetHangman()).ConfigureAwait(false); } catch { }
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
++Errors;
|
++Errors;
|
||||||
if (Errors < MaxErrors)
|
if (Errors < MaxErrors)
|
||||||
await GameChannel.SendErrorAsync("Hangman Game", $"{msg.Author.Mention} Letter `{guess}` does not exist.\n" + ScrambledWord + "\n" + GetHangman()).ConfigureAwait(false);
|
await GameChannel.SendErrorAsync("Hangman Game", $"{Context.User.Mention} Letter `{guess}` does not exist.\n" + ScrambledWord + "\n" + GetHangman()).ConfigureAwait(false);
|
||||||
else
|
else
|
||||||
await End().ConfigureAwait(false);
|
await End().ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
@ -36,19 +36,19 @@ namespace NadekoBot.Modules.Games
|
|||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
public async Task Hangmanlist(IUserMessage imsg)
|
public async Task Hangmanlist()
|
||||||
{
|
{
|
||||||
await imsg.Channel.SendConfirmAsync(typesStr);
|
await Context.Channel.SendConfirmAsync(typesStr);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
public async Task Hangman(IUserMessage imsg, HangmanTermPool.HangmanTermType type = HangmanTermPool.HangmanTermType.All)
|
public async Task Hangman(IUserMessage imsg, HangmanTermPool.HangmanTermType type = HangmanTermPool.HangmanTermType.All)
|
||||||
{
|
{
|
||||||
var hm = new HangmanGame(imsg.Channel, type);
|
var hm = new HangmanGame(Context.Channel, type);
|
||||||
|
|
||||||
if (!HangmanGames.TryAdd(imsg.Channel.Id, hm))
|
if (!HangmanGames.TryAdd(Context.Channel.Id, hm))
|
||||||
{
|
{
|
||||||
await imsg.Channel.SendErrorAsync("Hangman game already running on this channel.").ConfigureAwait(false);
|
await Context.Channel.SendErrorAsync("Hangman game already running on this channel.").ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -59,7 +59,7 @@ namespace NadekoBot.Modules.Games
|
|||||||
};
|
};
|
||||||
hm.Start();
|
hm.Start();
|
||||||
|
|
||||||
await imsg.Channel.SendConfirmAsync("Hangman game started", hm.ScrambledWord + "\n" + hm.GetHangman() + "\n" + hm.ScrambledWord);
|
await Context.Channel.SendConfirmAsync("Hangman game started", hm.ScrambledWord + "\n" + hm.GetHangman() + "\n" + hm.ScrambledWord);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,7 @@ namespace NadekoBot.Modules.Games
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Leet(IUserMessage umsg, int level, [Remainder] string text = null)
|
public async Task Leet(IUserMessage umsg, int level, [Remainder] string text = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
text = text.Trim();
|
text = text.Trim();
|
||||||
if (string.IsNullOrWhiteSpace(text))
|
if (string.IsNullOrWhiteSpace(text))
|
||||||
|
@ -60,10 +60,10 @@ namespace NadekoBot.Modules.Games
|
|||||||
private static Task PotentialFlowerGeneration(IMessage imsg)
|
private static Task PotentialFlowerGeneration(IMessage imsg)
|
||||||
{
|
{
|
||||||
var msg = imsg as IUserMessage;
|
var msg = imsg as IUserMessage;
|
||||||
if (msg == null || msg.IsAuthor() || msg.Author.IsBot)
|
if (msg == null || msg.IsAuthor() || Context.User.IsBot)
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
|
|
||||||
var channel = imsg.Channel as ITextChannel;
|
var channel = Context.Channel as ITextChannel;
|
||||||
if (channel == null)
|
if (channel == null)
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
|
|
||||||
@ -99,9 +99,9 @@ namespace NadekoBot.Modules.Games
|
|||||||
}
|
}
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Pick(IUserMessage imsg)
|
public async Task Pick()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
if (!channel.Guild.GetCurrentUser().GetPermissions(channel).ManageMessages)
|
if (!channel.Guild.GetCurrentUser().GetPermissions(channel).ManageMessages)
|
||||||
{
|
{
|
||||||
@ -117,8 +117,8 @@ namespace NadekoBot.Modules.Games
|
|||||||
|
|
||||||
await Task.WhenAll(msgs.Select(toDelete => toDelete.DeleteAsync())).ConfigureAwait(false);
|
await Task.WhenAll(msgs.Select(toDelete => toDelete.DeleteAsync())).ConfigureAwait(false);
|
||||||
|
|
||||||
await CurrencyHandler.AddCurrencyAsync((IGuildUser)imsg.Author, "Picked flower(s).", msgs.Count, false).ConfigureAwait(false);
|
await CurrencyHandler.AddCurrencyAsync((IGuildUser)Context.User, "Picked flower(s).", msgs.Count, false).ConfigureAwait(false);
|
||||||
var msg = await channel.SendConfirmAsync($"**{imsg.Author}** picked {msgs.Count}{Gambling.Gambling.CurrencySign}!").ConfigureAwait(false);
|
var msg = await channel.SendConfirmAsync($"**{Context.User}** picked {msgs.Count}{Gambling.Gambling.CurrencySign}!").ConfigureAwait(false);
|
||||||
var t = Task.Run(async () =>
|
var t = Task.Run(async () =>
|
||||||
{
|
{
|
||||||
await Task.Delay(10000).ConfigureAwait(false);
|
await Task.Delay(10000).ConfigureAwait(false);
|
||||||
@ -128,11 +128,11 @@ namespace NadekoBot.Modules.Games
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Plant(IUserMessage imsg)
|
public async Task Plant()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
var removed = await CurrencyHandler.RemoveCurrencyAsync((IGuildUser)imsg.Author, "Planted a flower.", 1, false).ConfigureAwait(false);
|
var removed = await CurrencyHandler.RemoveCurrencyAsync((IGuildUser)Context.User, "Planted a flower.", 1, false).ConfigureAwait(false);
|
||||||
if (!removed)
|
if (!removed)
|
||||||
{
|
{
|
||||||
await channel.SendErrorAsync($"You don't have any {Gambling.Gambling.CurrencyPluralName}.").ConfigureAwait(false);
|
await channel.SendErrorAsync($"You don't have any {Gambling.Gambling.CurrencyPluralName}.").ConfigureAwait(false);
|
||||||
@ -143,7 +143,7 @@ namespace NadekoBot.Modules.Games
|
|||||||
IUserMessage msg;
|
IUserMessage msg;
|
||||||
var vowelFirst = new[] { 'a', 'e', 'i', 'o', 'u' }.Contains(Gambling.Gambling.CurrencyName[0]);
|
var vowelFirst = new[] { 'a', 'e', 'i', 'o', 'u' }.Contains(Gambling.Gambling.CurrencyName[0]);
|
||||||
|
|
||||||
var msgToSend = $"Oh how Nice! **{imsg.Author.Username}** planted {(vowelFirst ? "an" : "a")} {Gambling.Gambling.CurrencyName}. Pick it using {NadekoBot.ModulePrefixes[typeof(Games).Name]}pick";
|
var msgToSend = $"Oh how Nice! **{Context.User.Username}** planted {(vowelFirst ? "an" : "a")} {Gambling.Gambling.CurrencyName}. Pick it using {NadekoBot.ModulePrefixes[typeof(Games).Name]}pick";
|
||||||
if (file == null)
|
if (file == null)
|
||||||
{
|
{
|
||||||
msg = await channel.SendConfirmAsync(Gambling.Gambling.CurrencySign).ConfigureAwait(false);
|
msg = await channel.SendConfirmAsync(Gambling.Gambling.CurrencySign).ConfigureAwait(false);
|
||||||
@ -157,10 +157,10 @@ namespace NadekoBot.Modules.Games
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.ManageMessages)]
|
[RequireUserPermission(GuildPermission.ManageMessages)]
|
||||||
public async Task GenCurrency(IUserMessage imsg)
|
public async Task GenCurrency()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
bool enabled;
|
bool enabled;
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
|
@ -16,22 +16,22 @@ namespace NadekoBot.Modules.Games
|
|||||||
public static ConcurrentDictionary<IGuild, Poll> ActivePolls = new ConcurrentDictionary<IGuild, Poll>();
|
public static ConcurrentDictionary<IGuild, Poll> ActivePolls = new ConcurrentDictionary<IGuild, Poll>();
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequirePermission(GuildPermission.ManageMessages)]
|
[RequireUserPermission(GuildPermission.ManageMessages)]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public Task Poll(IUserMessage umsg, [Remainder] string arg = null)
|
public Task Poll(IUserMessage umsg, [Remainder] string arg = null)
|
||||||
=> InternalStartPoll(umsg, arg, isPublic: false);
|
=> InternalStartPoll(umsg, arg, isPublic: false);
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequirePermission(GuildPermission.ManageMessages)]
|
[RequireUserPermission(GuildPermission.ManageMessages)]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public Task PublicPoll(IUserMessage umsg, [Remainder] string arg = null)
|
public Task PublicPoll(IUserMessage umsg, [Remainder] string arg = null)
|
||||||
=> InternalStartPoll(umsg, arg, isPublic: true);
|
=> InternalStartPoll(umsg, arg, isPublic: true);
|
||||||
|
|
||||||
private async Task InternalStartPoll(IUserMessage umsg, string arg, bool isPublic = false)
|
private async Task InternalStartPoll(IUserMessage umsg, string arg, bool isPublic = false)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
if (!(umsg.Author as IGuildUser).GuildPermissions.ManageChannels)
|
if (!(Context.User as IGuildUser).GuildPermissions.ManageChannels)
|
||||||
return;
|
return;
|
||||||
if (string.IsNullOrWhiteSpace(arg) || !arg.Contains(";"))
|
if (string.IsNullOrWhiteSpace(arg) || !arg.Contains(";"))
|
||||||
return;
|
return;
|
||||||
@ -49,11 +49,11 @@ namespace NadekoBot.Modules.Games
|
|||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequirePermission(GuildPermission.ManageMessages)]
|
[RequireUserPermission(GuildPermission.ManageMessages)]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Pollend(IUserMessage umsg)
|
public async Task Pollend()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
Poll poll;
|
Poll poll;
|
||||||
ActivePolls.TryRemove(channel.Guild, out poll);
|
ActivePolls.TryRemove(channel.Guild, out poll);
|
||||||
@ -75,7 +75,7 @@ namespace NadekoBot.Modules.Games
|
|||||||
public Poll(IUserMessage umsg, string question, IEnumerable<string> enumerable, bool isPublic = false)
|
public Poll(IUserMessage umsg, string question, IEnumerable<string> enumerable, bool isPublic = false)
|
||||||
{
|
{
|
||||||
this.originalMessage = umsg;
|
this.originalMessage = umsg;
|
||||||
this.guild = ((ITextChannel)umsg.Channel).Guild;
|
this.guild = ((ITextChannel)Context.Channel).Guild;
|
||||||
this.question = question;
|
this.question = question;
|
||||||
this.answers = enumerable as string[] ?? enumerable.ToArray();
|
this.answers = enumerable as string[] ?? enumerable.ToArray();
|
||||||
this.isPublic = isPublic;
|
this.isPublic = isPublic;
|
||||||
@ -128,7 +128,7 @@ namespace NadekoBot.Modules.Games
|
|||||||
{
|
{
|
||||||
// has to be a user message
|
// has to be a user message
|
||||||
var msg = imsg as IUserMessage;
|
var msg = imsg as IUserMessage;
|
||||||
if (msg == null || msg.Author.IsBot)
|
if (msg == null || Context.User.IsBot)
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
|
|
||||||
// has to be an integer
|
// has to be an integer
|
||||||
@ -146,32 +146,32 @@ namespace NadekoBot.Modules.Games
|
|||||||
if (isPublic)
|
if (isPublic)
|
||||||
{
|
{
|
||||||
//if public, channel must be the same the poll started in
|
//if public, channel must be the same the poll started in
|
||||||
if (originalMessage.Channel.Id != imsg.Channel.Id)
|
if (originalMessage.Channel.Id != Context.Channel.Id)
|
||||||
return;
|
return;
|
||||||
ch = imsg.Channel;
|
ch = Context.Channel;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//if private, channel must be dm channel
|
//if private, channel must be dm channel
|
||||||
if ((ch = msg.Channel as IDMChannel) == null)
|
if ((ch = Context.Channel as IDMChannel) == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// user must be a member of the guild this poll is in
|
// user must be a member of the guild this poll is in
|
||||||
var guildUsers = await guild.GetUsersAsync().ConfigureAwait(false);
|
var guildUsers = await guild.GetUsersAsync().ConfigureAwait(false);
|
||||||
if (!guildUsers.Any(u => u.Id == imsg.Author.Id))
|
if (!guildUsers.Any(u => u.Id == Context.User.Id))
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//user can vote only once
|
//user can vote only once
|
||||||
if (participants.TryAdd(msg.Author.Id, vote))
|
if (participants.TryAdd(Context.User.Id, vote))
|
||||||
{
|
{
|
||||||
if (!isPublic)
|
if (!isPublic)
|
||||||
{
|
{
|
||||||
await ch.SendConfirmAsync($"Thanks for voting **{msg.Author.Username}**.").ConfigureAwait(false);
|
await ch.SendConfirmAsync($"Thanks for voting **{Context.User.Username}**.").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var toDelete = await ch.SendConfirmAsync($"{msg.Author.Mention} cast their vote.").ConfigureAwait(false);
|
var toDelete = await ch.SendConfirmAsync($"{Context.User.Mention} cast their vote.").ConfigureAwait(false);
|
||||||
await Task.Delay(5000);
|
await Task.Delay(5000);
|
||||||
await toDelete.DeleteAsync().ConfigureAwait(false);
|
await toDelete.DeleteAsync().ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
@ -107,7 +107,7 @@ namespace NadekoBot.Modules.Games
|
|||||||
|
|
||||||
private Task AnswerReceived(IMessage imsg)
|
private Task AnswerReceived(IMessage imsg)
|
||||||
{
|
{
|
||||||
if (imsg.Author.IsBot)
|
if (Context.User.IsBot)
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
var msg = imsg as IUserMessage;
|
var msg = imsg as IUserMessage;
|
||||||
if (msg == null)
|
if (msg == null)
|
||||||
@ -122,16 +122,16 @@ namespace NadekoBot.Modules.Games
|
|||||||
|
|
||||||
var distance = CurrentSentence.LevenshteinDistance(guess);
|
var distance = CurrentSentence.LevenshteinDistance(guess);
|
||||||
var decision = Judge(distance, guess.Length);
|
var decision = Judge(distance, guess.Length);
|
||||||
if (decision && !finishedUserIds.Contains(msg.Author.Id))
|
if (decision && !finishedUserIds.Contains(Context.User.Id))
|
||||||
{
|
{
|
||||||
var wpm = CurrentSentence.Length / WORD_VALUE / sw.Elapsed.Seconds * 60;
|
var wpm = CurrentSentence.Length / WORD_VALUE / sw.Elapsed.Seconds * 60;
|
||||||
finishedUserIds.Add(msg.Author.Id);
|
finishedUserIds.Add(Context.User.Id);
|
||||||
await Extensions.Extensions.EmbedAsync(this.Channel, (Discord.API.Embed)new EmbedBuilder().WithColor((uint)NadekoBot.OkColor)
|
await Extensions.Extensions.EmbedAsync(this.Channel, (Discord.API.Embed)new EmbedBuilder().WithColor((uint)NadekoBot.OkColor)
|
||||||
.WithTitle((string)$"{msg.Author} finished the race!")
|
.WithTitle((string)$"{Context.User} finished the race!")
|
||||||
.AddField(efb => efb.WithName("Place").WithValue($"#{finishedUserIds.Count}").WithIsInline(true))
|
.AddField(efb => efb.WithName("Place").WithValue($"#{finishedUserIds.Count}").WithIsInline(true))
|
||||||
.AddField(efb => efb.WithName("WPM").WithValue($"{wpm:F2} *[{sw.Elapsed.Seconds.ToString()}sec]*").WithIsInline(true))
|
.AddField(efb => efb.WithName("WPM").WithValue($"{wpm:F2} *[{sw.Elapsed.Seconds.ToString()}sec]*").WithIsInline(true))
|
||||||
.AddField(efb => efb.WithName((string)"Errors").WithValue((string)distance.ToString()).WithIsInline((bool)true))
|
.AddField(efb => efb.WithName((string)"Errors").WithValue((string)distance.ToString()).WithIsInline((bool)true))
|
||||||
.Build()).ConfigureAwait(false);
|
).ConfigureAwait(false);
|
||||||
if (finishedUserIds.Count % 4 == 0)
|
if (finishedUserIds.Count % 4 == 0)
|
||||||
{
|
{
|
||||||
await Extensions.Extensions.SendConfirmAsync(this.Channel, (string)$":exclamation: A lot of people finished, here is the text for those still typing:\n\n**{Format.Sanitize((string)CurrentSentence.Replace((string)" ", (string)" \x200B")).SanitizeMentions()}**").ConfigureAwait(false);
|
await Extensions.Extensions.SendConfirmAsync(this.Channel, (string)$":exclamation: A lot of people finished, here is the text for those still typing:\n\n**{Format.Sanitize((string)CurrentSentence.Replace((string)" ", (string)" \x200B")).SanitizeMentions()}**").ConfigureAwait(false);
|
||||||
@ -168,9 +168,9 @@ namespace NadekoBot.Modules.Games
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task TypeStart(IUserMessage msg)
|
public async Task TypeStart()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)msg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
var game = RunningContests.GetOrAdd(channel.Guild.Id, id => new TypingGame(channel));
|
var game = RunningContests.GetOrAdd(channel.Guild.Id, id => new TypingGame(channel));
|
||||||
|
|
||||||
@ -189,9 +189,9 @@ namespace NadekoBot.Modules.Games
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task TypeStop(IUserMessage imsg)
|
public async Task TypeStop()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
TypingGame game;
|
TypingGame game;
|
||||||
if (RunningContests.TryRemove(channel.Guild.Id, out game))
|
if (RunningContests.TryRemove(channel.Guild.Id, out game))
|
||||||
{
|
{
|
||||||
@ -207,11 +207,11 @@ namespace NadekoBot.Modules.Games
|
|||||||
[OwnerOnly]
|
[OwnerOnly]
|
||||||
public async Task Typeadd(IUserMessage imsg, [Remainder] string text)
|
public async Task Typeadd(IUserMessage imsg, [Remainder] string text)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
TypingArticles.Add(new TypingArticle
|
TypingArticles.Add(new TypingArticle
|
||||||
{
|
{
|
||||||
Title = $"Text added on {DateTime.UtcNow} by {imsg.Author}",
|
Title = $"Text added on {DateTime.UtcNow} by {Context.User}",
|
||||||
Text = text.SanitizeMentions(),
|
Text = text.SanitizeMentions(),
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -224,7 +224,7 @@ namespace NadekoBot.Modules.Games
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Typelist(IUserMessage imsg, int page = 1)
|
public async Task Typelist(IUserMessage imsg, int page = 1)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
if (page < 1)
|
if (page < 1)
|
||||||
return;
|
return;
|
||||||
@ -233,7 +233,7 @@ namespace NadekoBot.Modules.Games
|
|||||||
|
|
||||||
if (!articles.Any())
|
if (!articles.Any())
|
||||||
{
|
{
|
||||||
await channel.SendErrorAsync($"{imsg.Author.Mention} `No articles found on that page.`").ConfigureAwait(false);
|
await channel.SendErrorAsync($"{Context.User.Mention} `No articles found on that page.`").ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var i = (page - 1) * 15;
|
var i = (page - 1) * 15;
|
||||||
@ -246,7 +246,7 @@ namespace NadekoBot.Modules.Games
|
|||||||
[OwnerOnly]
|
[OwnerOnly]
|
||||||
public async Task Typedel(IUserMessage imsg, int index)
|
public async Task Typedel(IUserMessage imsg, int index)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
index -= 1;
|
index -= 1;
|
||||||
if (index < 0 || index >= TypingArticles.Count)
|
if (index < 0 || index >= TypingArticles.Count)
|
||||||
|
@ -114,7 +114,7 @@ namespace NadekoBot.Modules.Games.Trivia
|
|||||||
await channel.EmbedAsync(new EmbedBuilder().WithColor(NadekoBot.OkColor)
|
await channel.EmbedAsync(new EmbedBuilder().WithColor(NadekoBot.OkColor)
|
||||||
.WithTitle("Leaderboard")
|
.WithTitle("Leaderboard")
|
||||||
.WithDescription(GetLeaderboard())
|
.WithDescription(GetLeaderboard())
|
||||||
.Build(), "Trivia game ended.").ConfigureAwait(false);
|
, "Trivia game ended.").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
catch { }
|
catch { }
|
||||||
}
|
}
|
||||||
@ -128,7 +128,7 @@ namespace NadekoBot.Modules.Games.Trivia
|
|||||||
|
|
||||||
private Task PotentialGuess(IMessage imsg)
|
private Task PotentialGuess(IMessage imsg)
|
||||||
{
|
{
|
||||||
if (imsg.Author.IsBot)
|
if (Context.User.IsBot)
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
var umsg = imsg as IUserMessage;
|
var umsg = imsg as IUserMessage;
|
||||||
if (umsg == null)
|
if (umsg == null)
|
||||||
@ -137,11 +137,11 @@ namespace NadekoBot.Modules.Games.Trivia
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (!(umsg.Channel is IGuildChannel && umsg.Channel is ITextChannel)) return;
|
if (!(Context.Channel is IGuildChannel && Context.Channel is ITextChannel)) return;
|
||||||
if ((umsg.Channel as ITextChannel).Guild != guild) return;
|
if ((Context.Channel as ITextChannel).Guild != guild) return;
|
||||||
if (umsg.Author.Id == NadekoBot.Client.GetCurrentUser().Id) return;
|
if (Context.User.Id == NadekoBot.Client.CurrentUser().Id) return;
|
||||||
|
|
||||||
var guildUser = umsg.Author as IGuildUser;
|
var guildUser = Context.User as IGuildUser;
|
||||||
|
|
||||||
var guess = false;
|
var guess = false;
|
||||||
await _guessLock.WaitAsync().ConfigureAwait(false);
|
await _guessLock.WaitAsync().ConfigureAwait(false);
|
||||||
|
@ -22,7 +22,7 @@ namespace NadekoBot.Modules.Games
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Trivia(IUserMessage umsg, params string[] args)
|
public async Task Trivia(IUserMessage umsg, params string[] args)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
TriviaGame trivia;
|
TriviaGame trivia;
|
||||||
if (!RunningTrivias.TryGetValue(channel.Guild.Id, out trivia))
|
if (!RunningTrivias.TryGetValue(channel.Guild.Id, out trivia))
|
||||||
@ -35,7 +35,7 @@ namespace NadekoBot.Modules.Games
|
|||||||
}).Where(t => t.Item1).Select(t => t.Item2).FirstOrDefault();
|
}).Where(t => t.Item1).Select(t => t.Item2).FirstOrDefault();
|
||||||
if (number < 0)
|
if (number < 0)
|
||||||
return;
|
return;
|
||||||
var triviaGame = new TriviaGame(channel.Guild, (ITextChannel)umsg.Channel, showHints, number == 0 ? 10 : number);
|
var triviaGame = new TriviaGame(channel.Guild, (ITextChannel)Context.Channel, showHints, number == 0 ? 10 : number);
|
||||||
if (RunningTrivias.TryAdd(channel.Guild.Id, triviaGame))
|
if (RunningTrivias.TryAdd(channel.Guild.Id, triviaGame))
|
||||||
await channel.SendConfirmAsync($"**Trivia game started! {triviaGame.WinRequirement} points needed to win.**").ConfigureAwait(false);
|
await channel.SendConfirmAsync($"**Trivia game started! {triviaGame.WinRequirement} points needed to win.**").ConfigureAwait(false);
|
||||||
else
|
else
|
||||||
@ -47,9 +47,9 @@ namespace NadekoBot.Modules.Games
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Tl(IUserMessage umsg)
|
public async Task Tl()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
TriviaGame trivia;
|
TriviaGame trivia;
|
||||||
if (RunningTrivias.TryGetValue(channel.Guild.Id, out trivia))
|
if (RunningTrivias.TryGetValue(channel.Guild.Id, out trivia))
|
||||||
@ -60,9 +60,9 @@ namespace NadekoBot.Modules.Games
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Tq(IUserMessage umsg)
|
public async Task Tq()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
TriviaGame trivia;
|
TriviaGame trivia;
|
||||||
if (RunningTrivias.TryGetValue(channel.Guild.Id, out trivia))
|
if (RunningTrivias.TryGetValue(channel.Guild.Id, out trivia))
|
||||||
|
@ -29,7 +29,7 @@ namespace NadekoBot.Modules.Games
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Choose(IUserMessage umsg, [Remainder] string list = null)
|
public async Task Choose(IUserMessage umsg, [Remainder] string list = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
if (string.IsNullOrWhiteSpace(list))
|
if (string.IsNullOrWhiteSpace(list))
|
||||||
return;
|
return;
|
||||||
var listArr = list.Split(';');
|
var listArr = list.Split(';');
|
||||||
@ -43,7 +43,7 @@ namespace NadekoBot.Modules.Games
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task _8Ball(IUserMessage umsg, [Remainder] string question = null)
|
public async Task _8Ball(IUserMessage umsg, [Remainder] string question = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(question))
|
if (string.IsNullOrWhiteSpace(question))
|
||||||
return;
|
return;
|
||||||
@ -52,14 +52,14 @@ namespace NadekoBot.Modules.Games
|
|||||||
await channel.EmbedAsync(new EmbedBuilder().WithColor(NadekoBot.OkColor)
|
await channel.EmbedAsync(new EmbedBuilder().WithColor(NadekoBot.OkColor)
|
||||||
.AddField(efb => efb.WithName("❓ Question").WithValue(question).WithIsInline(false))
|
.AddField(efb => efb.WithName("❓ Question").WithValue(question).WithIsInline(false))
|
||||||
.AddField(efb => efb.WithName("🎱 8Ball").WithValue(_8BallResponses.Shuffle().FirstOrDefault()).WithIsInline(false))
|
.AddField(efb => efb.WithName("🎱 8Ball").WithValue(_8BallResponses.Shuffle().FirstOrDefault()).WithIsInline(false))
|
||||||
.Build());
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Rps(IUserMessage umsg, string input)
|
public async Task Rps(IUserMessage umsg, string input)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
Func<int,string> GetRPSPick = (p) =>
|
Func<int,string> GetRPSPick = (p) =>
|
||||||
{
|
{
|
||||||
@ -98,9 +98,9 @@ namespace NadekoBot.Modules.Games
|
|||||||
else if ((pick == 0 && nadekoPick == 1) ||
|
else if ((pick == 0 && nadekoPick == 1) ||
|
||||||
(pick == 1 && nadekoPick == 2) ||
|
(pick == 1 && nadekoPick == 2) ||
|
||||||
(pick == 2 && nadekoPick == 0))
|
(pick == 2 && nadekoPick == 0))
|
||||||
msg = $"{NadekoBot.Client.GetCurrentUser().Mention} won! {GetRPSPick(nadekoPick)} beats {GetRPSPick(pick)}";
|
msg = $"{NadekoBot.Client.CurrentUser().Mention} won! {GetRPSPick(nadekoPick)} beats {GetRPSPick(pick)}";
|
||||||
else
|
else
|
||||||
msg = $"{umsg.Author.Mention} won! {GetRPSPick(pick)} beats {GetRPSPick(nadekoPick)}";
|
msg = $"{Context.User.Mention} won! {GetRPSPick(pick)} beats {GetRPSPick(nadekoPick)}";
|
||||||
|
|
||||||
await channel.SendConfirmAsync(msg).ConfigureAwait(false);
|
await channel.SendConfirmAsync(msg).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
@ -109,7 +109,7 @@ namespace NadekoBot.Modules.Games
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Linux(IUserMessage umsg, string guhnoo, string loonix)
|
public async Task Linux(IUserMessage umsg, string guhnoo, string loonix)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
await channel.SendConfirmAsync(
|
await channel.SendConfirmAsync(
|
||||||
$@"I'd just like to interject for moment. What you're refering to as {loonix}, is in fact, {guhnoo}/{loonix}, or as I've recently taken to calling it, {guhnoo} plus {loonix}. {loonix} is not an operating system unto itself, but rather another free component of a fully functioning {guhnoo} system made useful by the {guhnoo} corelibs, shell utilities and vital system components comprising a full OS as defined by POSIX.
|
$@"I'd just like to interject for moment. What you're refering to as {loonix}, is in fact, {guhnoo}/{loonix}, or as I've recently taken to calling it, {guhnoo} plus {loonix}. {loonix} is not an operating system unto itself, but rather another free component of a fully functioning {guhnoo} system made useful by the {guhnoo} corelibs, shell utilities and vital system components comprising a full OS as defined by POSIX.
|
||||||
|
@ -35,17 +35,17 @@ namespace NadekoBot.Modules.Help
|
|||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
public async Task Modules(IUserMessage umsg)
|
public async Task Modules()
|
||||||
{
|
{
|
||||||
|
|
||||||
await umsg.Channel.SendMessageAsync("📜 **List of modules:** ```css\n• " + string.Join("\n• ", NadekoBot.CommandService.Modules.Select(m => m.Name)) + $"\n``` ℹ️ **Type** `-commands module_name` **to get a list of commands in that module.** ***e.g.*** `-commands games`")
|
await Context.Channel.SendMessageAsync("📜 **List of modules:** ```css\n• " + string.Join("\n• ", NadekoBot.CommandService.Modules.Select(m => m.Name)) + $"\n``` ℹ️ **Type** `-commands module_name` **to get a list of commands in that module.** ***e.g.*** `-commands games`")
|
||||||
.ConfigureAwait(false);
|
.ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
public async Task Commands(IUserMessage umsg, [Remainder] string module = null)
|
public async Task Commands(IUserMessage umsg, [Remainder] string module = null)
|
||||||
{
|
{
|
||||||
var channel = umsg.Channel;
|
var channel = Context.Channel;
|
||||||
|
|
||||||
module = module?.Trim().ToUpperInvariant();
|
module = module?.Trim().ToUpperInvariant();
|
||||||
if (string.IsNullOrWhiteSpace(module))
|
if (string.IsNullOrWhiteSpace(module))
|
||||||
@ -75,12 +75,12 @@ namespace NadekoBot.Modules.Help
|
|||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
public async Task H(IUserMessage umsg, [Remainder] string comToFind = null)
|
public async Task H(IUserMessage umsg, [Remainder] string comToFind = null)
|
||||||
{
|
{
|
||||||
var channel = umsg.Channel;
|
var channel = Context.Channel;
|
||||||
|
|
||||||
comToFind = comToFind?.ToLowerInvariant();
|
comToFind = comToFind?.ToLowerInvariant();
|
||||||
if (string.IsNullOrWhiteSpace(comToFind))
|
if (string.IsNullOrWhiteSpace(comToFind))
|
||||||
{
|
{
|
||||||
IMessageChannel ch = channel is ITextChannel ? await ((IGuildUser)umsg.Author).CreateDMChannelAsync() : channel;
|
IMessageChannel ch = channel is ITextChannel ? await ((IGuildUser)Context.User).CreateDMChannelAsync() : channel;
|
||||||
await ch.SendMessageAsync(HelpString).ConfigureAwait(false);
|
await ch.SendMessageAsync(HelpString).ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -99,18 +99,18 @@ namespace NadekoBot.Modules.Help
|
|||||||
.AddField(fb => fb.WithIndex(1).WithName(str).WithValue($"{ string.Format(com.Summary, com.Module.Prefix)} { GetCommandRequirements(com)}").WithIsInline(true))
|
.AddField(fb => fb.WithIndex(1).WithName(str).WithValue($"{ string.Format(com.Summary, com.Module.Prefix)} { GetCommandRequirements(com)}").WithIsInline(true))
|
||||||
.AddField(fb => fb.WithIndex(2).WithName("**Usage**").WithValue($"{string.Format(com.Remarks, com.Module.Prefix)}").WithIsInline(false))
|
.AddField(fb => fb.WithIndex(2).WithName("**Usage**").WithValue($"{string.Format(com.Remarks, com.Module.Prefix)}").WithIsInline(false))
|
||||||
.WithColor(NadekoBot.OkColor);
|
.WithColor(NadekoBot.OkColor);
|
||||||
await channel.EmbedAsync(embed.Build()).ConfigureAwait(false);
|
await channel.EmbedAsync(embed).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private string GetCommandRequirements(Command cmd)
|
private string GetCommandRequirements(Command cmd)
|
||||||
{
|
{
|
||||||
return String.Join(" ", cmd.Source.CustomAttributes
|
return String.Join(" ", cmd.Source.CustomAttributes
|
||||||
.Where(ca => ca.AttributeType == typeof(OwnerOnlyAttribute) || ca.AttributeType == typeof(RequirePermissionAttribute))
|
.Where(ca => ca.AttributeType == typeof(OwnerOnlyAttribute) || ca.AttributeType == typeof(RequireUserPermissionAttribute))
|
||||||
.Select(ca =>
|
.Select(ca =>
|
||||||
{
|
{
|
||||||
if (ca.AttributeType == typeof(OwnerOnlyAttribute))
|
if (ca.AttributeType == typeof(OwnerOnlyAttribute))
|
||||||
return "**Bot Owner only.**";
|
return "**Bot Owner only.**";
|
||||||
else if (ca.AttributeType == typeof(RequirePermissionAttribute))
|
else if (ca.AttributeType == typeof(RequireUserPermissionAttribute))
|
||||||
return $"**Requires {(GuildPermission)ca.ConstructorArguments.FirstOrDefault().Value} server permission.**".Replace("Guild", "Server");
|
return $"**Requires {(GuildPermission)ca.ConstructorArguments.FirstOrDefault().Value} server permission.**".Replace("Guild", "Server");
|
||||||
else
|
else
|
||||||
return $"**Requires {(GuildPermission)ca.ConstructorArguments.FirstOrDefault().Value} channel permission.**".Replace("Guild", "Server");
|
return $"**Requires {(GuildPermission)ca.ConstructorArguments.FirstOrDefault().Value} channel permission.**".Replace("Guild", "Server");
|
||||||
@ -120,7 +120,7 @@ namespace NadekoBot.Modules.Help
|
|||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[OwnerOnly]
|
[OwnerOnly]
|
||||||
public Task Hgit(IUserMessage umsg)
|
public Task Hgit()
|
||||||
{
|
{
|
||||||
var helpstr = new StringBuilder();
|
var helpstr = new StringBuilder();
|
||||||
helpstr.AppendLine("You can support the project on patreon: <https://patreon.com/nadekobot> or paypal: <https://www.paypal.me/Kwoth>\n");
|
helpstr.AppendLine("You can support the project on patreon: <https://patreon.com/nadekobot> or paypal: <https://www.paypal.me/Kwoth>\n");
|
||||||
@ -145,16 +145,16 @@ namespace NadekoBot.Modules.Help
|
|||||||
}
|
}
|
||||||
helpstr.AppendLine($"`{com.Text}` {string.Join(" ", com.Aliases.Skip(1).Select(a=>"`"+a+"`"))} | {string.Format(com.Summary, com.Module.Prefix)} {GetCommandRequirements(com)} | {string.Format(com.Remarks, com.Module.Prefix)}");
|
helpstr.AppendLine($"`{com.Text}` {string.Join(" ", com.Aliases.Skip(1).Select(a=>"`"+a+"`"))} | {string.Format(com.Summary, com.Module.Prefix)} {GetCommandRequirements(com)} | {string.Format(com.Remarks, com.Module.Prefix)}");
|
||||||
}
|
}
|
||||||
helpstr = helpstr.Replace(NadekoBot.Client.GetCurrentUser().Username , "@BotName");
|
helpstr = helpstr.Replace(NadekoBot.Client.CurrentUser().Username , "@BotName");
|
||||||
File.WriteAllText("../../docs/Commands List.md", helpstr.ToString());
|
File.WriteAllText("../../docs/Commands List.md", helpstr.ToString());
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Guide(IUserMessage umsg)
|
public async Task Guide()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
await channel.SendConfirmAsync(
|
await channel.SendConfirmAsync(
|
||||||
@"**LIST OF COMMANDS**: <http://nadekobot.readthedocs.io/en/latest/Commands%20List/>
|
@"**LIST OF COMMANDS**: <http://nadekobot.readthedocs.io/en/latest/Commands%20List/>
|
||||||
@ -163,9 +163,9 @@ namespace NadekoBot.Modules.Help
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Donate(IUserMessage umsg)
|
public async Task Donate()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
await channel.SendConfirmAsync(
|
await channel.SendConfirmAsync(
|
||||||
$@"You can support the NadekoBot project on patreon. <https://patreon.com/nadekobot> or
|
$@"You can support the NadekoBot project on patreon. <https://patreon.com/nadekobot> or
|
||||||
|
@ -62,14 +62,14 @@ namespace NadekoBot.Modules.Music
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public Task Next(IUserMessage umsg, int skipCount = 1)
|
public Task Next(IUserMessage umsg, int skipCount = 1)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
if (skipCount < 1)
|
if (skipCount < 1)
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
|
|
||||||
MusicPlayer musicPlayer;
|
MusicPlayer musicPlayer;
|
||||||
if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer)) return Task.CompletedTask;
|
if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer)) return Task.CompletedTask;
|
||||||
if (musicPlayer.PlaybackVoiceChannel == ((IGuildUser)umsg.Author).VoiceChannel)
|
if (musicPlayer.PlaybackVoiceChannel == ((IGuildUser)Context.User).VoiceChannel)
|
||||||
{
|
{
|
||||||
while (--skipCount > 0)
|
while (--skipCount > 0)
|
||||||
{
|
{
|
||||||
@ -82,13 +82,13 @@ namespace NadekoBot.Modules.Music
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public Task Stop(IUserMessage umsg)
|
public Task Stop()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
MusicPlayer musicPlayer;
|
MusicPlayer musicPlayer;
|
||||||
if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer)) return Task.CompletedTask;
|
if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer)) return Task.CompletedTask;
|
||||||
if (((IGuildUser)umsg.Author).VoiceChannel == musicPlayer.PlaybackVoiceChannel)
|
if (((IGuildUser)Context.User).VoiceChannel == musicPlayer.PlaybackVoiceChannel)
|
||||||
{
|
{
|
||||||
musicPlayer.Autoplay = false;
|
musicPlayer.Autoplay = false;
|
||||||
musicPlayer.Stop();
|
musicPlayer.Stop();
|
||||||
@ -98,13 +98,13 @@ namespace NadekoBot.Modules.Music
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public Task Destroy(IUserMessage umsg)
|
public Task Destroy()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
MusicPlayer musicPlayer;
|
MusicPlayer musicPlayer;
|
||||||
if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer)) return Task.CompletedTask;
|
if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer)) return Task.CompletedTask;
|
||||||
if (((IGuildUser)umsg.Author).VoiceChannel == musicPlayer.PlaybackVoiceChannel)
|
if (((IGuildUser)Context.User).VoiceChannel == musicPlayer.PlaybackVoiceChannel)
|
||||||
if(MusicPlayers.TryRemove(channel.Guild.Id, out musicPlayer))
|
if(MusicPlayers.TryRemove(channel.Guild.Id, out musicPlayer))
|
||||||
musicPlayer.Destroy();
|
musicPlayer.Destroy();
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
@ -112,13 +112,13 @@ namespace NadekoBot.Modules.Music
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public Task Pause(IUserMessage umsg)
|
public Task Pause()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
MusicPlayer musicPlayer;
|
MusicPlayer musicPlayer;
|
||||||
if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer)) return Task.CompletedTask;
|
if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer)) return Task.CompletedTask;
|
||||||
if (((IGuildUser)umsg.Author).VoiceChannel != musicPlayer.PlaybackVoiceChannel)
|
if (((IGuildUser)Context.User).VoiceChannel != musicPlayer.PlaybackVoiceChannel)
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
musicPlayer.TogglePause();
|
musicPlayer.TogglePause();
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
@ -128,9 +128,9 @@ namespace NadekoBot.Modules.Music
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Queue(IUserMessage umsg, [Remainder] string query)
|
public async Task Queue(IUserMessage umsg, [Remainder] string query)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
await QueueSong(((IGuildUser)umsg.Author), channel, ((IGuildUser)umsg.Author).VoiceChannel, query).ConfigureAwait(false);
|
await QueueSong(((IGuildUser)Context.User), channel, ((IGuildUser)Context.User).VoiceChannel, query).ConfigureAwait(false);
|
||||||
if (channel.Guild.GetCurrentUser().GetPermissions(channel).ManageMessages)
|
if (channel.Guild.GetCurrentUser().GetPermissions(channel).ManageMessages)
|
||||||
{
|
{
|
||||||
await Task.Delay(10000).ConfigureAwait(false);
|
await Task.Delay(10000).ConfigureAwait(false);
|
||||||
@ -142,9 +142,9 @@ namespace NadekoBot.Modules.Music
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task SoundCloudQueue(IUserMessage umsg, [Remainder] string query)
|
public async Task SoundCloudQueue(IUserMessage umsg, [Remainder] string query)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
await QueueSong(((IGuildUser)umsg.Author), channel, ((IGuildUser)umsg.Author).VoiceChannel, query, musicType: MusicType.Soundcloud).ConfigureAwait(false);
|
await QueueSong(((IGuildUser)Context.User), channel, ((IGuildUser)Context.User).VoiceChannel, query, musicType: MusicType.Soundcloud).ConfigureAwait(false);
|
||||||
if (channel.Guild.GetCurrentUser().GetPermissions(channel).ManageMessages)
|
if (channel.Guild.GetCurrentUser().GetPermissions(channel).ManageMessages)
|
||||||
{
|
{
|
||||||
await Task.Delay(10000).ConfigureAwait(false);
|
await Task.Delay(10000).ConfigureAwait(false);
|
||||||
@ -156,7 +156,7 @@ namespace NadekoBot.Modules.Music
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task ListQueue(IUserMessage umsg, int page = 1)
|
public async Task ListQueue(IUserMessage umsg, int page = 1)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
MusicPlayer musicPlayer;
|
MusicPlayer musicPlayer;
|
||||||
if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer))
|
if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer))
|
||||||
{
|
{
|
||||||
@ -194,9 +194,9 @@ namespace NadekoBot.Modules.Music
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task NowPlaying(IUserMessage umsg)
|
public async Task NowPlaying()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
MusicPlayer musicPlayer;
|
MusicPlayer musicPlayer;
|
||||||
if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer))
|
if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer))
|
||||||
@ -225,18 +225,18 @@ namespace NadekoBot.Modules.Music
|
|||||||
{
|
{
|
||||||
embed.WithThumbnail(tn => tn.Url = $"{currentSong.SongInfo.AlbumArt}");
|
embed.WithThumbnail(tn => tn.Url = $"{currentSong.SongInfo.AlbumArt}");
|
||||||
}
|
}
|
||||||
await channel.EmbedAsync(embed.Build()).ConfigureAwait(false);
|
await channel.EmbedAsync(embed).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Volume(IUserMessage umsg, int val)
|
public async Task Volume(IUserMessage umsg, int val)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
MusicPlayer musicPlayer;
|
MusicPlayer musicPlayer;
|
||||||
if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer))
|
if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer))
|
||||||
return;
|
return;
|
||||||
if (((IGuildUser)umsg.Author).VoiceChannel != musicPlayer.PlaybackVoiceChannel)
|
if (((IGuildUser)Context.User).VoiceChannel != musicPlayer.PlaybackVoiceChannel)
|
||||||
return;
|
return;
|
||||||
if (val < 0)
|
if (val < 0)
|
||||||
return;
|
return;
|
||||||
@ -248,7 +248,7 @@ namespace NadekoBot.Modules.Music
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Defvol(IUserMessage umsg, [Remainder] int val)
|
public async Task Defvol(IUserMessage umsg, [Remainder] int val)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
if (val < 0 || val > 100)
|
if (val < 0 || val > 100)
|
||||||
{
|
{
|
||||||
@ -265,13 +265,13 @@ namespace NadekoBot.Modules.Music
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task ShufflePlaylist(IUserMessage umsg)
|
public async Task ShufflePlaylist()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
MusicPlayer musicPlayer;
|
MusicPlayer musicPlayer;
|
||||||
if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer))
|
if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer))
|
||||||
return;
|
return;
|
||||||
if (((IGuildUser)umsg.Author).VoiceChannel != musicPlayer.PlaybackVoiceChannel)
|
if (((IGuildUser)Context.User).VoiceChannel != musicPlayer.PlaybackVoiceChannel)
|
||||||
return;
|
return;
|
||||||
if (musicPlayer.Playlist.Count < 2)
|
if (musicPlayer.Playlist.Count < 2)
|
||||||
{
|
{
|
||||||
@ -287,11 +287,11 @@ namespace NadekoBot.Modules.Music
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Playlist(IUserMessage umsg, [Remainder] string playlist)
|
public async Task Playlist(IUserMessage umsg, [Remainder] string playlist)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
var arg = playlist;
|
var arg = playlist;
|
||||||
if (string.IsNullOrWhiteSpace(arg))
|
if (string.IsNullOrWhiteSpace(arg))
|
||||||
return;
|
return;
|
||||||
if (((IGuildUser)umsg.Author).VoiceChannel?.Guild != channel.Guild)
|
if (((IGuildUser)Context.User).VoiceChannel?.Guild != channel.Guild)
|
||||||
{
|
{
|
||||||
await channel.SendErrorAsync("💢 You need to be in a **voice channel** on this server.\n If you are already in a voice channel, try rejoining it.").ConfigureAwait(false);
|
await channel.SendErrorAsync("💢 You need to be in a **voice channel** on this server.\n If you are already in a voice channel, try rejoining it.").ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
@ -316,7 +316,7 @@ namespace NadekoBot.Modules.Music
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await QueueSong(((IGuildUser)umsg.Author), channel, ((IGuildUser)umsg.Author).VoiceChannel, id, true).ConfigureAwait(false);
|
await QueueSong(((IGuildUser)Context.User), channel, ((IGuildUser)Context.User).VoiceChannel, id, true).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
catch (SongNotFoundException) { }
|
catch (SongNotFoundException) { }
|
||||||
catch { break; }
|
catch { break; }
|
||||||
@ -328,7 +328,7 @@ namespace NadekoBot.Modules.Music
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task SoundCloudPl(IUserMessage umsg, [Remainder] string pl)
|
public async Task SoundCloudPl(IUserMessage umsg, [Remainder] string pl)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
pl = pl?.Trim();
|
pl = pl?.Trim();
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(pl))
|
if (string.IsNullOrWhiteSpace(pl))
|
||||||
@ -337,7 +337,7 @@ namespace NadekoBot.Modules.Music
|
|||||||
using (var http = new HttpClient())
|
using (var http = new HttpClient())
|
||||||
{
|
{
|
||||||
var scvids = JObject.Parse(await http.GetStringAsync($"http://api.soundcloud.com/resolve?url={pl}&client_id={NadekoBot.Credentials.SoundCloudClientId}").ConfigureAwait(false))["tracks"].ToObject<SoundCloudVideo[]>();
|
var scvids = JObject.Parse(await http.GetStringAsync($"http://api.soundcloud.com/resolve?url={pl}&client_id={NadekoBot.Credentials.SoundCloudClientId}").ConfigureAwait(false))["tracks"].ToObject<SoundCloudVideo[]>();
|
||||||
await QueueSong(((IGuildUser)umsg.Author), channel, ((IGuildUser)umsg.Author).VoiceChannel, scvids[0].TrackLink).ConfigureAwait(false);
|
await QueueSong(((IGuildUser)Context.User), channel, ((IGuildUser)Context.User).VoiceChannel, scvids[0].TrackLink).ConfigureAwait(false);
|
||||||
|
|
||||||
MusicPlayer mp;
|
MusicPlayer mp;
|
||||||
if (!MusicPlayers.TryGetValue(channel.Guild.Id, out mp))
|
if (!MusicPlayers.TryGetValue(channel.Guild.Id, out mp))
|
||||||
@ -354,7 +354,7 @@ namespace NadekoBot.Modules.Music
|
|||||||
Uri = svideo.StreamLink,
|
Uri = svideo.StreamLink,
|
||||||
ProviderType = MusicType.Normal,
|
ProviderType = MusicType.Normal,
|
||||||
Query = svideo.TrackLink,
|
Query = svideo.TrackLink,
|
||||||
}), ((IGuildUser)umsg.Author).Username);
|
}), ((IGuildUser)Context.User).Username);
|
||||||
}
|
}
|
||||||
catch (PlaylistFullException) { break; }
|
catch (PlaylistFullException) { break; }
|
||||||
}
|
}
|
||||||
@ -366,7 +366,7 @@ namespace NadekoBot.Modules.Music
|
|||||||
[OwnerOnly]
|
[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)Context.Channel;
|
||||||
var arg = directory;
|
var arg = directory;
|
||||||
if (string.IsNullOrWhiteSpace(arg))
|
if (string.IsNullOrWhiteSpace(arg))
|
||||||
return;
|
return;
|
||||||
@ -379,7 +379,7 @@ namespace NadekoBot.Modules.Music
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await QueueSong(((IGuildUser)umsg.Author), channel, ((IGuildUser)umsg.Author).VoiceChannel, file.FullName, true, MusicType.Local).ConfigureAwait(false);
|
await QueueSong(((IGuildUser)Context.User), channel, ((IGuildUser)Context.User).VoiceChannel, file.FullName, true, MusicType.Local).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
catch (PlaylistFullException)
|
catch (PlaylistFullException)
|
||||||
{
|
{
|
||||||
@ -396,13 +396,13 @@ namespace NadekoBot.Modules.Music
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Radio(IUserMessage umsg, string radio_link)
|
public async Task Radio(IUserMessage umsg, string radio_link)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
if (((IGuildUser)umsg.Author).VoiceChannel?.Guild != channel.Guild)
|
if (((IGuildUser)Context.User).VoiceChannel?.Guild != channel.Guild)
|
||||||
{
|
{
|
||||||
await channel.SendErrorAsync("💢 You need to be in a voice channel on this server.\n If you are already in a voice channel, try rejoining it.").ConfigureAwait(false);
|
await channel.SendErrorAsync("💢 You need to be in a voice channel on this server.\n If you are already in a voice channel, try rejoining it.").ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
await QueueSong(((IGuildUser)umsg.Author), channel, ((IGuildUser)umsg.Author).VoiceChannel, radio_link, musicType: MusicType.Radio).ConfigureAwait(false);
|
await QueueSong(((IGuildUser)Context.User), channel, ((IGuildUser)Context.User).VoiceChannel, radio_link, musicType: MusicType.Radio).ConfigureAwait(false);
|
||||||
if (channel.Guild.GetCurrentUser().GetPermissions(channel).ManageMessages)
|
if (channel.Guild.GetCurrentUser().GetPermissions(channel).ManageMessages)
|
||||||
{
|
{
|
||||||
await Task.Delay(10000).ConfigureAwait(false);
|
await Task.Delay(10000).ConfigureAwait(false);
|
||||||
@ -415,21 +415,21 @@ namespace NadekoBot.Modules.Music
|
|||||||
[OwnerOnly]
|
[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)Context.Channel;
|
||||||
var arg = path;
|
var arg = path;
|
||||||
if (string.IsNullOrWhiteSpace(arg))
|
if (string.IsNullOrWhiteSpace(arg))
|
||||||
return;
|
return;
|
||||||
await QueueSong(((IGuildUser)umsg.Author), channel, ((IGuildUser)umsg.Author).VoiceChannel, path, musicType: MusicType.Local).ConfigureAwait(false);
|
await QueueSong(((IGuildUser)Context.User), channel, ((IGuildUser)Context.User).VoiceChannel, path, musicType: MusicType.Local).ConfigureAwait(false);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Move(IUserMessage umsg)
|
public async Task Move()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
MusicPlayer musicPlayer;
|
MusicPlayer musicPlayer;
|
||||||
var voiceChannel = ((IGuildUser)umsg.Author).VoiceChannel;
|
var voiceChannel = ((IGuildUser)Context.User).VoiceChannel;
|
||||||
if (voiceChannel == null || voiceChannel.Guild != channel.Guild || !MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer))
|
if (voiceChannel == null || voiceChannel.Guild != channel.Guild || !MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer))
|
||||||
return;
|
return;
|
||||||
await musicPlayer.MoveToVoiceChannel(voiceChannel);
|
await musicPlayer.MoveToVoiceChannel(voiceChannel);
|
||||||
@ -440,14 +440,14 @@ namespace NadekoBot.Modules.Music
|
|||||||
[Priority(0)]
|
[Priority(0)]
|
||||||
public async Task Remove(IUserMessage umsg, int num)
|
public async Task Remove(IUserMessage umsg, int num)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
MusicPlayer musicPlayer;
|
MusicPlayer musicPlayer;
|
||||||
if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer))
|
if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (((IGuildUser)umsg.Author).VoiceChannel != musicPlayer.PlaybackVoiceChannel)
|
if (((IGuildUser)Context.User).VoiceChannel != musicPlayer.PlaybackVoiceChannel)
|
||||||
return;
|
return;
|
||||||
if (num <= 0 || num > musicPlayer.Playlist.Count)
|
if (num <= 0 || num > musicPlayer.Playlist.Count)
|
||||||
return;
|
return;
|
||||||
@ -461,7 +461,7 @@ namespace NadekoBot.Modules.Music
|
|||||||
[Priority(1)]
|
[Priority(1)]
|
||||||
public async Task Remove(IUserMessage umsg, string all)
|
public async Task Remove(IUserMessage umsg, string all)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
if (all.Trim().ToUpperInvariant() != "ALL")
|
if (all.Trim().ToUpperInvariant() != "ALL")
|
||||||
return;
|
return;
|
||||||
@ -476,7 +476,7 @@ namespace NadekoBot.Modules.Music
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task MoveSong(IUserMessage umsg, [Remainder] string fromto)
|
public async Task MoveSong(IUserMessage umsg, [Remainder] string fromto)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
MusicPlayer musicPlayer;
|
MusicPlayer musicPlayer;
|
||||||
if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer))
|
if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer))
|
||||||
{
|
{
|
||||||
@ -510,7 +510,7 @@ namespace NadekoBot.Modules.Music
|
|||||||
.AddField(fb => fb.WithName("**From Position**").WithValue($"#{n1}").WithIsInline(true))
|
.AddField(fb => fb.WithName("**From Position**").WithValue($"#{n1}").WithIsInline(true))
|
||||||
.AddField(fb => fb.WithName("**To Position**").WithValue($"#{n2}").WithIsInline(true))
|
.AddField(fb => fb.WithName("**To Position**").WithValue($"#{n2}").WithIsInline(true))
|
||||||
.WithColor(NadekoBot.OkColor);
|
.WithColor(NadekoBot.OkColor);
|
||||||
await channel.EmbedAsync(embed.Build()).ConfigureAwait(false);
|
await channel.EmbedAsync(embed).ConfigureAwait(false);
|
||||||
|
|
||||||
//await channel.SendConfirmAsync($"🎵Moved {s.PrettyName} `from #{n1} to #{n2}`").ConfigureAwait(false);
|
//await channel.SendConfirmAsync($"🎵Moved {s.PrettyName} `from #{n1} to #{n2}`").ConfigureAwait(false);
|
||||||
|
|
||||||
@ -521,7 +521,7 @@ namespace NadekoBot.Modules.Music
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task SetMaxQueue(IUserMessage umsg, uint size)
|
public async Task SetMaxQueue(IUserMessage umsg, uint size)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
MusicPlayer musicPlayer;
|
MusicPlayer musicPlayer;
|
||||||
if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer))
|
if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer))
|
||||||
{
|
{
|
||||||
@ -533,9 +533,9 @@ namespace NadekoBot.Modules.Music
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task ReptCurSong(IUserMessage umsg)
|
public async Task ReptCurSong()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
MusicPlayer musicPlayer;
|
MusicPlayer musicPlayer;
|
||||||
if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer))
|
if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer))
|
||||||
return;
|
return;
|
||||||
@ -551,9 +551,9 @@ namespace NadekoBot.Modules.Music
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task RepeatPl(IUserMessage umsg)
|
public async Task RepeatPl()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
MusicPlayer musicPlayer;
|
MusicPlayer musicPlayer;
|
||||||
if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer))
|
if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer))
|
||||||
return;
|
return;
|
||||||
@ -565,7 +565,7 @@ namespace NadekoBot.Modules.Music
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Save(IUserMessage umsg, [Remainder] string name)
|
public async Task Save(IUserMessage umsg, [Remainder] string name)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
MusicPlayer musicPlayer;
|
MusicPlayer musicPlayer;
|
||||||
if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer))
|
if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer))
|
||||||
return;
|
return;
|
||||||
@ -586,8 +586,8 @@ namespace NadekoBot.Modules.Music
|
|||||||
playlist = new MusicPlaylist
|
playlist = new MusicPlaylist
|
||||||
{
|
{
|
||||||
Name = name,
|
Name = name,
|
||||||
Author = umsg.Author.Username,
|
Author = Context.User.Username,
|
||||||
AuthorId = umsg.Author.Id,
|
AuthorId = Context.User.Id,
|
||||||
Songs = songs,
|
Songs = songs,
|
||||||
};
|
};
|
||||||
uow.MusicPlaylists.Add(playlist);
|
uow.MusicPlaylists.Add(playlist);
|
||||||
@ -601,7 +601,7 @@ namespace NadekoBot.Modules.Music
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Load(IUserMessage umsg, [Remainder] int id)
|
public async Task Load(IUserMessage umsg, [Remainder] int id)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
MusicPlaylist mpl;
|
MusicPlaylist mpl;
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
@ -618,7 +618,7 @@ namespace NadekoBot.Modules.Music
|
|||||||
try { msg = await channel.SendMessageAsync($"🎶 Attempting to load **{mpl.Songs.Count}** songs...").ConfigureAwait(false); } catch (Exception ex) { _log.Warn(ex); }
|
try { msg = await channel.SendMessageAsync($"🎶 Attempting to load **{mpl.Songs.Count}** songs...").ConfigureAwait(false); } catch (Exception ex) { _log.Warn(ex); }
|
||||||
foreach (var item in mpl.Songs)
|
foreach (var item in mpl.Songs)
|
||||||
{
|
{
|
||||||
var usr = (IGuildUser)umsg.Author;
|
var usr = (IGuildUser)Context.User;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await QueueSong(usr, channel, usr.VoiceChannel, item.Query, true, item.ProviderType).ConfigureAwait(false);
|
await QueueSong(usr, channel, usr.VoiceChannel, item.Query, true, item.ProviderType).ConfigureAwait(false);
|
||||||
@ -634,7 +634,7 @@ namespace NadekoBot.Modules.Music
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Playlists(IUserMessage umsg, [Remainder] int num = 1)
|
public async Task Playlists(IUserMessage umsg, [Remainder] int num = 1)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
if (num <= 0)
|
if (num <= 0)
|
||||||
return;
|
return;
|
||||||
@ -656,7 +656,7 @@ namespace NadekoBot.Modules.Music
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task DeletePlaylist(IUserMessage umsg, [Remainder] int id)
|
public async Task DeletePlaylist(IUserMessage umsg, [Remainder] int id)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
bool success = false;
|
bool success = false;
|
||||||
MusicPlaylist pl = null;
|
MusicPlaylist pl = null;
|
||||||
@ -668,7 +668,7 @@ namespace NadekoBot.Modules.Music
|
|||||||
|
|
||||||
if (pl != null)
|
if (pl != null)
|
||||||
{
|
{
|
||||||
if (NadekoBot.Credentials.IsOwner(umsg.Author) || pl.AuthorId == umsg.Author.Id)
|
if (NadekoBot.Credentials.IsOwner(Context.User) || pl.AuthorId == Context.User.Id)
|
||||||
{
|
{
|
||||||
uow.MusicPlaylists.Remove(pl);
|
uow.MusicPlaylists.Remove(pl);
|
||||||
await uow.CompleteAsync().ConfigureAwait(false);
|
await uow.CompleteAsync().ConfigureAwait(false);
|
||||||
@ -694,12 +694,12 @@ namespace NadekoBot.Modules.Music
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Goto(IUserMessage umsg, int time)
|
public async Task Goto(IUserMessage umsg, int time)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
MusicPlayer musicPlayer;
|
MusicPlayer musicPlayer;
|
||||||
if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer))
|
if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer))
|
||||||
return;
|
return;
|
||||||
if (((IGuildUser)umsg.Author).VoiceChannel != musicPlayer.PlaybackVoiceChannel)
|
if (((IGuildUser)Context.User).VoiceChannel != musicPlayer.PlaybackVoiceChannel)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (time < 0)
|
if (time < 0)
|
||||||
@ -731,7 +731,7 @@ namespace NadekoBot.Modules.Music
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task GetLink(IUserMessage umsg, int index = 0)
|
public async Task GetLink(IUserMessage umsg, int index = 0)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
MusicPlayer musicPlayer;
|
MusicPlayer musicPlayer;
|
||||||
if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer))
|
if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer))
|
||||||
return;
|
return;
|
||||||
@ -764,9 +764,9 @@ namespace NadekoBot.Modules.Music
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Autoplay(IUserMessage umsg)
|
public async Task Autoplay()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
MusicPlayer musicPlayer;
|
MusicPlayer musicPlayer;
|
||||||
if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer))
|
if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer))
|
||||||
return;
|
return;
|
||||||
|
@ -24,7 +24,7 @@ namespace NadekoBot.Modules.NSFW
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Hentai(IUserMessage umsg, [Remainder] string tag = null)
|
public async Task Hentai(IUserMessage umsg, [Remainder] string tag = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
tag = tag?.Trim() ?? "";
|
tag = tag?.Trim() ?? "";
|
||||||
|
|
||||||
@ -60,7 +60,7 @@ namespace NadekoBot.Modules.NSFW
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task HentaiBomb(IUserMessage umsg, [Remainder] string tag = null)
|
public async Task HentaiBomb(IUserMessage umsg, [Remainder] string tag = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
tag = tag?.Trim() ?? "";
|
tag = tag?.Trim() ?? "";
|
||||||
tag = "rating%3Aexplicit+" + tag;
|
tag = "rating%3Aexplicit+" + tag;
|
||||||
@ -102,7 +102,7 @@ namespace NadekoBot.Modules.NSFW
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Yandere(IUserMessage umsg, [Remainder] string tag = null)
|
public async Task Yandere(IUserMessage umsg, [Remainder] string tag = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
tag = tag?.Trim() ?? "";
|
tag = tag?.Trim() ?? "";
|
||||||
var link = await GetYandereImageLink(tag).ConfigureAwait(false);
|
var link = await GetYandereImageLink(tag).ConfigureAwait(false);
|
||||||
@ -116,7 +116,7 @@ namespace NadekoBot.Modules.NSFW
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Danbooru(IUserMessage umsg, [Remainder] string tag = null)
|
public async Task Danbooru(IUserMessage umsg, [Remainder] string tag = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
tag = tag?.Trim() ?? "";
|
tag = tag?.Trim() ?? "";
|
||||||
var link = await GetDanbooruImageLink(tag).ConfigureAwait(false);
|
var link = await GetDanbooruImageLink(tag).ConfigureAwait(false);
|
||||||
@ -130,7 +130,7 @@ namespace NadekoBot.Modules.NSFW
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Konachan(IUserMessage umsg, [Remainder] string tag = null)
|
public async Task Konachan(IUserMessage umsg, [Remainder] string tag = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
tag = tag?.Trim() ?? "";
|
tag = tag?.Trim() ?? "";
|
||||||
var link = await GetKonachanImageLink(tag).ConfigureAwait(false);
|
var link = await GetKonachanImageLink(tag).ConfigureAwait(false);
|
||||||
@ -144,7 +144,7 @@ namespace NadekoBot.Modules.NSFW
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Gelbooru(IUserMessage umsg, [Remainder] string tag = null)
|
public async Task Gelbooru(IUserMessage umsg, [Remainder] string tag = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
tag = tag?.Trim() ?? "";
|
tag = tag?.Trim() ?? "";
|
||||||
var link = await GetGelbooruImageLink(tag).ConfigureAwait(false);
|
var link = await GetGelbooruImageLink(tag).ConfigureAwait(false);
|
||||||
@ -158,7 +158,7 @@ namespace NadekoBot.Modules.NSFW
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Rule34(IUserMessage umsg, [Remainder] string tag = null)
|
public async Task Rule34(IUserMessage umsg, [Remainder] string tag = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
tag = tag?.Trim() ?? "";
|
tag = tag?.Trim() ?? "";
|
||||||
var link = await GetRule34ImageLink(tag).ConfigureAwait(false);
|
var link = await GetRule34ImageLink(tag).ConfigureAwait(false);
|
||||||
@ -172,7 +172,7 @@ namespace NadekoBot.Modules.NSFW
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task E621(IUserMessage umsg, [Remainder] string tag = null)
|
public async Task E621(IUserMessage umsg, [Remainder] string tag = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
tag = tag?.Trim() ?? "";
|
tag = tag?.Trim() ?? "";
|
||||||
var link = await GetE621ImageLink(tag).ConfigureAwait(false);
|
var link = await GetE621ImageLink(tag).ConfigureAwait(false);
|
||||||
@ -184,18 +184,18 @@ namespace NadekoBot.Modules.NSFW
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Cp(IUserMessage umsg)
|
public async Task Cp()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
await channel.SendMessageAsync("http://i.imgur.com/MZkY1md.jpg").ConfigureAwait(false);
|
await channel.SendMessageAsync("http://i.imgur.com/MZkY1md.jpg").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Boobs(IUserMessage umsg)
|
public async Task Boobs()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
JToken obj;
|
JToken obj;
|
||||||
@ -213,9 +213,9 @@ namespace NadekoBot.Modules.NSFW
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Butts(IUserMessage umsg)
|
public async Task Butts()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -60,7 +60,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
|
|
||||||
private async Task Blacklist(IUserMessage imsg, AddRemove action, ulong id, BlacklistType type)
|
private async Task Blacklist(IUserMessage imsg, AddRemove action, ulong id, BlacklistType type)
|
||||||
{
|
{
|
||||||
var channel = imsg.Channel;
|
var channel = Context.Channel;
|
||||||
|
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
{
|
{
|
||||||
|
@ -21,7 +21,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Group]
|
[Group]
|
||||||
public class CmdCdsCommands
|
public class CmdCdsCommands : ModuleBase
|
||||||
{
|
{
|
||||||
public static ConcurrentDictionary<ulong, ConcurrentHashSet<CommandCooldown>> commandCooldowns { get; }
|
public static ConcurrentDictionary<ulong, ConcurrentHashSet<CommandCooldown>> commandCooldowns { get; }
|
||||||
private static ConcurrentDictionary<ulong, ConcurrentHashSet<ActiveCooldown>> activeCooldowns { get; } = new ConcurrentDictionary<ulong, ConcurrentHashSet<ActiveCooldown>>();
|
private static ConcurrentDictionary<ulong, ConcurrentHashSet<ActiveCooldown>> activeCooldowns { get; } = new ConcurrentDictionary<ulong, ConcurrentHashSet<ActiveCooldown>>();
|
||||||
@ -36,9 +36,9 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
}
|
}
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task CmdCooldown(IUserMessage imsg, Command command, int secs)
|
public async Task CmdCooldown(IUserMessage imsg, CommandInfo command, int secs)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
if (secs < 0 || secs > 3600)
|
if (secs < 0 || secs > 3600)
|
||||||
{
|
{
|
||||||
await channel.SendErrorAsync("Invalid second parameter. (Must be a number between 0 and 3600)").ConfigureAwait(false);
|
await channel.SendErrorAsync("Invalid second parameter. (Must be a number between 0 and 3600)").ConfigureAwait(false);
|
||||||
@ -50,8 +50,8 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
var config = uow.GuildConfigs.For(channel.Guild.Id, set => set.Include(gc => gc.CommandCooldowns));
|
var config = uow.GuildConfigs.For(channel.Guild.Id, set => set.Include(gc => gc.CommandCooldowns));
|
||||||
var localSet = commandCooldowns.GetOrAdd(channel.Guild.Id, new ConcurrentHashSet<CommandCooldown>());
|
var localSet = commandCooldowns.GetOrAdd(channel.Guild.Id, new ConcurrentHashSet<CommandCooldown>());
|
||||||
|
|
||||||
config.CommandCooldowns.RemoveWhere(cc => cc.CommandName == command.Text.ToLowerInvariant());
|
config.CommandCooldowns.RemoveWhere(cc => cc.CommandName == command.Aliases.First().ToLowerInvariant());
|
||||||
localSet.RemoveWhere(cc => cc.CommandName == command.Text.ToLowerInvariant());
|
localSet.RemoveWhere(cc => cc.CommandName == command.Aliases.First().ToLowerInvariant());
|
||||||
if (secs != 0)
|
if (secs != 0)
|
||||||
{
|
{
|
||||||
var cc = new CommandCooldown()
|
var cc = new CommandCooldown()
|
||||||
@ -80,9 +80,9 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task AllCmdCooldowns(IUserMessage imsg)
|
public async Task AllCmdCooldowns()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
var localSet = commandCooldowns.GetOrAdd(channel.Guild.Id, new ConcurrentHashSet<CommandCooldown>());
|
var localSet = commandCooldowns.GetOrAdd(channel.Guild.Id, new ConcurrentHashSet<CommandCooldown>());
|
||||||
|
|
||||||
if (!localSet.Any())
|
if (!localSet.Any())
|
||||||
|
@ -62,9 +62,9 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task SrvrFilterInv(IUserMessage imsg)
|
public async Task SrvrFilterInv()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
bool enabled;
|
bool enabled;
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
@ -88,9 +88,9 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task ChnlFilterInv(IUserMessage imsg)
|
public async Task ChnlFilterInv()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
int removed;
|
int removed;
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
@ -121,9 +121,9 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task SrvrFilterWords(IUserMessage imsg)
|
public async Task SrvrFilterWords()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
bool enabled;
|
bool enabled;
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
@ -147,9 +147,9 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task ChnlFilterWords(IUserMessage imsg)
|
public async Task ChnlFilterWords()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
int removed;
|
int removed;
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
@ -182,7 +182,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task FilterWord(IUserMessage imsg, [Remainder] string word)
|
public async Task FilterWord(IUserMessage imsg, [Remainder] string word)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
word = word?.Trim().ToLowerInvariant();
|
word = word?.Trim().ToLowerInvariant();
|
||||||
|
|
||||||
@ -220,9 +220,9 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task LstFilterWords(IUserMessage imsg)
|
public async Task LstFilterWords()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
ConcurrentHashSet<string> filteredWords;
|
ConcurrentHashSet<string> filteredWords;
|
||||||
ServerFilteredWords.TryGetValue(channel.Guild.Id, out filteredWords);
|
ServerFilteredWords.TryGetValue(channel.Guild.Id, out filteredWords);
|
||||||
|
@ -10,7 +10,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
{
|
{
|
||||||
public static class PermissionExtensions
|
public static class PermissionExtensions
|
||||||
{
|
{
|
||||||
public static bool CheckPermissions(this IEnumerable<Permission> permsEnumerable, IUserMessage message, Command command)
|
public static bool CheckPermissions(this IEnumerable<Permission> permsEnumerable, IUserMessage message, CommandInfo command)
|
||||||
{
|
{
|
||||||
var perms = permsEnumerable as List<Permission> ?? permsEnumerable.ToList();
|
var perms = permsEnumerable as List<Permission> ?? permsEnumerable.ToList();
|
||||||
int throwaway;
|
int throwaway;
|
||||||
@ -75,7 +75,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
case PrimaryPermissionType.Role:
|
case PrimaryPermissionType.Role:
|
||||||
if (guildUser == null)
|
if (guildUser == null)
|
||||||
break;
|
break;
|
||||||
if (guildUser.Roles.Any(r => r.Id == perm.PrimaryTargetId))
|
if (guildUser.RoleIds.Contains(perm.PrimaryTargetId))
|
||||||
return perm.State;
|
return perm.State;
|
||||||
break;
|
break;
|
||||||
case PrimaryPermissionType.Server:
|
case PrimaryPermissionType.Server:
|
||||||
|
@ -46,9 +46,9 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Verbose(IUserMessage msg, PermissionAction action)
|
public async Task Verbose(PermissionAction action)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)msg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
{
|
{
|
||||||
@ -68,9 +68,9 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task PermRole(IUserMessage msg, [Remainder] IRole role = null)
|
public async Task PermRole([Remainder] IRole role = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)msg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
{
|
{
|
||||||
var config = uow.GuildConfigs.For(channel.Guild.Id, set => set);
|
var config = uow.GuildConfigs.For(channel.Guild.Id, set => set);
|
||||||
@ -96,9 +96,9 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task ListPerms(IUserMessage msg, int page = 1)
|
public async Task ListPerms(int page = 1)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)msg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
if (page < 1 || page > 4)
|
if (page < 1 || page > 4)
|
||||||
return;
|
return;
|
||||||
@ -117,7 +117,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task RemovePerm(IUserMessage imsg, int index)
|
public async Task RemovePerm(IUserMessage imsg, int index)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
index -= 1;
|
index -= 1;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -154,7 +154,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
uow2._context.SaveChanges();
|
uow2._context.SaveChanges();
|
||||||
}
|
}
|
||||||
|
|
||||||
await channel.SendConfirmAsync($"✅ {imsg.Author.Mention} removed permission **{p.GetCommand(channel.Guild)}** from position #{index + 1}.").ConfigureAwait(false);
|
await channel.SendConfirmAsync($"✅ {Context.User.Mention} removed permission **{p.GetCommand(channel.Guild)}** from position #{index + 1}.").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
catch (ArgumentOutOfRangeException)
|
catch (ArgumentOutOfRangeException)
|
||||||
{
|
{
|
||||||
@ -168,7 +168,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
{
|
{
|
||||||
from -= 1;
|
from -= 1;
|
||||||
to -= 1;
|
to -= 1;
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
if (!(from == to || from < 0 || to < 0))
|
if (!(from == to || from < 0 || to < 0))
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@ -274,9 +274,9 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task SrvrCmd(IUserMessage imsg, Command command, PermissionAction action)
|
public async Task SrvrCmd(IUserMessage imsg, CommandInfo command, PermissionAction action)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
{
|
{
|
||||||
@ -285,7 +285,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
PrimaryTarget = PrimaryPermissionType.Server,
|
PrimaryTarget = PrimaryPermissionType.Server,
|
||||||
PrimaryTargetId = 0,
|
PrimaryTargetId = 0,
|
||||||
SecondaryTarget = SecondaryPermissionType.Command,
|
SecondaryTarget = SecondaryPermissionType.Command,
|
||||||
SecondaryTargetName = command.Text.ToLowerInvariant(),
|
SecondaryTargetName = command.Aliases.First().ToLowerInvariant(),
|
||||||
State = action.Value,
|
State = action.Value,
|
||||||
};
|
};
|
||||||
var config = uow.GuildConfigs.SetNewRootPermission(channel.Guild.Id, newPerm);
|
var config = uow.GuildConfigs.SetNewRootPermission(channel.Guild.Id, newPerm);
|
||||||
@ -298,14 +298,14 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
|
|
||||||
await uow.CompleteAsync().ConfigureAwait(false);
|
await uow.CompleteAsync().ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
await channel.SendConfirmAsync($"{(action.Value ? "✅ Allowed" : "🆗 Denied")} usage of `{command.Text}` command on this server.").ConfigureAwait(false);
|
await channel.SendConfirmAsync($"{(action.Value ? "✅ Allowed" : "🆗 Denied")} usage of `{command.Aliases.First()}` command on this server.").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task SrvrMdl(IUserMessage imsg, Module module, PermissionAction action)
|
public async Task SrvrMdl(IUserMessage imsg, ModuleInfo module, PermissionAction action)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
{
|
{
|
||||||
@ -331,9 +331,9 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task UsrCmd(IUserMessage imsg, Command command, PermissionAction action, [Remainder] IGuildUser user)
|
public async Task UsrCmd(IUserMessage imsg, CommandInfo command, PermissionAction action, [Remainder] IGuildUser user)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
{
|
{
|
||||||
@ -342,7 +342,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
PrimaryTarget = PrimaryPermissionType.User,
|
PrimaryTarget = PrimaryPermissionType.User,
|
||||||
PrimaryTargetId = user.Id,
|
PrimaryTargetId = user.Id,
|
||||||
SecondaryTarget = SecondaryPermissionType.Command,
|
SecondaryTarget = SecondaryPermissionType.Command,
|
||||||
SecondaryTargetName = command.Text.ToLowerInvariant(),
|
SecondaryTargetName = command.Aliases.First().ToLowerInvariant(),
|
||||||
State = action.Value,
|
State = action.Value,
|
||||||
};
|
};
|
||||||
var config = uow.GuildConfigs.SetNewRootPermission(channel.Guild.Id, newPerm);
|
var config = uow.GuildConfigs.SetNewRootPermission(channel.Guild.Id, newPerm);
|
||||||
@ -354,14 +354,14 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
}, (id, old) => { old.RootPermission = config.RootPermission; return old; });
|
}, (id, old) => { old.RootPermission = config.RootPermission; return old; });
|
||||||
await uow.CompleteAsync().ConfigureAwait(false);
|
await uow.CompleteAsync().ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
await channel.SendConfirmAsync($"{(action.Value ? "✅ Allowed" : "🆗 Denied")} usage of `{command.Text}` command for `{user}` user.").ConfigureAwait(false);
|
await channel.SendConfirmAsync($"{(action.Value ? "✅ Allowed" : "🆗 Denied")} usage of `{command.Aliases.First()}` command for `{user}` user.").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task UsrMdl(IUserMessage imsg, Module module, PermissionAction action, [Remainder] IGuildUser user)
|
public async Task UsrMdl(IUserMessage imsg, ModuleInfo module, PermissionAction action, [Remainder] IGuildUser user)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
{
|
{
|
||||||
@ -387,9 +387,9 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task RoleCmd(IUserMessage imsg, Command command, PermissionAction action, [Remainder] IRole role)
|
public async Task RoleCmd(IUserMessage imsg, CommandInfo command, PermissionAction action, [Remainder] IRole role)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
{
|
{
|
||||||
@ -398,7 +398,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
PrimaryTarget = PrimaryPermissionType.Role,
|
PrimaryTarget = PrimaryPermissionType.Role,
|
||||||
PrimaryTargetId = role.Id,
|
PrimaryTargetId = role.Id,
|
||||||
SecondaryTarget = SecondaryPermissionType.Command,
|
SecondaryTarget = SecondaryPermissionType.Command,
|
||||||
SecondaryTargetName = command.Text.ToLowerInvariant(),
|
SecondaryTargetName = command.Aliases.First().ToLowerInvariant(),
|
||||||
State = action.Value,
|
State = action.Value,
|
||||||
};
|
};
|
||||||
var config = uow.GuildConfigs.SetNewRootPermission(channel.Guild.Id, newPerm);
|
var config = uow.GuildConfigs.SetNewRootPermission(channel.Guild.Id, newPerm);
|
||||||
@ -410,14 +410,14 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
}, (id, old) => { old.RootPermission = config.RootPermission; return old; });
|
}, (id, old) => { old.RootPermission = config.RootPermission; return old; });
|
||||||
await uow.CompleteAsync().ConfigureAwait(false);
|
await uow.CompleteAsync().ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
await channel.SendConfirmAsync($"{(action.Value ? "✅ Allowed" : "🆗 Denied")} usage of `{command.Text}` command for `{role}` role.").ConfigureAwait(false);
|
await channel.SendConfirmAsync($"{(action.Value ? "✅ Allowed" : "🆗 Denied")} usage of `{command.Aliases.First()}` command for `{role}` role.").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task RoleMdl(IUserMessage imsg, Module module, PermissionAction action, [Remainder] IRole role)
|
public async Task RoleMdl(IUserMessage imsg, ModuleInfo module, PermissionAction action, [Remainder] IRole role)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
{
|
{
|
||||||
@ -443,9 +443,9 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task ChnlCmd(IUserMessage imsg, Command command, PermissionAction action, [Remainder] ITextChannel chnl)
|
public async Task ChnlCmd(IUserMessage imsg, CommandInfo command, PermissionAction action, [Remainder] ITextChannel chnl)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
@ -455,7 +455,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
PrimaryTarget = PrimaryPermissionType.Channel,
|
PrimaryTarget = PrimaryPermissionType.Channel,
|
||||||
PrimaryTargetId = chnl.Id,
|
PrimaryTargetId = chnl.Id,
|
||||||
SecondaryTarget = SecondaryPermissionType.Command,
|
SecondaryTarget = SecondaryPermissionType.Command,
|
||||||
SecondaryTargetName = command.Text.ToLowerInvariant(),
|
SecondaryTargetName = command.Aliases.First().ToLowerInvariant(),
|
||||||
State = action.Value,
|
State = action.Value,
|
||||||
};
|
};
|
||||||
var config = uow.GuildConfigs.SetNewRootPermission(channel.Guild.Id, newPerm);
|
var config = uow.GuildConfigs.SetNewRootPermission(channel.Guild.Id, newPerm);
|
||||||
@ -471,14 +471,14 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
catch (Exception ex) {
|
catch (Exception ex) {
|
||||||
_log.Error(ex);
|
_log.Error(ex);
|
||||||
}
|
}
|
||||||
await channel.SendConfirmAsync($"{(action.Value ? "✅ Allowed" : "🆗 Denied")} usage of `{command.Text}` command for `{chnl}` channel.").ConfigureAwait(false);
|
await channel.SendConfirmAsync($"{(action.Value ? "✅ Allowed" : "🆗 Denied")} usage of `{command.Aliases.First()}` command for `{chnl}` channel.").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task ChnlMdl(IUserMessage imsg, Module module, PermissionAction action, [Remainder] ITextChannel chnl)
|
public async Task ChnlMdl(IUserMessage imsg, ModuleInfo module, PermissionAction action, [Remainder] ITextChannel chnl)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
{
|
{
|
||||||
@ -506,7 +506,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task AllChnlMdls(IUserMessage imsg, PermissionAction action, [Remainder] ITextChannel chnl)
|
public async Task AllChnlMdls(IUserMessage imsg, PermissionAction action, [Remainder] ITextChannel chnl)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
{
|
{
|
||||||
@ -534,7 +534,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task AllRoleMdls(IUserMessage imsg, PermissionAction action, [Remainder] IRole role)
|
public async Task AllRoleMdls(IUserMessage imsg, PermissionAction action, [Remainder] IRole role)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
{
|
{
|
||||||
@ -562,7 +562,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task AllUsrMdls(IUserMessage imsg, PermissionAction action, [Remainder] IUser user)
|
public async Task AllUsrMdls(IUserMessage imsg, PermissionAction action, [Remainder] IUser user)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
{
|
{
|
||||||
@ -590,7 +590,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task AllSrvrMdls(IUserMessage imsg, PermissionAction action)
|
public async Task AllSrvrMdls(IUserMessage imsg, PermissionAction action)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
{
|
{
|
||||||
@ -607,7 +607,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
var allowUser = new Permission
|
var allowUser = new Permission
|
||||||
{
|
{
|
||||||
PrimaryTarget = PrimaryPermissionType.User,
|
PrimaryTarget = PrimaryPermissionType.User,
|
||||||
PrimaryTargetId = imsg.Author.Id,
|
PrimaryTargetId = Context.User.Id,
|
||||||
SecondaryTarget = SecondaryPermissionType.AllModules,
|
SecondaryTarget = SecondaryPermissionType.AllModules,
|
||||||
SecondaryTargetName = "*",
|
SecondaryTargetName = "*",
|
||||||
State = true,
|
State = true,
|
||||||
|
@ -16,7 +16,6 @@ using static NadekoBot.Modules.Gambling.Gambling;
|
|||||||
|
|
||||||
namespace NadekoBot.Modules.Pokemon
|
namespace NadekoBot.Modules.Pokemon
|
||||||
{
|
{
|
||||||
|
|
||||||
[NadekoModule("Pokemon", ">")]
|
[NadekoModule("Pokemon", ">")]
|
||||||
public partial class Pokemon : DiscordModule
|
public partial class Pokemon : DiscordModule
|
||||||
{
|
{
|
||||||
@ -99,8 +98,8 @@ namespace NadekoBot.Modules.Pokemon
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Attack(IUserMessage umsg, string move, IGuildUser targetUser = null)
|
public async Task Attack(IUserMessage umsg, string move, IGuildUser targetUser = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
IGuildUser user = (IGuildUser)umsg.Author;
|
IGuildUser user = (IGuildUser)Context.User;
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(move)) {
|
if (string.IsNullOrWhiteSpace(move)) {
|
||||||
return;
|
return;
|
||||||
@ -215,10 +214,10 @@ namespace NadekoBot.Modules.Pokemon
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Movelist(IUserMessage umsg)
|
public async Task Movelist()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
IGuildUser user = (IGuildUser)umsg.Author;
|
IGuildUser user = (IGuildUser)Context.User;
|
||||||
|
|
||||||
var userType = GetPokeType(user.Id);
|
var userType = GetPokeType(user.Id);
|
||||||
var movesList = userType.Moves;
|
var movesList = userType.Moves;
|
||||||
@ -234,8 +233,8 @@ namespace NadekoBot.Modules.Pokemon
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Heal(IUserMessage umsg, IGuildUser targetUser = null)
|
public async Task Heal(IUserMessage umsg, IGuildUser targetUser = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
IGuildUser user = (IGuildUser)umsg.Author;
|
IGuildUser user = (IGuildUser)Context.User;
|
||||||
|
|
||||||
if (targetUser == null) {
|
if (targetUser == null) {
|
||||||
await channel.SendMessageAsync("No such person.").ConfigureAwait(false);
|
await channel.SendMessageAsync("No such person.").ConfigureAwait(false);
|
||||||
@ -293,8 +292,8 @@ namespace NadekoBot.Modules.Pokemon
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Type(IUserMessage umsg, IGuildUser targetUser = null)
|
public async Task Type(IUserMessage umsg, IGuildUser targetUser = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
IGuildUser user = (IGuildUser)umsg.Author;
|
IGuildUser user = (IGuildUser)Context.User;
|
||||||
|
|
||||||
if (targetUser == null)
|
if (targetUser == null)
|
||||||
{
|
{
|
||||||
@ -310,13 +309,13 @@ namespace NadekoBot.Modules.Pokemon
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Settype(IUserMessage umsg, [Remainder] string typeTargeted = null)
|
public async Task Settype(IUserMessage umsg, [Remainder] string typeTargeted = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
IGuildUser user = (IGuildUser)umsg.Author;
|
IGuildUser user = (IGuildUser)Context.User;
|
||||||
|
|
||||||
var targetType = StringToPokemonType(typeTargeted);
|
var targetType = StringToPokemonType(typeTargeted);
|
||||||
if (targetType == null)
|
if (targetType == null)
|
||||||
{
|
{
|
||||||
await channel.EmbedAsync(PokemonTypes.Aggregate(new EmbedBuilder().WithDescription("List of the available types:"), (eb, pt) => eb.AddField(efb => efb.WithName(pt.Name).WithValue(pt.Icon).WithIsInline(true))).WithColor(NadekoBot.OkColor).Build()).ConfigureAwait(false);
|
await channel.EmbedAsync(PokemonTypes.Aggregate(new EmbedBuilder().WithDescription("List of the available types:"), (eb, pt) => eb.AddField(efb => efb.WithName(pt.Name).WithValue(pt.Icon).WithIsInline(true))).WithColor(NadekoBot.OkColor)).ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (targetType == GetPokeType(user.Id))
|
if (targetType == GetPokeType(user.Id))
|
||||||
|
@ -18,7 +18,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
public partial class Searches
|
public partial class Searches
|
||||||
{
|
{
|
||||||
[Group]
|
[Group]
|
||||||
public class AnimeSearchCommands
|
public class AnimeSearchCommands : ModuleBase
|
||||||
{
|
{
|
||||||
private static Timer anilistTokenRefresher { get; }
|
private static Timer anilistTokenRefresher { get; }
|
||||||
private static Logger _log { get; }
|
private static Logger _log { get; }
|
||||||
@ -56,7 +56,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Anime(IUserMessage umsg, [Remainder] string query)
|
public async Task Anime(IUserMessage umsg, [Remainder] string query)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(query))
|
if (string.IsNullOrWhiteSpace(query))
|
||||||
return;
|
return;
|
||||||
@ -65,37 +65,17 @@ namespace NadekoBot.Modules.Searches
|
|||||||
|
|
||||||
if (animeData == null)
|
if (animeData == null)
|
||||||
{
|
{
|
||||||
await umsg.Channel.SendErrorAsync("Failed finding that animu.").ConfigureAwait(false);
|
await Context.Channel.SendErrorAsync("Failed finding that animu.").ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
var embed = new EmbedBuilder().WithColor(NadekoBot.OkColor)
|
||||||
var embed = new Discord.API.Embed()
|
.WithDescription(animeData.Synopsis)
|
||||||
{
|
.WithTitle(animeData.title_english)
|
||||||
Description = animeData.Synopsis,
|
.WithUrl(animeData.Link)
|
||||||
Title = animeData.title_english,
|
.WithImageUrl(animeData.image_url_lge)
|
||||||
Url = animeData.Link,
|
.AddField(efb => efb.WithName("Episodes").WithValue(animeData.total_episodes.ToString()).WithIsInline(true))
|
||||||
Image = new Discord.API.EmbedImage() {
|
.AddField(efb => efb.WithName("Status").WithValue(animeData.AiringStatus.ToString()).WithIsInline(true))
|
||||||
Url = animeData.image_url_lge
|
.AddField(efb => efb.WithName("Genres").WithValue(String.Join(", ", animeData.Genres)).WithIsInline(true));
|
||||||
},
|
|
||||||
Fields = new[] {
|
|
||||||
new Discord.API.EmbedField() {
|
|
||||||
Inline = true,
|
|
||||||
Name = "Episodes",
|
|
||||||
Value = animeData.total_episodes.ToString()
|
|
||||||
},
|
|
||||||
new Discord.API.EmbedField() {
|
|
||||||
Inline = true,
|
|
||||||
Name = "Status",
|
|
||||||
Value = animeData.AiringStatus.ToString()
|
|
||||||
},
|
|
||||||
new Discord.API.EmbedField() {
|
|
||||||
Inline = true,
|
|
||||||
Name = "Genres",
|
|
||||||
Value = String.Join(", ", animeData.Genres)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
Color = NadekoBot.OkColor
|
|
||||||
};
|
|
||||||
await channel.EmbedAsync(embed).ConfigureAwait(false);
|
await channel.EmbedAsync(embed).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -103,7 +83,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Manga(IUserMessage umsg, [Remainder] string query)
|
public async Task Manga(IUserMessage umsg, [Remainder] string query)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(query))
|
if (string.IsNullOrWhiteSpace(query))
|
||||||
return;
|
return;
|
||||||
@ -112,38 +92,18 @@ namespace NadekoBot.Modules.Searches
|
|||||||
|
|
||||||
if (mangaData == null)
|
if (mangaData == null)
|
||||||
{
|
{
|
||||||
await umsg.Channel.SendErrorAsync("Failed finding that mango.").ConfigureAwait(false);
|
await Context.Channel.SendErrorAsync("Failed finding that mango.").ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var embed = new Discord.API.Embed()
|
var embed = new EmbedBuilder().WithColor(NadekoBot.OkColor)
|
||||||
{
|
.WithDescription(mangaData.Synopsis)
|
||||||
Description = mangaData.Synopsis,
|
.WithTitle(mangaData.title_english)
|
||||||
Title = mangaData.title_english,
|
.WithUrl(mangaData.Link)
|
||||||
Url = mangaData.Link,
|
.WithImageUrl(mangaData.image_url_lge)
|
||||||
Image = new Discord.API.EmbedImage()
|
.AddField(efb => efb.WithName("Episodes").WithValue(mangaData.total_chapters.ToString()).WithIsInline(true))
|
||||||
{
|
.AddField(efb => efb.WithName("Status").WithValue(mangaData.publishing_status.ToString()).WithIsInline(true))
|
||||||
Url = mangaData.image_url_lge
|
.AddField(efb => efb.WithName("Genres").WithValue(String.Join(", ", mangaData.Genres)).WithIsInline(true));
|
||||||
},
|
|
||||||
Fields = new[] {
|
|
||||||
new Discord.API.EmbedField() {
|
|
||||||
Inline = true,
|
|
||||||
Name = "Chapters",
|
|
||||||
Value = mangaData.total_chapters.ToString()
|
|
||||||
},
|
|
||||||
new Discord.API.EmbedField() {
|
|
||||||
Inline = true,
|
|
||||||
Name = "Status",
|
|
||||||
Value = mangaData.publishing_status.ToString()
|
|
||||||
},
|
|
||||||
new Discord.API.EmbedField() {
|
|
||||||
Inline = true,
|
|
||||||
Name = "Genres",
|
|
||||||
Value = String.Join(", ", mangaData.Genres)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
Color = NadekoBot.OkColor
|
|
||||||
};
|
|
||||||
|
|
||||||
await channel.EmbedAsync(embed).ConfigureAwait(false);
|
await channel.EmbedAsync(embed).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
public partial class Searches
|
public partial class Searches
|
||||||
{
|
{
|
||||||
[Group]
|
[Group]
|
||||||
public class JokeCommands
|
public class JokeCommands : ModuleBase
|
||||||
{
|
{
|
||||||
private static List<WoWJoke> wowJokes { get; } = new List<WoWJoke>();
|
private static List<WoWJoke> wowJokes { get; } = new List<WoWJoke>();
|
||||||
private static List<MagicItem> magicItems { get; } = new List<MagicItem>();
|
private static List<MagicItem> magicItems { get; } = new List<MagicItem>();
|
||||||
@ -44,62 +44,62 @@ namespace NadekoBot.Modules.Searches
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Yomama(IUserMessage msg)
|
public async Task Yomama()
|
||||||
{
|
{
|
||||||
using (var http = new HttpClient())
|
using (var http = new HttpClient())
|
||||||
{
|
{
|
||||||
var response = await http.GetStringAsync("http://api.yomomma.info/").ConfigureAwait(false);
|
var response = await http.GetStringAsync("http://api.yomomma.info/").ConfigureAwait(false);
|
||||||
await msg.Channel.SendConfirmAsync(JObject.Parse(response)["joke"].ToString() + " 😆").ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync(JObject.Parse(response)["joke"].ToString() + " 😆").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Randjoke(IUserMessage msg)
|
public async Task Randjoke()
|
||||||
{
|
{
|
||||||
using (var http = new HttpClient())
|
using (var http = new HttpClient())
|
||||||
{
|
{
|
||||||
var response = await http.GetStringAsync("http://tambal.azurewebsites.net/joke/random").ConfigureAwait(false);
|
var response = await http.GetStringAsync("http://tambal.azurewebsites.net/joke/random").ConfigureAwait(false);
|
||||||
await msg.Channel.SendConfirmAsync(JObject.Parse(response)["joke"].ToString() + " 😆").ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync(JObject.Parse(response)["joke"].ToString() + " 😆").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task ChuckNorris(IUserMessage msg)
|
public async Task ChuckNorris()
|
||||||
{
|
{
|
||||||
using (var http = new HttpClient())
|
using (var http = new HttpClient())
|
||||||
{
|
{
|
||||||
var response = await http.GetStringAsync("http://api.icndb.com/jokes/random/").ConfigureAwait(false);
|
var response = await http.GetStringAsync("http://api.icndb.com/jokes/random/").ConfigureAwait(false);
|
||||||
await msg.Channel.SendConfirmAsync(JObject.Parse(response)["value"]["joke"].ToString() + " 😆").ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync(JObject.Parse(response)["value"]["joke"].ToString() + " 😆").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task WowJoke(IUserMessage msg)
|
public async Task WowJoke()
|
||||||
{
|
{
|
||||||
if (!wowJokes.Any())
|
if (!wowJokes.Any())
|
||||||
{
|
{
|
||||||
await msg.Channel.SendErrorAsync("Jokes not loaded.").ConfigureAwait(false);
|
await Context.Channel.SendErrorAsync("Jokes not loaded.").ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var joke = wowJokes[new NadekoRandom().Next(0, wowJokes.Count)];
|
var joke = wowJokes[new NadekoRandom().Next(0, wowJokes.Count)];
|
||||||
await msg.Channel.SendConfirmAsync(joke.Question, joke.Answer).ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync(joke.Question, joke.Answer).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task MagicItem(IUserMessage msg)
|
public async Task MagicItem()
|
||||||
{
|
{
|
||||||
if (!wowJokes.Any())
|
if (!wowJokes.Any())
|
||||||
{
|
{
|
||||||
await msg.Channel.SendErrorAsync("MagicItems not loaded.").ConfigureAwait(false);
|
await Context.Channel.SendErrorAsync("MagicItems not loaded.").ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var item = magicItems[new NadekoRandom().Next(0, magicItems.Count)];
|
var item = magicItems[new NadekoRandom().Next(0, magicItems.Count)];
|
||||||
|
|
||||||
await msg.Channel.SendConfirmAsync("✨" + item.Name, item.Description).ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync("✨" + item.Name, item.Description).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -34,12 +34,8 @@ namespace NadekoBot.Modules.Searches
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Lolban(IUserMessage umsg)
|
public async Task Lolban()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var showCount = 8;
|
var showCount = 8;
|
||||||
//http://api.champion.gg/stats/champs/mostBanned?api_key=YOUR_API_TOKEN&page=1&limit=2
|
//http://api.champion.gg/stats/champs/mostBanned?api_key=YOUR_API_TOKEN&page=1&limit=2
|
||||||
try
|
try
|
||||||
@ -58,12 +54,12 @@ namespace NadekoBot.Modules.Searches
|
|||||||
eb.AddField(efb => efb.WithName(champ["name"].ToString()).WithValue(champ["general"]["banRate"] + "%").WithIsInline(true));
|
eb.AddField(efb => efb.WithName(champ["name"].ToString()).WithValue(champ["general"]["banRate"] + "%").WithIsInline(true));
|
||||||
}
|
}
|
||||||
|
|
||||||
await channel.EmbedAsync(eb.Build(), Format.Italics(trashTalk[new NadekoRandom().Next(0, trashTalk.Length)])).ConfigureAwait(false);
|
await Context.Channel.EmbedAsync(eb, Format.Italics(trashTalk[new NadekoRandom().Next(0, trashTalk.Length)])).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception)
|
||||||
{
|
{
|
||||||
await channel.SendMessageAsync("Something went wrong.").ConfigureAwait(false);
|
await Context.Channel.SendMessageAsync("Something went wrong.").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,9 +16,8 @@ namespace NadekoBot.Modules.Searches
|
|||||||
{
|
{
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Memelist(IUserMessage umsg)
|
public async Task Memelist()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
|
||||||
HttpClientHandler handler = new HttpClientHandler();
|
HttpClientHandler handler = new HttpClientHandler();
|
||||||
|
|
||||||
handler.AllowAutoRedirect = false;
|
handler.AllowAutoRedirect = false;
|
||||||
@ -29,7 +28,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
var data = JsonConvert.DeserializeObject<Dictionary<string, string>>(rawJson)
|
var data = JsonConvert.DeserializeObject<Dictionary<string, string>>(rawJson)
|
||||||
.Select(kvp => Path.GetFileName(kvp.Value));
|
.Select(kvp => Path.GetFileName(kvp.Value));
|
||||||
|
|
||||||
await channel.SendTableAsync(data, x => $"{x,-17}", 3).ConfigureAwait(false);
|
await Context.Channel.SendTableAsync(data, x => $"{x,-17}", 3).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -37,11 +36,9 @@ namespace NadekoBot.Modules.Searches
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Memegen(IUserMessage umsg, string meme, string topText, string botText)
|
public async Task Memegen(IUserMessage umsg, string meme, string topText, string botText)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
|
||||||
|
|
||||||
var top = Uri.EscapeDataString(topText.Replace(' ', '-'));
|
var top = Uri.EscapeDataString(topText.Replace(' ', '-'));
|
||||||
var bot = Uri.EscapeDataString(botText.Replace(' ', '-'));
|
var bot = Uri.EscapeDataString(botText.Replace(' ', '-'));
|
||||||
await channel.SendMessageAsync($"http://memegen.link/{meme}/{top}/{bot}.jpg")
|
await Context.Channel.SendMessageAsync($"http://memegen.link/{meme}/{top}/{bot}.jpg")
|
||||||
.ConfigureAwait(false);
|
.ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -34,7 +34,7 @@ namespace NadekoBot.Modules.Searches.Commands.OMDB
|
|||||||
public string Plot { get; set; }
|
public string Plot { get; set; }
|
||||||
public string Poster { get; set; }
|
public string Poster { get; set; }
|
||||||
|
|
||||||
public Embed GetEmbed() =>
|
public EmbedBuilder GetEmbed() =>
|
||||||
new EmbedBuilder().WithColor(NadekoBot.OkColor)
|
new EmbedBuilder().WithColor(NadekoBot.OkColor)
|
||||||
.WithTitle(Title)
|
.WithTitle(Title)
|
||||||
.WithUrl($"http://www.imdb.com/title/{ImdbId}/")
|
.WithUrl($"http://www.imdb.com/title/{ImdbId}/")
|
||||||
@ -42,8 +42,7 @@ namespace NadekoBot.Modules.Searches.Commands.OMDB
|
|||||||
.AddField(efb => efb.WithName("Rating").WithValue(ImdbRating).WithIsInline(true))
|
.AddField(efb => efb.WithName("Rating").WithValue(ImdbRating).WithIsInline(true))
|
||||||
.AddField(efb => efb.WithName("Genre").WithValue(Genre).WithIsInline(true))
|
.AddField(efb => efb.WithName("Genre").WithValue(Genre).WithIsInline(true))
|
||||||
.AddField(efb => efb.WithName("Year").WithValue(Year).WithIsInline(true))
|
.AddField(efb => efb.WithName("Year").WithValue(Year).WithIsInline(true))
|
||||||
.WithImage(eib => eib.WithUrl(Poster))
|
.WithImageUrl(Poster);
|
||||||
.Build();
|
|
||||||
|
|
||||||
public override string ToString() =>
|
public override string ToString() =>
|
||||||
$@"`Title:` {Title}
|
$@"`Title:` {Title}
|
||||||
|
@ -16,7 +16,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
public partial class Searches
|
public partial class Searches
|
||||||
{
|
{
|
||||||
[Group]
|
[Group]
|
||||||
public class OsuCommands
|
public class OsuCommands : ModuleBase
|
||||||
{
|
{
|
||||||
private static Logger _log { get; }
|
private static Logger _log { get; }
|
||||||
|
|
||||||
@ -26,10 +26,8 @@ namespace NadekoBot.Modules.Searches
|
|||||||
}
|
}
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Osu(IUserMessage umsg, string usr, [Remainder] string mode = null)
|
public async Task Osu(string usr, [Remainder] string mode = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(usr))
|
if (string.IsNullOrWhiteSpace(usr))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -48,11 +46,11 @@ namespace NadekoBot.Modules.Searches
|
|||||||
MemoryStream ms = new MemoryStream();
|
MemoryStream ms = new MemoryStream();
|
||||||
res.CopyTo(ms);
|
res.CopyTo(ms);
|
||||||
ms.Position = 0;
|
ms.Position = 0;
|
||||||
await channel.SendFileAsync(ms, $"{usr}.png", $"🎧 **Profile Link: **https://osu.ppy.sh/u/{Uri.EscapeDataString(usr)}\n`Image provided by https://lemmmy.pw/osusig`").ConfigureAwait(false);
|
await Context.Channel.SendFileAsync(ms, $"{usr}.png", $"🎧 **Profile Link: **https://osu.ppy.sh/u/{Uri.EscapeDataString(usr)}\n`Image provided by https://lemmmy.pw/osusig`").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
await channel.SendErrorAsync("Failed retrieving osu signature.").ConfigureAwait(false);
|
await Context.Channel.SendErrorAsync("Failed retrieving osu signature.").ConfigureAwait(false);
|
||||||
_log.Warn(ex, "Osu command failed");
|
_log.Warn(ex, "Osu command failed");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -62,7 +60,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Osub(IUserMessage umsg, [Remainder] string map)
|
public async Task Osub(IUserMessage umsg, [Remainder] string map)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(NadekoBot.Credentials.OsuApiKey))
|
if (string.IsNullOrWhiteSpace(NadekoBot.Credentials.OsuApiKey))
|
||||||
{
|
{
|
||||||
@ -99,7 +97,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Osu5(IUserMessage umsg, string user, [Remainder] string mode = null)
|
public async Task Osu5(IUserMessage umsg, string user, [Remainder] string mode = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
if (string.IsNullOrWhiteSpace(NadekoBot.Credentials.OsuApiKey))
|
if (string.IsNullOrWhiteSpace(NadekoBot.Credentials.OsuApiKey))
|
||||||
{
|
{
|
||||||
await channel.SendErrorAsync("An osu! API key is required.").ConfigureAwait(false);
|
await channel.SendErrorAsync("An osu! API key is required.").ConfigureAwait(false);
|
||||||
|
@ -16,7 +16,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
public partial class Searches
|
public partial class Searches
|
||||||
{
|
{
|
||||||
[Group]
|
[Group]
|
||||||
public class OverwatchCommands
|
public class OverwatchCommands : ModuleBase
|
||||||
{
|
{
|
||||||
private Logger _log;
|
private Logger _log;
|
||||||
public OverwatchCommands()
|
public OverwatchCommands()
|
||||||
@ -27,7 +27,6 @@ namespace NadekoBot.Modules.Searches
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Overwatch(IUserMessage umsg, string region, [Remainder] string query = null)
|
public async Task Overwatch(IUserMessage umsg, string region, [Remainder] string query = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
|
||||||
if (string.IsNullOrWhiteSpace(query))
|
if (string.IsNullOrWhiteSpace(query))
|
||||||
return;
|
return;
|
||||||
var battletag = Regex.Replace(query, "#", "-", RegexOptions.IgnoreCase);
|
var battletag = Regex.Replace(query, "#", "-", RegexOptions.IgnoreCase);
|
||||||
@ -43,7 +42,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
.WithAuthor(eau => eau.WithName($"{model.username}")
|
.WithAuthor(eau => eau.WithName($"{model.username}")
|
||||||
.WithUrl($"https://www.overbuff.com/players/pc/{battletag}")
|
.WithUrl($"https://www.overbuff.com/players/pc/{battletag}")
|
||||||
.WithIconUrl($"{model.avatar}"))
|
.WithIconUrl($"{model.avatar}"))
|
||||||
.WithThumbnail(th => th.WithUrl("https://cdn.discordapp.com/attachments/155726317222887425/255653487512256512/YZ4w2ey.png"))
|
.WithThumbnailUrl("https://cdn.discordapp.com/attachments/155726317222887425/255653487512256512/YZ4w2ey.png")
|
||||||
.AddField(fb => fb.WithName("**Level**").WithValue($"{model.level}").WithIsInline(true))
|
.AddField(fb => fb.WithName("**Level**").WithValue($"{model.level}").WithIsInline(true))
|
||||||
.AddField(fb => fb.WithName("**Quick Wins**").WithValue($"{model.Games.Quick.wins}").WithIsInline(true))
|
.AddField(fb => fb.WithName("**Quick Wins**").WithValue($"{model.Games.Quick.wins}").WithIsInline(true))
|
||||||
.AddField(fb => fb.WithName("**Current Competitive Wins**").WithValue($"{model.Games.Competitive.wins}").WithIsInline(true))
|
.AddField(fb => fb.WithName("**Current Competitive Wins**").WithValue($"{model.Games.Competitive.wins}").WithIsInline(true))
|
||||||
@ -53,7 +52,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
.AddField(fb => fb.WithName("**Competitive Playtime**").WithValue($"{model.Playtime.competitive}").WithIsInline(true))
|
.AddField(fb => fb.WithName("**Competitive Playtime**").WithValue($"{model.Playtime.competitive}").WithIsInline(true))
|
||||||
.AddField(fb => fb.WithName("**Quick Playtime**").WithValue($"{model.Playtime.quick}").WithIsInline(true))
|
.AddField(fb => fb.WithName("**Quick Playtime**").WithValue($"{model.Playtime.quick}").WithIsInline(true))
|
||||||
.WithColor(NadekoBot.OkColor);
|
.WithColor(NadekoBot.OkColor);
|
||||||
await channel.EmbedAsync(embed.Build()).ConfigureAwait(false);
|
await Context.Channel.EmbedAsync(embed).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -61,7 +60,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
.WithAuthor(eau => eau.WithName($"{model.username}")
|
.WithAuthor(eau => eau.WithName($"{model.username}")
|
||||||
.WithUrl($"https://www.overbuff.com/players/pc/{battletag}")
|
.WithUrl($"https://www.overbuff.com/players/pc/{battletag}")
|
||||||
.WithIconUrl($"{model.avatar}"))
|
.WithIconUrl($"{model.avatar}"))
|
||||||
.WithThumbnail(th => th.WithUrl(rankimg))
|
.WithThumbnailUrl(rankimg)
|
||||||
.AddField(fb => fb.WithName("**Level**").WithValue($"{model.level}").WithIsInline(true))
|
.AddField(fb => fb.WithName("**Level**").WithValue($"{model.level}").WithIsInline(true))
|
||||||
.AddField(fb => fb.WithName("**Quick Wins**").WithValue($"{model.Games.Quick.wins}").WithIsInline(true))
|
.AddField(fb => fb.WithName("**Quick Wins**").WithValue($"{model.Games.Quick.wins}").WithIsInline(true))
|
||||||
.AddField(fb => fb.WithName("**Current Competitive Wins**").WithValue($"{model.Games.Competitive.wins}").WithIsInline(true))
|
.AddField(fb => fb.WithName("**Current Competitive Wins**").WithValue($"{model.Games.Competitive.wins}").WithIsInline(true))
|
||||||
@ -71,32 +70,32 @@ namespace NadekoBot.Modules.Searches
|
|||||||
.AddField(fb => fb.WithName("**Competitive Playtime**").WithValue($"{model.Playtime.competitive}").WithIsInline(true))
|
.AddField(fb => fb.WithName("**Competitive Playtime**").WithValue($"{model.Playtime.competitive}").WithIsInline(true))
|
||||||
.AddField(fb => fb.WithName("**Quick Playtime**").WithValue($"{model.Playtime.quick}").WithIsInline(true))
|
.AddField(fb => fb.WithName("**Quick Playtime**").WithValue($"{model.Playtime.quick}").WithIsInline(true))
|
||||||
.WithColor(NadekoBot.OkColor);
|
.WithColor(NadekoBot.OkColor);
|
||||||
await channel.EmbedAsync(embed.Build()).ConfigureAwait(false);
|
await Context.Channel.EmbedAsync(embed).ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
await channel.SendErrorAsync("Found no user! Please check the **Region** and **BattleTag** before trying again.");
|
await Context.Channel.SendErrorAsync("Found no user! Please check the **Region** and **BattleTag** before trying again.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public async Task<OverwatchApiModel.OverwatchPlayer.Data> GetProfile(string region, string battletag)
|
public async Task<OverwatchApiModel.OverwatchPlayer.Data> GetProfile(string region, string battletag)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
using (var http = new HttpClient())
|
using (var http = new HttpClient())
|
||||||
{
|
{
|
||||||
var Url = await http.GetStringAsync($"https://api.lootbox.eu/pc/{region.ToLower()}/{battletag}/profile");
|
var Url = await http.GetStringAsync($"https://api.lootbox.eu/pc/{region.ToLower()}/{battletag}/profile");
|
||||||
var model = JsonConvert.DeserializeObject<OverwatchApiModel.OverwatchPlayer>(Url);
|
var model = JsonConvert.DeserializeObject<OverwatchApiModel.OverwatchPlayer>(Url);
|
||||||
return model.data;
|
return model.data;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
public partial class Searches
|
public partial class Searches
|
||||||
{
|
{
|
||||||
[Group]
|
[Group]
|
||||||
public class PlaceCommands
|
public class PlaceCommands : ModuleBase
|
||||||
{
|
{
|
||||||
string typesStr { get; } = "";
|
string typesStr { get; } = "";
|
||||||
public PlaceCommands()
|
public PlaceCommands()
|
||||||
@ -33,11 +33,9 @@ namespace NadekoBot.Modules.Searches
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Placelist(IUserMessage imsg)
|
public async Task Placelist()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
await Context.Channel.SendConfirmAsync(typesStr)
|
||||||
|
|
||||||
await channel.SendConfirmAsync(typesStr)
|
|
||||||
.ConfigureAwait(false);
|
.ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -45,8 +43,6 @@ namespace NadekoBot.Modules.Searches
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Place(IUserMessage imsg, PlaceType placeType, uint width = 0, uint height = 0)
|
public async Task Place(IUserMessage imsg, PlaceType placeType, uint width = 0, uint height = 0)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
|
||||||
|
|
||||||
string url = "";
|
string url = "";
|
||||||
switch (placeType)
|
switch (placeType)
|
||||||
{
|
{
|
||||||
@ -84,7 +80,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
|
|
||||||
url += $"/{width}/{height}";
|
url += $"/{width}/{height}";
|
||||||
|
|
||||||
await channel.SendMessageAsync(url).ConfigureAwait(false);
|
await Context.Channel.SendMessageAsync(url).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
public partial class Searches
|
public partial class Searches
|
||||||
{
|
{
|
||||||
[Group]
|
[Group]
|
||||||
public class PokemonSearchCommands
|
public class PokemonSearchCommands : ModuleBase
|
||||||
{
|
{
|
||||||
private static Dictionary<string, SearchPokemon> pokemons { get; } = new Dictionary<string, SearchPokemon>();
|
private static Dictionary<string, SearchPokemon> pokemons { get; } = new Dictionary<string, SearchPokemon>();
|
||||||
private static Dictionary<string, SearchPokemonAbility> pokemonAbilities { get; } = new Dictionary<string, SearchPokemonAbility>();
|
private static Dictionary<string, SearchPokemonAbility> pokemonAbilities { get; } = new Dictionary<string, SearchPokemonAbility>();
|
||||||
@ -42,10 +42,8 @@ namespace NadekoBot.Modules.Searches
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Pokemon(IUserMessage umsg, [Remainder] string pokemon = null)
|
public async Task Pokemon([Remainder] string pokemon = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
|
||||||
|
|
||||||
pokemon = pokemon?.Trim().ToUpperInvariant();
|
pokemon = pokemon?.Trim().ToUpperInvariant();
|
||||||
if (string.IsNullOrWhiteSpace(pokemon))
|
if (string.IsNullOrWhiteSpace(pokemon))
|
||||||
return;
|
return;
|
||||||
@ -55,25 +53,23 @@ namespace NadekoBot.Modules.Searches
|
|||||||
if (kvp.Key.ToUpperInvariant() == pokemon.ToUpperInvariant())
|
if (kvp.Key.ToUpperInvariant() == pokemon.ToUpperInvariant())
|
||||||
{
|
{
|
||||||
var p = kvp.Value;
|
var p = kvp.Value;
|
||||||
await channel.EmbedAsync(new EmbedBuilder().WithColor(NadekoBot.OkColor)
|
await Context.Channel.EmbedAsync(new EmbedBuilder().WithColor(NadekoBot.OkColor)
|
||||||
.WithTitle(kvp.Key.ToTitleCase())
|
.WithTitle(kvp.Key.ToTitleCase())
|
||||||
.WithDescription(p.BaseStats.ToString())
|
.WithDescription(p.BaseStats.ToString())
|
||||||
.AddField(efb => efb.WithName("Types").WithValue(string.Join(",\n", p.Types)).WithIsInline(true))
|
.AddField(efb => efb.WithName("Types").WithValue(string.Join(",\n", p.Types)).WithIsInline(true))
|
||||||
.AddField(efb => efb.WithName("Height/Weight").WithValue($"{p.HeightM}m/{p.WeightKg}kg").WithIsInline(true))
|
.AddField(efb => efb.WithName("Height/Weight").WithValue($"{p.HeightM}m/{p.WeightKg}kg").WithIsInline(true))
|
||||||
.AddField(efb => efb.WithName("Abilitities").WithValue(string.Join(",\n", p.Abilities.Select(a => a.Value))).WithIsInline(true))
|
.AddField(efb => efb.WithName("Abilitities").WithValue(string.Join(",\n", p.Abilities.Select(a => a.Value))).WithIsInline(true))
|
||||||
.Build());
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
await channel.SendErrorAsync("No pokemon found.");
|
await Context.Channel.SendErrorAsync("No pokemon found.");
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task PokemonAbility(IUserMessage umsg, [Remainder] string ability = null)
|
public async Task PokemonAbility([Remainder] string ability = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
|
||||||
|
|
||||||
ability = ability?.Trim().ToUpperInvariant().Replace(" ", "");
|
ability = ability?.Trim().ToUpperInvariant().Replace(" ", "");
|
||||||
if (string.IsNullOrWhiteSpace(ability))
|
if (string.IsNullOrWhiteSpace(ability))
|
||||||
return;
|
return;
|
||||||
@ -81,15 +77,15 @@ namespace NadekoBot.Modules.Searches
|
|||||||
{
|
{
|
||||||
if (kvp.Key.ToUpperInvariant() == ability)
|
if (kvp.Key.ToUpperInvariant() == ability)
|
||||||
{
|
{
|
||||||
await channel.EmbedAsync(new EmbedBuilder().WithColor(NadekoBot.OkColor)
|
await Context.Channel.EmbedAsync(new EmbedBuilder().WithColor(NadekoBot.OkColor)
|
||||||
.WithTitle(kvp.Value.Name)
|
.WithTitle(kvp.Value.Name)
|
||||||
.WithDescription(kvp.Value.Desc)
|
.WithDescription(kvp.Value.Desc)
|
||||||
.AddField(efb => efb.WithName("Rating").WithValue(kvp.Value.Rating.ToString()).WithIsInline(true))
|
.AddField(efb => efb.WithName("Rating").WithValue(kvp.Value.Rating.ToString()).WithIsInline(true))
|
||||||
.Build()).ConfigureAwait(false);
|
).ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
await channel.SendErrorAsync("No ability found.");
|
await Context.Channel.SendErrorAsync("No ability found.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
using Discord.Commands;
|
using Discord.Commands;
|
||||||
|
using Discord;
|
||||||
using Newtonsoft.Json.Linq;
|
using Newtonsoft.Json.Linq;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
@ -67,7 +68,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Group]
|
[Group]
|
||||||
public class StreamNotificationCommands
|
public class StreamNotificationCommands : ModuleBase
|
||||||
{
|
{
|
||||||
private static Timer checkTimer { get; }
|
private static Timer checkTimer { get; }
|
||||||
private static ConcurrentDictionary<string, StreamStatus> oldCachedStatuses = new ConcurrentDictionary<string, StreamStatus>();
|
private static ConcurrentDictionary<string, StreamStatus> oldCachedStatuses = new ConcurrentDictionary<string, StreamStatus>();
|
||||||
@ -105,10 +106,10 @@ namespace NadekoBot.Modules.Searches
|
|||||||
oldStatus.IsLive != newStatus.IsLive)
|
oldStatus.IsLive != newStatus.IsLive)
|
||||||
{
|
{
|
||||||
var server = NadekoBot.Client.GetGuild(fs.GuildId);
|
var server = NadekoBot.Client.GetGuild(fs.GuildId);
|
||||||
var channel = server?.GetTextChannel(fs.ChannelId);
|
var channel = server?.GetTextChannelAsync(fs.ChannelId);
|
||||||
if (channel == null)
|
if (channel == null)
|
||||||
return;
|
return;
|
||||||
try { await channel.EmbedAsync(fs.GetEmbed(newStatus).Build()).ConfigureAwait(false); } catch { }
|
try { await (await channel).EmbedAsync(fs.GetEmbed(newStatus)).ConfigureAwait(false); } catch { }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch { }
|
catch { }
|
||||||
@ -192,66 +193,62 @@ namespace NadekoBot.Modules.Searches
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.ManageMessages)]
|
[RequireUserPermission(GuildPermission.ManageMessages)]
|
||||||
public async Task Hitbox(IUserMessage msg, [Remainder] string username) =>
|
public async Task Hitbox([Remainder] string username) =>
|
||||||
await TrackStream((ITextChannel)msg.Channel, username, FollowedStream.FollowedStreamType.Hitbox)
|
await TrackStream((ITextChannel)Context.Channel, username, FollowedStream.FollowedStreamType.Hitbox)
|
||||||
.ConfigureAwait(false);
|
.ConfigureAwait(false);
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.ManageMessages)]
|
[RequireUserPermission(GuildPermission.ManageMessages)]
|
||||||
public async Task Twitch(IUserMessage msg, [Remainder] string username) =>
|
public async Task Twitch([Remainder] string username) =>
|
||||||
await TrackStream((ITextChannel)msg.Channel, username, FollowedStream.FollowedStreamType.Twitch)
|
await TrackStream((ITextChannel)Context.Channel, username, FollowedStream.FollowedStreamType.Twitch)
|
||||||
.ConfigureAwait(false);
|
.ConfigureAwait(false);
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.ManageMessages)]
|
[RequireUserPermission(GuildPermission.ManageMessages)]
|
||||||
public async Task Beam(IUserMessage msg, [Remainder] string username) =>
|
public async Task Beam([Remainder] string username) =>
|
||||||
await TrackStream((ITextChannel)msg.Channel, username, FollowedStream.FollowedStreamType.Beam)
|
await TrackStream((ITextChannel)Context.Channel, username, FollowedStream.FollowedStreamType.Beam)
|
||||||
.ConfigureAwait(false);
|
.ConfigureAwait(false);
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task ListStreams(IUserMessage imsg)
|
public async Task ListStreams()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
|
||||||
|
|
||||||
IEnumerable<FollowedStream> streams;
|
IEnumerable<FollowedStream> streams;
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
{
|
{
|
||||||
streams = uow.GuildConfigs
|
streams = uow.GuildConfigs
|
||||||
.For(channel.Guild.Id,
|
.For(Context.Guild.Id,
|
||||||
set => set.Include(gc => gc.FollowedStreams))
|
set => set.Include(gc => gc.FollowedStreams))
|
||||||
.FollowedStreams;
|
.FollowedStreams;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!streams.Any())
|
if (!streams.Any())
|
||||||
{
|
{
|
||||||
await channel.SendConfirmAsync("You are not following any streams on this server.").ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync("You are not following any streams on this server.").ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var text = string.Join("\n", streams.Select(snc =>
|
var text = string.Join("\n", streams.Select(snc =>
|
||||||
{
|
{
|
||||||
return $"`{snc.Username}`'s stream on **{channel.Guild.GetTextChannel(snc.ChannelId)?.Name}** channel. 【`{snc.Type.ToString()}`】";
|
return $"`{snc.Username}`'s stream on **{Context.Guild.GetTextChannel(snc.ChannelId)?.Name}** channel. 【`{snc.Type.ToString()}`】";
|
||||||
}));
|
}));
|
||||||
|
|
||||||
await channel.SendConfirmAsync($"You are following **{streams.Count()}** streams on this server.\n\n" + text).ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync($"You are following **{streams.Count()}** streams on this server.\n\n" + text).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.ManageMessages)]
|
[RequireUserPermission(GuildPermission.ManageMessages)]
|
||||||
public async Task RemoveStream(IUserMessage msg, FollowedStream.FollowedStreamType type, [Remainder] string username)
|
public async Task RemoveStream(FollowedStream.FollowedStreamType type, [Remainder] string username)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)msg.Channel;
|
|
||||||
|
|
||||||
username = username.ToLowerInvariant().Trim();
|
username = username.ToLowerInvariant().Trim();
|
||||||
|
|
||||||
var fs = new FollowedStream()
|
var fs = new FollowedStream()
|
||||||
{
|
{
|
||||||
ChannelId = channel.Id,
|
ChannelId = Context.Channel.Id,
|
||||||
Username = username,
|
Username = username,
|
||||||
Type = type
|
Type = type
|
||||||
};
|
};
|
||||||
@ -259,25 +256,23 @@ namespace NadekoBot.Modules.Searches
|
|||||||
bool removed;
|
bool removed;
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
{
|
{
|
||||||
var config = uow.GuildConfigs.For(channel.Guild.Id, set => set.Include(gc => gc.FollowedStreams));
|
var config = uow.GuildConfigs.For(Context.Guild.Id, set => set.Include(gc => gc.FollowedStreams));
|
||||||
removed = config.FollowedStreams.Remove(fs);
|
removed = config.FollowedStreams.Remove(fs);
|
||||||
if (removed)
|
if (removed)
|
||||||
await uow.CompleteAsync().ConfigureAwait(false);
|
await uow.CompleteAsync().ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
if (!removed)
|
if (!removed)
|
||||||
{
|
{
|
||||||
await channel.SendErrorAsync("No such stream.").ConfigureAwait(false);
|
await Context.Channel.SendErrorAsync("No such stream.").ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
await channel.SendConfirmAsync($"Removed `{username}`'s stream ({type}) from notifications.").ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync($"Removed `{username}`'s stream ({type}) from notifications.").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task CheckStream(IUserMessage imsg, FollowedStream.FollowedStreamType platform, [Remainder] string username)
|
public async Task CheckStream(IUserMessage imsg, FollowedStream.FollowedStreamType platform, [Remainder] string username)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
|
||||||
|
|
||||||
var stream = username?.Trim();
|
var stream = username?.Trim();
|
||||||
if (string.IsNullOrWhiteSpace(stream))
|
if (string.IsNullOrWhiteSpace(stream))
|
||||||
return;
|
return;
|
||||||
@ -290,20 +285,20 @@ namespace NadekoBot.Modules.Searches
|
|||||||
}));
|
}));
|
||||||
if (streamStatus.IsLive)
|
if (streamStatus.IsLive)
|
||||||
{
|
{
|
||||||
await channel.SendConfirmAsync($"Streamer {username} is online with {streamStatus.Views} viewers.");
|
await Context.Channel.SendConfirmAsync($"Streamer {username} is online with {streamStatus.Views} viewers.");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
await channel.SendConfirmAsync($"Streamer {username} is offline.");
|
await Context.Channel.SendConfirmAsync($"Streamer {username} is offline.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
await channel.SendErrorAsync("No channel found.");
|
await Context.Channel.SendErrorAsync("No channel found.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task TrackStream(ITextChannel channel, string username, FollowedStream.FollowedStreamType type)
|
private static async Task TrackStream(ITextChannel channel, string username, FollowedStream.FollowedStreamType type)
|
||||||
{
|
{
|
||||||
username = username.ToLowerInvariant().Trim();
|
username = username.ToLowerInvariant().Trim();
|
||||||
var fs = new FollowedStream
|
var fs = new FollowedStream
|
||||||
@ -332,7 +327,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
.Add(fs);
|
.Add(fs);
|
||||||
await uow.CompleteAsync().ConfigureAwait(false);
|
await uow.CompleteAsync().ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
await channel.EmbedAsync(fs.GetEmbed(status).Build(), $"🆗 I will notify this channel when status changes.").ConfigureAwait(false);
|
await channel.EmbedAsync(fs.GetEmbed(status), $"🆗 I will notify this channel when status changes.").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,7 @@ using System;
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using Discord.WebSocket;
|
||||||
|
|
||||||
namespace NadekoBot.Modules.Searches
|
namespace NadekoBot.Modules.Searches
|
||||||
{
|
{
|
||||||
@ -18,7 +19,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Group]
|
[Group]
|
||||||
public class TranslateCommands
|
public class TranslateCommands : ModuleBase
|
||||||
{
|
{
|
||||||
private static ConcurrentDictionary<ulong, bool> TranslatedChannels { get; }
|
private static ConcurrentDictionary<ulong, bool> TranslatedChannels { get; }
|
||||||
private static ConcurrentDictionary<UserChannelPair, string> UserLanguages { get; }
|
private static ConcurrentDictionary<UserChannelPair, string> UserLanguages { get; }
|
||||||
@ -30,7 +31,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
|
|
||||||
NadekoBot.Client.MessageReceived += (msg) =>
|
NadekoBot.Client.MessageReceived += (msg) =>
|
||||||
{
|
{
|
||||||
var umsg = msg as IUserMessage;
|
var umsg = msg as SocketUserMessage;
|
||||||
if(umsg == null)
|
if(umsg == null)
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
|
|
||||||
@ -52,7 +53,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var text = await TranslateInternal(umsg, langs, umsg.Resolve(UserMentionHandling.Ignore), true)
|
var text = await TranslateInternal(umsg, langs, umsg.Resolve(userHandling: TagHandling.Ignore), true)
|
||||||
.ConfigureAwait(false);
|
.ConfigureAwait(false);
|
||||||
if (autoDelete)
|
if (autoDelete)
|
||||||
try { await umsg.DeleteAsync().ConfigureAwait(false); } catch { }
|
try { await umsg.DeleteAsync().ConfigureAwait(false); } catch { }
|
||||||
@ -69,11 +70,11 @@ namespace NadekoBot.Modules.Searches
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Translate(IUserMessage umsg, string langs, [Remainder] string text = null)
|
public async Task Translate(IUserMessage umsg, string langs, [Remainder] string text = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await umsg.Channel.TriggerTypingAsync().ConfigureAwait(false);
|
await Context.Channel.TriggerTypingAsync().ConfigureAwait(false);
|
||||||
var translation = await TranslateInternal(umsg, langs, text);
|
var translation = await TranslateInternal(umsg, langs, text);
|
||||||
await channel.SendConfirmAsync("Translation " + langs, translation).ConfigureAwait(false);
|
await channel.SendConfirmAsync("Translation " + langs, translation).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
@ -104,11 +105,11 @@ namespace NadekoBot.Modules.Searches
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.Administrator)]
|
[RequireUserPermission(GuildPermission.Administrator)]
|
||||||
[OwnerOnly]
|
[OwnerOnly]
|
||||||
public async Task AutoTranslate(IUserMessage msg, AutoDeleteAutoTranslate autoDelete = AutoDeleteAutoTranslate.Nodel)
|
public async Task AutoTranslate(AutoDeleteAutoTranslate autoDelete = AutoDeleteAutoTranslate.Nodel)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)msg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
if (autoDelete == AutoDeleteAutoTranslate.Del)
|
if (autoDelete == AutoDeleteAutoTranslate.Del)
|
||||||
{
|
{
|
||||||
@ -131,20 +132,18 @@ namespace NadekoBot.Modules.Searches
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task AutoTransLang(IUserMessage msg, [Remainder] string langs = null)
|
public async Task AutoTransLang([Remainder] string langs = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)msg.Channel;
|
|
||||||
|
|
||||||
var ucp = new UserChannelPair
|
var ucp = new UserChannelPair
|
||||||
{
|
{
|
||||||
UserId = msg.Author.Id,
|
UserId = Context.User.Id,
|
||||||
ChannelId = msg.Channel.Id,
|
ChannelId = Context.Channel.Id,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(langs))
|
if (string.IsNullOrWhiteSpace(langs))
|
||||||
{
|
{
|
||||||
if (UserLanguages.TryRemove(ucp, out langs))
|
if (UserLanguages.TryRemove(ucp, out langs))
|
||||||
await channel.SendConfirmAsync($"{msg.Author.Mention}'s auto-translate language has been removed.").ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync($"{Context.User.Mention}'s auto-translate language has been removed.").ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -156,22 +155,20 @@ namespace NadekoBot.Modules.Searches
|
|||||||
|
|
||||||
if (!GoogleTranslator.Instance.Languages.Contains(from) || !GoogleTranslator.Instance.Languages.Contains(to))
|
if (!GoogleTranslator.Instance.Languages.Contains(from) || !GoogleTranslator.Instance.Languages.Contains(to))
|
||||||
{
|
{
|
||||||
try { await channel.SendErrorAsync("Invalid source and/or target language.").ConfigureAwait(false); } catch { }
|
try { await Context.Channel.SendErrorAsync("Invalid source and/or target language.").ConfigureAwait(false); } catch { }
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
UserLanguages.AddOrUpdate(ucp, langs, (key, val) => langs);
|
UserLanguages.AddOrUpdate(ucp, langs, (key, val) => langs);
|
||||||
|
|
||||||
await channel.SendConfirmAsync($"Your auto-translate language has been set to {from}>{to}").ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync($"Your auto-translate language has been set to {from}>{to}").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Translangs(IUserMessage umsg)
|
public async Task Translangs()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
await Context.Channel.SendTableAsync(GoogleTranslator.Instance.Languages, str => $"{str,-15}", columns: 3);
|
||||||
|
|
||||||
await channel.SendTableAsync(GoogleTranslator.Instance.Languages, str => $"{str,-15}", columns: 3);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -12,24 +12,21 @@ namespace NadekoBot.Modules.Searches
|
|||||||
public partial class Searches
|
public partial class Searches
|
||||||
{
|
{
|
||||||
[Group]
|
[Group]
|
||||||
public class XkcdCommands
|
public class XkcdCommands : ModuleBase
|
||||||
{
|
{
|
||||||
private const string xkcdUrl = "https://xkcd.com";
|
private const string xkcdUrl = "https://xkcd.com";
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
|
||||||
[Priority(1)]
|
[Priority(1)]
|
||||||
public async Task Xkcd(IUserMessage msg, string arg = null)
|
public async Task Xkcd(string arg = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)msg.Channel;
|
|
||||||
|
|
||||||
if (arg?.ToLowerInvariant().Trim() == "latest")
|
if (arg?.ToLowerInvariant().Trim() == "latest")
|
||||||
{
|
{
|
||||||
using (var http = new HttpClient())
|
using (var http = new HttpClient())
|
||||||
{
|
{
|
||||||
var res = await http.GetStringAsync($"{xkcdUrl}/info.0.json").ConfigureAwait(false);
|
var res = await http.GetStringAsync($"{xkcdUrl}/info.0.json").ConfigureAwait(false);
|
||||||
var comic = JsonConvert.DeserializeObject<XkcdComic>(res);
|
var comic = JsonConvert.DeserializeObject<XkcdComic>(res);
|
||||||
var sent = await channel.SendMessageAsync($"{msg.Author.Mention} " + comic.ToString())
|
var sent = await Context.Channel.SendMessageAsync($"{Context.User.Mention} " + comic.ToString())
|
||||||
.ConfigureAwait(false);
|
.ConfigureAwait(false);
|
||||||
|
|
||||||
await Task.Delay(10000).ConfigureAwait(false);
|
await Task.Delay(10000).ConfigureAwait(false);
|
||||||
@ -38,16 +35,13 @@ namespace NadekoBot.Modules.Searches
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
await Xkcd(msg, new NadekoRandom().Next(1, 1750)).ConfigureAwait(false);
|
await Xkcd(new NadekoRandom().Next(1, 1750)).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
|
||||||
[Priority(0)]
|
[Priority(0)]
|
||||||
public async Task Xkcd(IUserMessage msg, int num)
|
public async Task Xkcd(int num)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)msg.Channel;
|
|
||||||
|
|
||||||
if (num < 1)
|
if (num < 1)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -57,16 +51,16 @@ namespace NadekoBot.Modules.Searches
|
|||||||
|
|
||||||
var comic = JsonConvert.DeserializeObject<XkcdComic>(res);
|
var comic = JsonConvert.DeserializeObject<XkcdComic>(res);
|
||||||
var embed = new EmbedBuilder().WithColor(NadekoBot.OkColor)
|
var embed = new EmbedBuilder().WithColor(NadekoBot.OkColor)
|
||||||
.WithImage(eib => eib.WithUrl(comic.ImageLink))
|
.WithImageUrl(comic.ImageLink)
|
||||||
.WithAuthor(eab => eab.WithName(comic.Title).WithUrl($"{xkcdUrl}/{num}").WithIconUrl("http://xkcd.com/s/919f27.ico"))
|
.WithAuthor(eab => eab.WithName(comic.Title).WithUrl($"{xkcdUrl}/{num}").WithIconUrl("http://xkcd.com/s/919f27.ico"))
|
||||||
.AddField(efb => efb.WithName("Comic#").WithValue(comic.Num.ToString()).WithIsInline(true))
|
.AddField(efb => efb.WithName("Comic#").WithValue(comic.Num.ToString()).WithIsInline(true))
|
||||||
.AddField(efb => efb.WithName("Date").WithValue($"{comic.Month}/{comic.Year}").WithIsInline(true));
|
.AddField(efb => efb.WithName("Date").WithValue($"{comic.Month}/{comic.Year}").WithIsInline(true));
|
||||||
var sent = await channel.EmbedAsync(embed.Build())
|
var sent = await Context.Channel.EmbedAsync(embed)
|
||||||
.ConfigureAwait(false);
|
.ConfigureAwait(false);
|
||||||
|
|
||||||
await Task.Delay(10000).ConfigureAwait(false);
|
await Task.Delay(10000).ConfigureAwait(false);
|
||||||
|
|
||||||
await sent.ModifyAsync(m => m.Embed = embed.AddField(efb => efb.WithName("Alt").WithValue(comic.Alt.ToString()).WithIsInline(false)).Build());
|
await sent.ModifyAsync(m => m.Embed = embed.AddField(efb => efb.WithName("Alt").WithValue(comic.Alt.ToString()).WithIsInline(false)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,7 +27,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Weather(IUserMessage umsg, string city, string country)
|
public async Task Weather(IUserMessage umsg, string city, string country)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
city = city.Replace(" ", "");
|
city = city.Replace(" ", "");
|
||||||
country = city.Replace(" ", "");
|
country = city.Replace(" ", "");
|
||||||
string response;
|
string response;
|
||||||
@ -47,14 +47,14 @@ namespace NadekoBot.Modules.Searches
|
|||||||
.AddField(fb => fb.WithName("🌄 **Sunrise**").WithValue($"{obj["sunrise"]}").WithIsInline(true))
|
.AddField(fb => fb.WithName("🌄 **Sunrise**").WithValue($"{obj["sunrise"]}").WithIsInline(true))
|
||||||
.AddField(fb => fb.WithName("🌇 **Sunset**").WithValue($"{obj["sunset"]}").WithIsInline(true))
|
.AddField(fb => fb.WithName("🌇 **Sunset**").WithValue($"{obj["sunset"]}").WithIsInline(true))
|
||||||
.WithColor(NadekoBot.OkColor);
|
.WithColor(NadekoBot.OkColor);
|
||||||
await channel.EmbedAsync(embed.Build()).ConfigureAwait(false);
|
await channel.EmbedAsync(embed).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Youtube(IUserMessage umsg, [Remainder] string query = null)
|
public async Task Youtube(IUserMessage umsg, [Remainder] string query = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
if (!(await ValidateQuery(channel, query).ConfigureAwait(false))) return;
|
if (!(await ValidateQuery(channel, query).ConfigureAwait(false))) return;
|
||||||
var result = (await NadekoBot.Google.GetVideosByKeywordsAsync(query, 1)).FirstOrDefault();
|
var result = (await NadekoBot.Google.GetVideosByKeywordsAsync(query, 1)).FirstOrDefault();
|
||||||
if (string.IsNullOrWhiteSpace(result))
|
if (string.IsNullOrWhiteSpace(result))
|
||||||
@ -72,10 +72,10 @@ namespace NadekoBot.Modules.Searches
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Imdb(IUserMessage umsg, [Remainder] string query = null)
|
public async Task Imdb(IUserMessage umsg, [Remainder] string query = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
if (!(await ValidateQuery(channel, query).ConfigureAwait(false))) return;
|
if (!(await ValidateQuery(channel, query).ConfigureAwait(false))) return;
|
||||||
await umsg.Channel.TriggerTypingAsync().ConfigureAwait(false);
|
await Context.Channel.TriggerTypingAsync().ConfigureAwait(false);
|
||||||
|
|
||||||
var movie = await OmdbProvider.FindMovie(query);
|
var movie = await OmdbProvider.FindMovie(query);
|
||||||
if (movie == null)
|
if (movie == null)
|
||||||
@ -88,9 +88,9 @@ namespace NadekoBot.Modules.Searches
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task RandomCat(IUserMessage umsg)
|
public async Task RandomCat()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
using (var http = new HttpClient())
|
using (var http = new HttpClient())
|
||||||
{
|
{
|
||||||
var res = JObject.Parse(await http.GetStringAsync("http://www.random.cat/meow").ConfigureAwait(false));
|
var res = JObject.Parse(await http.GetStringAsync("http://www.random.cat/meow").ConfigureAwait(false));
|
||||||
@ -100,9 +100,9 @@ namespace NadekoBot.Modules.Searches
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task RandomDog(IUserMessage umsg)
|
public async Task RandomDog()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
using (var http = new HttpClient())
|
using (var http = new HttpClient())
|
||||||
{
|
{
|
||||||
await channel.SendMessageAsync("http://random.dog/" + await http.GetStringAsync("http://random.dog/woof")
|
await channel.SendMessageAsync("http://random.dog/" + await http.GetStringAsync("http://random.dog/woof")
|
||||||
@ -114,7 +114,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task I(IUserMessage umsg, [Remainder] string query = null)
|
public async Task I(IUserMessage umsg, [Remainder] string query = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(query))
|
if (string.IsNullOrWhiteSpace(query))
|
||||||
return;
|
return;
|
||||||
@ -145,7 +145,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Ir(IUserMessage umsg, [Remainder] string query = null)
|
public async Task Ir(IUserMessage umsg, [Remainder] string query = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(query))
|
if (string.IsNullOrWhiteSpace(query))
|
||||||
return;
|
return;
|
||||||
@ -178,7 +178,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Lmgtfy(IUserMessage umsg, [Remainder] string ffs = null)
|
public async Task Lmgtfy(IUserMessage umsg, [Remainder] string ffs = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(ffs))
|
if (string.IsNullOrWhiteSpace(ffs))
|
||||||
@ -190,7 +190,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Shorten(IUserMessage msg, [Remainder] string arg)
|
public async Task Shorten([Remainder] string arg)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrWhiteSpace(arg))
|
if (string.IsNullOrWhiteSpace(arg))
|
||||||
return;
|
return;
|
||||||
@ -199,15 +199,14 @@ namespace NadekoBot.Modules.Searches
|
|||||||
|
|
||||||
if (shortened == arg)
|
if (shortened == arg)
|
||||||
{
|
{
|
||||||
await msg.Channel.SendErrorAsync("Failed to shorten that url.").ConfigureAwait(false);
|
await Context.Channel.SendErrorAsync("Failed to shorten that url.").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
await msg.Channel.EmbedAsync(new EmbedBuilder().WithColor(NadekoBot.OkColor)
|
await Context.Channel.EmbedAsync(new EmbedBuilder().WithColor(NadekoBot.OkColor)
|
||||||
.AddField(efb => efb.WithName("Original Url")
|
.AddField(efb => efb.WithName("Original Url")
|
||||||
.WithValue($"<{arg}>"))
|
.WithValue($"<{arg}>"))
|
||||||
.AddField(efb => efb.WithName("Short Url")
|
.AddField(efb => efb.WithName("Short Url")
|
||||||
.WithValue($"<{shortened}>"))
|
.WithValue($"<{shortened}>")))
|
||||||
.Build())
|
|
||||||
.ConfigureAwait(false);
|
.ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -215,7 +214,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Google(IUserMessage umsg, [Remainder] string terms = null)
|
public async Task Google(IUserMessage umsg, [Remainder] string terms = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
terms = terms?.Trim();
|
terms = terms?.Trim();
|
||||||
if (string.IsNullOrWhiteSpace(terms))
|
if (string.IsNullOrWhiteSpace(terms))
|
||||||
@ -229,7 +228,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task MagicTheGathering(IUserMessage umsg, [Remainder] string name = null)
|
public async Task MagicTheGathering(IUserMessage umsg, [Remainder] string name = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
var arg = name;
|
var arg = name;
|
||||||
if (string.IsNullOrWhiteSpace(arg))
|
if (string.IsNullOrWhiteSpace(arg))
|
||||||
{
|
{
|
||||||
@ -237,7 +236,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
await umsg.Channel.TriggerTypingAsync().ConfigureAwait(false);
|
await Context.Channel.TriggerTypingAsync().ConfigureAwait(false);
|
||||||
string response = "";
|
string response = "";
|
||||||
using (var http = new HttpClient())
|
using (var http = new HttpClient())
|
||||||
{
|
{
|
||||||
@ -258,13 +257,13 @@ namespace NadekoBot.Modules.Searches
|
|||||||
var embed = new EmbedBuilder().WithColor(NadekoBot.OkColor)
|
var embed = new EmbedBuilder().WithColor(NadekoBot.OkColor)
|
||||||
.WithTitle(item["name"].ToString())
|
.WithTitle(item["name"].ToString())
|
||||||
.WithDescription(desc)
|
.WithDescription(desc)
|
||||||
.WithImage(eib => eib.WithUrl(img))
|
.WithImageUrl(img)
|
||||||
.AddField(efb => efb.WithName("Store Url").WithValue(storeUrl).WithIsInline(true))
|
.AddField(efb => efb.WithName("Store Url").WithValue(storeUrl).WithIsInline(true))
|
||||||
.AddField(efb => efb.WithName("Cost").WithValue(cost).WithIsInline(true))
|
.AddField(efb => efb.WithName("Cost").WithValue(cost).WithIsInline(true))
|
||||||
.AddField(efb => efb.WithName("Types").WithValue(types).WithIsInline(true));
|
.AddField(efb => efb.WithName("Types").WithValue(types).WithIsInline(true));
|
||||||
//.AddField(efb => efb.WithName("Store Url").WithValue(await NadekoBot.Google.ShortenUrl(items[0]["store_url"].ToString())).WithIsInline(true));
|
//.AddField(efb => efb.WithName("Store Url").WithValue(await NadekoBot.Google.ShortenUrl(items[0]["store_url"].ToString())).WithIsInline(true));
|
||||||
|
|
||||||
await channel.EmbedAsync(embed.Build()).ConfigureAwait(false);
|
await channel.EmbedAsync(embed).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
@ -277,7 +276,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Hearthstone(IUserMessage umsg, [Remainder] string name = null)
|
public async Task Hearthstone(IUserMessage umsg, [Remainder] string name = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
var arg = name;
|
var arg = name;
|
||||||
if (string.IsNullOrWhiteSpace(arg))
|
if (string.IsNullOrWhiteSpace(arg))
|
||||||
{
|
{
|
||||||
@ -291,7 +290,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
await umsg.Channel.TriggerTypingAsync().ConfigureAwait(false);
|
await Context.Channel.TriggerTypingAsync().ConfigureAwait(false);
|
||||||
string response = "";
|
string response = "";
|
||||||
using (var http = new HttpClient())
|
using (var http = new HttpClient())
|
||||||
{
|
{
|
||||||
@ -321,7 +320,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
msg = "⚠ Found over 4 images. Showing random 4.";
|
msg = "⚠ Found over 4 images. Showing random 4.";
|
||||||
}
|
}
|
||||||
var ms = new MemoryStream();
|
var ms = new MemoryStream();
|
||||||
images.Merge().SaveAsPng(ms);
|
images.AsEnumerable().Merge().SaveAsPng(ms);
|
||||||
ms.Position = 0;
|
ms.Position = 0;
|
||||||
await channel.SendFileAsync(ms, arg + ".png", msg).ConfigureAwait(false);
|
await channel.SendFileAsync(ms, arg + ".png", msg).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
@ -337,7 +336,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Yodify(IUserMessage umsg, [Remainder] string query = null)
|
public async Task Yodify(IUserMessage umsg, [Remainder] string query = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(NadekoBot.Credentials.MashapeKey))
|
if (string.IsNullOrWhiteSpace(NadekoBot.Credentials.MashapeKey))
|
||||||
{
|
{
|
||||||
@ -351,7 +350,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
await channel.SendErrorAsync("Please enter a sentence.").ConfigureAwait(false);
|
await channel.SendErrorAsync("Please enter a sentence.").ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
await umsg.Channel.TriggerTypingAsync().ConfigureAwait(false);
|
await Context.Channel.TriggerTypingAsync().ConfigureAwait(false);
|
||||||
using (var http = new HttpClient())
|
using (var http = new HttpClient())
|
||||||
{
|
{
|
||||||
http.DefaultRequestHeaders.Clear();
|
http.DefaultRequestHeaders.Clear();
|
||||||
@ -365,7 +364,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
.WithAuthor(au => au.WithName("Yoda").WithIconUrl("http://www.yodaspeak.co.uk/yoda-small1.gif"))
|
.WithAuthor(au => au.WithName("Yoda").WithIconUrl("http://www.yodaspeak.co.uk/yoda-small1.gif"))
|
||||||
.WithDescription(res)
|
.WithDescription(res)
|
||||||
.WithColor(NadekoBot.OkColor);
|
.WithColor(NadekoBot.OkColor);
|
||||||
await channel.EmbedAsync(embed.Build()).ConfigureAwait(false);
|
await channel.EmbedAsync(embed).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
@ -378,7 +377,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task UrbanDict(IUserMessage umsg, [Remainder] string query = null)
|
public async Task UrbanDict(IUserMessage umsg, [Remainder] string query = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(NadekoBot.Credentials.MashapeKey))
|
if (string.IsNullOrWhiteSpace(NadekoBot.Credentials.MashapeKey))
|
||||||
{
|
{
|
||||||
@ -392,7 +391,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
await channel.SendErrorAsync("Please enter a search term.").ConfigureAwait(false);
|
await channel.SendErrorAsync("Please enter a search term.").ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
await umsg.Channel.TriggerTypingAsync().ConfigureAwait(false);
|
await Context.Channel.TriggerTypingAsync().ConfigureAwait(false);
|
||||||
using (var http = new HttpClient())
|
using (var http = new HttpClient())
|
||||||
{
|
{
|
||||||
http.DefaultRequestHeaders.Clear();
|
http.DefaultRequestHeaders.Clear();
|
||||||
@ -409,7 +408,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
.WithUrl(link)
|
.WithUrl(link)
|
||||||
.WithAuthor(eab => eab.WithIconUrl("http://i.imgur.com/nwERwQE.jpg").WithName(word))
|
.WithAuthor(eab => eab.WithIconUrl("http://i.imgur.com/nwERwQE.jpg").WithName(word))
|
||||||
.WithDescription(def);
|
.WithDescription(def);
|
||||||
await channel.EmbedAsync(embed.Build()).ConfigureAwait(false);
|
await channel.EmbedAsync(embed).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
@ -422,7 +421,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Hashtag(IUserMessage umsg, [Remainder] string query = null)
|
public async Task Hashtag(IUserMessage umsg, [Remainder] string query = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
var arg = query;
|
var arg = query;
|
||||||
if (string.IsNullOrWhiteSpace(arg))
|
if (string.IsNullOrWhiteSpace(arg))
|
||||||
@ -436,7 +435,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
await umsg.Channel.TriggerTypingAsync().ConfigureAwait(false);
|
await Context.Channel.TriggerTypingAsync().ConfigureAwait(false);
|
||||||
string res = "";
|
string res = "";
|
||||||
using (var http = new HttpClient())
|
using (var http = new HttpClient())
|
||||||
{
|
{
|
||||||
@ -456,8 +455,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
.WithAuthor(eab => eab.WithUrl(link)
|
.WithAuthor(eab => eab.WithUrl(link)
|
||||||
.WithIconUrl("http://res.cloudinary.com/urbandictionary/image/upload/a_exif,c_fit,h_200,w_200/v1394975045/b8oszuu3tbq7ebyo7vo1.jpg")
|
.WithIconUrl("http://res.cloudinary.com/urbandictionary/image/upload/a_exif,c_fit,h_200,w_200/v1394975045/b8oszuu3tbq7ebyo7vo1.jpg")
|
||||||
.WithName(query))
|
.WithName(query))
|
||||||
.WithDescription(desc)
|
.WithDescription(desc));
|
||||||
.Build());
|
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
@ -467,9 +465,9 @@ namespace NadekoBot.Modules.Searches
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Catfact(IUserMessage umsg)
|
public async Task Catfact()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
using (var http = new HttpClient())
|
using (var http = new HttpClient())
|
||||||
{
|
{
|
||||||
var response = await http.GetStringAsync("http://catfacts-api.appspot.com/api/facts").ConfigureAwait(false);
|
var response = await http.GetStringAsync("http://catfacts-api.appspot.com/api/facts").ConfigureAwait(false);
|
||||||
@ -485,10 +483,10 @@ namespace NadekoBot.Modules.Searches
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Revav(IUserMessage umsg, [Remainder] IUser usr = null)
|
public async Task Revav(IUserMessage umsg, [Remainder] IUser usr = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
if (usr == null)
|
if (usr == null)
|
||||||
usr = umsg.Author;
|
usr = Context.User;
|
||||||
await channel.SendConfirmAsync($"https://images.google.com/searchbyimage?image_url={usr.AvatarUrl}").ConfigureAwait(false);
|
await channel.SendConfirmAsync($"https://images.google.com/searchbyimage?image_url={usr.AvatarUrl}").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -496,7 +494,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Revimg(IUserMessage umsg, [Remainder] string imageLink = null)
|
public async Task Revimg(IUserMessage umsg, [Remainder] string imageLink = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
imageLink = imageLink?.Trim() ?? "";
|
imageLink = imageLink?.Trim() ?? "";
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(imageLink))
|
if (string.IsNullOrWhiteSpace(imageLink))
|
||||||
@ -508,7 +506,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Safebooru(IUserMessage umsg, [Remainder] string tag = null)
|
public async Task Safebooru(IUserMessage umsg, [Remainder] string tag = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
tag = tag?.Trim() ?? "";
|
tag = tag?.Trim() ?? "";
|
||||||
var link = await GetSafebooruImageLink(tag).ConfigureAwait(false);
|
var link = await GetSafebooruImageLink(tag).ConfigureAwait(false);
|
||||||
@ -522,7 +520,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Wiki(IUserMessage umsg, [Remainder] string query = null)
|
public async Task Wiki(IUserMessage umsg, [Remainder] string query = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
query = query?.Trim();
|
query = query?.Trim();
|
||||||
if (string.IsNullOrWhiteSpace(query))
|
if (string.IsNullOrWhiteSpace(query))
|
||||||
@ -542,7 +540,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Color(IUserMessage umsg, [Remainder] string color = null)
|
public async Task Color(IUserMessage umsg, [Remainder] string color = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
color = color?.Trim().Replace("#", "");
|
color = color?.Trim().Replace("#", "");
|
||||||
if (string.IsNullOrWhiteSpace((string)color))
|
if (string.IsNullOrWhiteSpace((string)color))
|
||||||
@ -562,11 +560,11 @@ namespace NadekoBot.Modules.Searches
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Videocall(IUserMessage umsg, [Remainder] string arg = null)
|
public async Task Videocall(IUserMessage umsg, [Remainder] string arg = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var allUsrs = umsg.MentionedUsers.Append(umsg.Author);
|
var allUsrs = umsg.MentionedUsers.Append(Context.User);
|
||||||
var allUsrsArray = allUsrs.ToArray();
|
var allUsrsArray = allUsrs.ToArray();
|
||||||
var str = allUsrsArray.Aggregate("http://appear.in/", (current, usr) => current + Uri.EscapeUriString(usr.Username[0].ToString()));
|
var str = allUsrsArray.Aggregate("http://appear.in/", (current, usr) => current + Uri.EscapeUriString(usr.Username[0].ToString()));
|
||||||
str += new NadekoRandom().Next();
|
str += new NadekoRandom().Next();
|
||||||
@ -585,9 +583,9 @@ namespace NadekoBot.Modules.Searches
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Avatar(IUserMessage umsg, [Remainder] string mention = null)
|
public async Task Avatar(IUserMessage umsg, [Remainder] string mention = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
var usr = umsg.MentionedUsers.FirstOrDefault();
|
var usr = umsg.MentionedUsers().FirstOrDefault();
|
||||||
if (usr == null)
|
if (usr == null)
|
||||||
{
|
{
|
||||||
await channel.SendErrorAsync("Invalid user specified.").ConfigureAwait(false);
|
await channel.SendErrorAsync("Invalid user specified.").ConfigureAwait(false);
|
||||||
@ -616,13 +614,13 @@ namespace NadekoBot.Modules.Searches
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Wikia(IUserMessage umsg, string target, [Remainder] string query = null)
|
public async Task Wikia(IUserMessage umsg, string target, [Remainder] string query = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
if (string.IsNullOrWhiteSpace(target) || string.IsNullOrWhiteSpace(query))
|
if (string.IsNullOrWhiteSpace(target) || string.IsNullOrWhiteSpace(query))
|
||||||
{
|
{
|
||||||
await channel.SendErrorAsync("Please enter a target wikia, followed by search query.").ConfigureAwait(false);
|
await channel.SendErrorAsync("Please enter a target wikia, followed by search query.").ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
await umsg.Channel.TriggerTypingAsync().ConfigureAwait(false);
|
await Context.Channel.TriggerTypingAsync().ConfigureAwait(false);
|
||||||
using (var http = new HttpClient())
|
using (var http = new HttpClient())
|
||||||
{
|
{
|
||||||
http.DefaultRequestHeaders.Clear();
|
http.DefaultRequestHeaders.Clear();
|
||||||
@ -647,14 +645,14 @@ namespace NadekoBot.Modules.Searches
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task MCPing(IUserMessage umsg, [Remainder] string query = null)
|
public async Task MCPing(IUserMessage umsg, [Remainder] string query = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
var arg = query;
|
var arg = query;
|
||||||
if (string.IsNullOrWhiteSpace(arg))
|
if (string.IsNullOrWhiteSpace(arg))
|
||||||
{
|
{
|
||||||
await channel.SendErrorAsync("💢 Please enter a `ip:port`.").ConfigureAwait(false);
|
await channel.SendErrorAsync("💢 Please enter a `ip:port`.").ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
await umsg.Channel.TriggerTypingAsync().ConfigureAwait(false);
|
await Context.Channel.TriggerTypingAsync().ConfigureAwait(false);
|
||||||
using (var http = new HttpClient())
|
using (var http = new HttpClient())
|
||||||
{
|
{
|
||||||
http.DefaultRequestHeaders.Clear();
|
http.DefaultRequestHeaders.Clear();
|
||||||
@ -684,14 +682,14 @@ namespace NadekoBot.Modules.Searches
|
|||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task MCQ(IUserMessage umsg, [Remainder] string query = null)
|
public async Task MCQ(IUserMessage umsg, [Remainder] string query = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
var arg = query;
|
var arg = query;
|
||||||
if (string.IsNullOrWhiteSpace(arg))
|
if (string.IsNullOrWhiteSpace(arg))
|
||||||
{
|
{
|
||||||
await channel.SendErrorAsync("Please enter `ip:port`.").ConfigureAwait(false);
|
await channel.SendErrorAsync("Please enter `ip:port`.").ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
await umsg.Channel.TriggerTypingAsync().ConfigureAwait(false);
|
await Context.Channel.TriggerTypingAsync().ConfigureAwait(false);
|
||||||
using (var http = new HttpClient())
|
using (var http = new HttpClient())
|
||||||
{
|
{
|
||||||
http.DefaultRequestHeaders.Clear();
|
http.DefaultRequestHeaders.Clear();
|
||||||
|
@ -75,7 +75,7 @@
|
|||||||
// .Parameter("board_id", Discord.Commands.ParameterType.Required)
|
// .Parameter("board_id", Discord.Commands.ParameterType.Required)
|
||||||
// .Do(async e =>
|
// .Do(async e =>
|
||||||
// {
|
// {
|
||||||
// if (!NadekoBot.IsOwner(umsg.Author.Id)) return;
|
// if (!NadekoBot.IsOwner(Context.User.Id)) return;
|
||||||
// if (bound != null) return;
|
// if (bound != null) return;
|
||||||
// try
|
// try
|
||||||
// {
|
// {
|
||||||
@ -95,7 +95,7 @@
|
|||||||
// .Description($"Unbinds a bot from the channel and board. **Bot Owner Only!**| `{Prefix}unbind`")
|
// .Description($"Unbinds a bot from the channel and board. **Bot Owner Only!**| `{Prefix}unbind`")
|
||||||
// .Do(async e =>
|
// .Do(async e =>
|
||||||
// {
|
// {
|
||||||
// if (!NadekoBot.IsOwner(umsg.Author.Id)) return;
|
// if (!NadekoBot.IsOwner(Context.User.Id)) return;
|
||||||
// if (bound == null || bound != e.Channel) return;
|
// if (bound == null || bound != e.Channel) return;
|
||||||
// t.Stop();
|
// t.Stop();
|
||||||
// bound = null;
|
// bound = null;
|
||||||
@ -109,7 +109,7 @@
|
|||||||
// .Description($"Lists all lists, yo ;) **Bot Owner Only!**| `{Prefix}list`")
|
// .Description($"Lists all lists, yo ;) **Bot Owner Only!**| `{Prefix}list`")
|
||||||
// .Do(async e =>
|
// .Do(async e =>
|
||||||
// {
|
// {
|
||||||
// if (!NadekoBot.IsOwner(umsg.Author.Id)) return;
|
// if (!NadekoBot.IsOwner(Context.User.Id)) return;
|
||||||
// if (bound == null || board == null || bound != e.Channel) return;
|
// if (bound == null || board == null || bound != e.Channel) return;
|
||||||
// await channel.SendMessageAsync("Lists for a board '" + board.Name + "'\n" + string.Join("\n", board.Lists.Select(l => "**• " + l.ToString() + "**")))
|
// await channel.SendMessageAsync("Lists for a board '" + board.Name + "'\n" + string.Join("\n", board.Lists.Select(l => "**• " + l.ToString() + "**")))
|
||||||
// .ConfigureAwait(false);
|
// .ConfigureAwait(false);
|
||||||
@ -120,7 +120,7 @@
|
|||||||
// .Parameter("list_name", Discord.Commands.ParameterType.Unparsed)
|
// .Parameter("list_name", Discord.Commands.ParameterType.Unparsed)
|
||||||
// .Do(async e =>
|
// .Do(async e =>
|
||||||
// {
|
// {
|
||||||
// if (!NadekoBot.IsOwner(umsg.Author.Id)) return;
|
// if (!NadekoBot.IsOwner(Context.User.Id)) return;
|
||||||
// if (bound == null || board == null || bound != e.Channel || list_name == null) return;
|
// if (bound == null || board == null || bound != e.Channel || list_name == null) return;
|
||||||
|
|
||||||
// int num;
|
// int num;
|
||||||
|
@ -16,15 +16,15 @@ namespace NadekoBot.Modules.Utility
|
|||||||
{
|
{
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public static async Task Calculate(IUserMessage msg, [Remainder] string expression)
|
public async Task Calculate([Remainder] string expression)
|
||||||
{
|
{
|
||||||
var expr = new NCalc.Expression(expression, NCalc.EvaluateOptions.IgnoreCase);
|
var expr = new NCalc.Expression(expression, NCalc.EvaluateOptions.IgnoreCase);
|
||||||
expr.EvaluateParameter += Expr_EvaluateParameter;
|
expr.EvaluateParameter += Expr_EvaluateParameter;
|
||||||
var result = expr.Evaluate();
|
var result = expr.Evaluate();
|
||||||
if (expr.Error == null)
|
if (expr.Error == null)
|
||||||
await msg.Channel.SendConfirmAsync("Result", $"{result}");
|
await Context.Channel.SendConfirmAsync("Result", $"{result}");
|
||||||
else
|
else
|
||||||
await msg.Channel.SendErrorAsync($"⚙ Error", expr.Error);
|
await Context.Channel.SendErrorAsync($"⚙ Error", expr.Error);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void Expr_EvaluateParameter(string name, NCalc.ParameterArgs args)
|
private static void Expr_EvaluateParameter(string name, NCalc.ParameterArgs args)
|
||||||
@ -39,7 +39,7 @@ namespace NadekoBot.Modules.Utility
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task CalcOps(IUserMessage msg)
|
public async Task CalcOps()
|
||||||
{
|
{
|
||||||
var selection = typeof(Math).GetTypeInfo().GetMethods().Except(typeof(object).GetTypeInfo().GetMethods()).Distinct(new MethodInfoEqualityComparer()).Select(x =>
|
var selection = typeof(Math).GetTypeInfo().GetMethods().Except(typeof(object).GetTypeInfo().GetMethods()).Distinct(new MethodInfoEqualityComparer()).Select(x =>
|
||||||
{
|
{
|
||||||
@ -49,7 +49,7 @@ namespace NadekoBot.Modules.Utility
|
|||||||
"Equals",
|
"Equals",
|
||||||
"GetHashCode",
|
"GetHashCode",
|
||||||
"GetType"});
|
"GetType"});
|
||||||
await msg.Channel.SendConfirmAsync(string.Join(", ",selection));
|
await Context.Channel.SendConfirmAsync(string.Join(", ",selection));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,9 +14,9 @@ namespace NadekoBot.Modules.Utility
|
|||||||
{
|
{
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task ServerInfo(IUserMessage msg, string guildName = null)
|
public async Task ServerInfo(string guildName = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)msg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
guildName = guildName?.ToUpperInvariant();
|
guildName = guildName?.ToUpperInvariant();
|
||||||
IGuild guild;
|
IGuild guild;
|
||||||
if (string.IsNullOrWhiteSpace(guildName))
|
if (string.IsNullOrWhiteSpace(guildName))
|
||||||
@ -43,24 +43,24 @@ namespace NadekoBot.Modules.Utility
|
|||||||
.AddField(fb => fb.WithName("**Created At**").WithValue($"{createdAt.ToString("dd.MM.yyyy HH:mm")}").WithIsInline(true))
|
.AddField(fb => fb.WithName("**Created At**").WithValue($"{createdAt.ToString("dd.MM.yyyy HH:mm")}").WithIsInline(true))
|
||||||
.AddField(fb => fb.WithName("**Region**").WithValue(guild.VoiceRegionId.ToString()).WithIsInline(true))
|
.AddField(fb => fb.WithName("**Region**").WithValue(guild.VoiceRegionId.ToString()).WithIsInline(true))
|
||||||
.AddField(fb => fb.WithName("**Roles**").WithValue(guild.Roles.Count().ToString()).WithIsInline(true))
|
.AddField(fb => fb.WithName("**Roles**").WithValue(guild.Roles.Count().ToString()).WithIsInline(true))
|
||||||
.WithImage(tn => tn.WithUrl(guild.IconUrl))
|
.WithImageUrl(guild.IconUrl)
|
||||||
.WithColor(NadekoBot.OkColor);
|
.WithColor(NadekoBot.OkColor);
|
||||||
if (guild.Emojis.Count() > 0)
|
if (guild.Emojis.Count() > 0)
|
||||||
{
|
{
|
||||||
embed.AddField(fb => fb.WithName("**Custom Emojis**").WithValue(Format.Italics(string.Join(", ", guild.Emojis))).WithIsInline(true));
|
embed.AddField(fb => fb.WithName("**Custom Emojis**").WithValue(Format.Italics(string.Join(", ", guild.Emojis))).WithIsInline(true));
|
||||||
}
|
}
|
||||||
await msg.Channel.EmbedAsync(embed.Build()).ConfigureAwait(false);
|
await Context.Channel.EmbedAsync(embed).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task ChannelInfo(IUserMessage msg, ITextChannel channel = null)
|
public async Task ChannelInfo(ITextChannel channel = null)
|
||||||
{
|
{
|
||||||
var ch = channel ?? (ITextChannel)msg.Channel;
|
var ch = channel ?? (ITextChannel)Context.Channel;
|
||||||
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 usercount = (await ch.GetUsersAsync()).Count();
|
var usercount = (await ch.GetUsersAsync().Flatten()).Count();
|
||||||
var embed = new EmbedBuilder()
|
var embed = new EmbedBuilder()
|
||||||
.WithTitle(ch.Name)
|
.WithTitle(ch.Name)
|
||||||
.WithDescription(ch.Topic?.SanitizeMentions())
|
.WithDescription(ch.Topic?.SanitizeMentions())
|
||||||
@ -68,15 +68,15 @@ namespace NadekoBot.Modules.Utility
|
|||||||
.AddField(fb => fb.WithName("**Created At**").WithValue($"{createdAt.ToString("dd.MM.yyyy HH:mm")}").WithIsInline(true))
|
.AddField(fb => fb.WithName("**Created At**").WithValue($"{createdAt.ToString("dd.MM.yyyy HH:mm")}").WithIsInline(true))
|
||||||
.AddField(fb => fb.WithName("**Users**").WithValue(usercount.ToString()).WithIsInline(true))
|
.AddField(fb => fb.WithName("**Users**").WithValue(usercount.ToString()).WithIsInline(true))
|
||||||
.WithColor(NadekoBot.OkColor);
|
.WithColor(NadekoBot.OkColor);
|
||||||
await msg.Channel.EmbedAsync(embed.Build()).ConfigureAwait(false);
|
await Context.Channel.EmbedAsync(embed).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task UserInfo(IUserMessage msg, IGuildUser usr = null)
|
public async Task UserInfo(IGuildUser usr = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)msg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
var user = usr ?? msg.Author as IGuildUser;
|
var user = usr ?? Context.User as IGuildUser;
|
||||||
|
|
||||||
if (user == null)
|
if (user == null)
|
||||||
return;
|
return;
|
||||||
@ -89,11 +89,11 @@ namespace NadekoBot.Modules.Utility
|
|||||||
embed.AddField(fb => fb.WithName("**ID**").WithValue(user.Id.ToString()).WithIsInline(true))
|
embed.AddField(fb => fb.WithName("**ID**").WithValue(user.Id.ToString()).WithIsInline(true))
|
||||||
.AddField(fb => fb.WithName("**Joined Server**").WithValue($"{user.JoinedAt?.ToString("dd.MM.yyyy HH:mm")}").WithIsInline(true))
|
.AddField(fb => fb.WithName("**Joined Server**").WithValue($"{user.JoinedAt?.ToString("dd.MM.yyyy HH:mm")}").WithIsInline(true))
|
||||||
.AddField(fb => fb.WithName("**Joined Discord**").WithValue($"{user.CreatedAt.ToString("dd.MM.yyyy HH:mm")}").WithIsInline(true))
|
.AddField(fb => fb.WithName("**Joined Discord**").WithValue($"{user.CreatedAt.ToString("dd.MM.yyyy HH:mm")}").WithIsInline(true))
|
||||||
.AddField(fb => fb.WithName("**Current Game**").WithValue($"{(user.Game?.Name == null ? "-" : user.Game.Name)}").WithIsInline(true))
|
.AddField(fb => fb.WithName("**Current Game**").WithValue($"{(user.Game?.Name == null ? "-" : user.Game.Value.Name)}").WithIsInline(true))
|
||||||
.AddField(fb => fb.WithName("**Roles**").WithValue($"**({user.Roles.Count()})** - {string.Join(", ", user.Roles.Select(r => r.Name)).SanitizeMentions()}").WithIsInline(true))
|
.AddField(fb => fb.WithName("**Roles**").WithValue($"**({user.RoleIds.Count})** - {string.Join(", ", user.Roles.Select(r => r.Name)).SanitizeMentions()}").WithIsInline(true))
|
||||||
.WithThumbnail(tn => tn.WithUrl(user.AvatarUrl))
|
.WithThumbnail(tn => tn.WithUrl(user.AvatarUrl))
|
||||||
.WithColor(NadekoBot.OkColor);
|
.WithColor(NadekoBot.OkColor);
|
||||||
await msg.Channel.EmbedAsync(embed.Build()).ConfigureAwait(false);
|
await Context.Channel.EmbedAsync(embed).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,10 +15,8 @@ namespace NadekoBot.Modules.Utility
|
|||||||
{
|
{
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task ListQuotes(IUserMessage imsg, int page = 1)
|
public async Task ListQuotes(int page = 1)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
|
||||||
|
|
||||||
page -= 1;
|
page -= 1;
|
||||||
|
|
||||||
if (page < 0)
|
if (page < 0)
|
||||||
@ -27,22 +25,20 @@ namespace NadekoBot.Modules.Utility
|
|||||||
IEnumerable<Quote> quotes;
|
IEnumerable<Quote> quotes;
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
{
|
{
|
||||||
quotes = uow.Quotes.GetGroup(channel.Guild.Id, page * 16, 16);
|
quotes = uow.Quotes.GetGroup(Context.Guild.Id, page * 16, 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (quotes.Any())
|
if (quotes.Any())
|
||||||
await channel.SendConfirmAsync($"💬 **Page {page + 1} of quotes:**\n```xl\n" + String.Join("\n", quotes.Select((q) => $"{q.Keyword,-20} by {q.AuthorName}")) + "\n```")
|
await Context.Channel.SendConfirmAsync($"💬 **Page {page + 1} of quotes:**\n```xl\n" + String.Join("\n", quotes.Select((q) => $"{q.Keyword,-20} by {q.AuthorName}")) + "\n```")
|
||||||
.ConfigureAwait(false);
|
.ConfigureAwait(false);
|
||||||
else
|
else
|
||||||
await channel.SendErrorAsync("No quotes on this page.").ConfigureAwait(false);
|
await Context.Channel.SendErrorAsync("No quotes on this page.").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task ShowQuote(IUserMessage umsg, [Remainder] string keyword)
|
public async Task ShowQuote([Remainder] string keyword)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(keyword))
|
if (string.IsNullOrWhiteSpace(keyword))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -51,21 +47,19 @@ namespace NadekoBot.Modules.Utility
|
|||||||
Quote quote;
|
Quote quote;
|
||||||
using (var uow = DbHandler.Instance.GetUnitOfWork())
|
using (var uow = DbHandler.Instance.GetUnitOfWork())
|
||||||
{
|
{
|
||||||
quote = await uow.Quotes.GetRandomQuoteByKeywordAsync(channel.Guild.Id, keyword).ConfigureAwait(false);
|
quote = await uow.Quotes.GetRandomQuoteByKeywordAsync(Context.Guild.Id, keyword).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (quote == null)
|
if (quote == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
await channel.SendMessageAsync("📣 " + quote.Text.SanitizeMentions());
|
await Context.Channel.SendMessageAsync("📣 " + quote.Text.SanitizeMentions());
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task AddQuote(IUserMessage umsg, string keyword, [Remainder] string text)
|
public async Task AddQuote(string keyword, [Remainder] string text)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(keyword) || string.IsNullOrWhiteSpace(text))
|
if (string.IsNullOrWhiteSpace(keyword) || string.IsNullOrWhiteSpace(text))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -75,56 +69,52 @@ namespace NadekoBot.Modules.Utility
|
|||||||
{
|
{
|
||||||
uow.Quotes.Add(new Quote
|
uow.Quotes.Add(new Quote
|
||||||
{
|
{
|
||||||
AuthorId = umsg.Author.Id,
|
AuthorId = Context.Message.Author.Id,
|
||||||
AuthorName = umsg.Author.Username,
|
AuthorName = Context.Message.Author.Username,
|
||||||
GuildId = channel.Guild.Id,
|
GuildId = Context.Guild.Id,
|
||||||
Keyword = keyword,
|
Keyword = keyword,
|
||||||
Text = text,
|
Text = text,
|
||||||
});
|
});
|
||||||
await uow.CompleteAsync().ConfigureAwait(false);
|
await uow.CompleteAsync().ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
await channel.SendConfirmAsync("✅ Quote added.").ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync("✅ Quote added.").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task DeleteQuote(IUserMessage umsg, [Remainder] string keyword)
|
public async Task DeleteQuote([Remainder] string keyword)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(keyword))
|
if (string.IsNullOrWhiteSpace(keyword))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var isAdmin = ((IGuildUser)umsg.Author).GuildPermissions.Administrator;
|
var isAdmin = ((IGuildUser)Context.Message.Author).GuildPermissions.Administrator;
|
||||||
|
|
||||||
keyword = keyword.ToUpperInvariant();
|
keyword = keyword.ToUpperInvariant();
|
||||||
string response;
|
string response;
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
{
|
{
|
||||||
var qs = uow.Quotes.GetAllQuotesByKeyword(channel.Guild.Id, keyword);
|
var qs = uow.Quotes.GetAllQuotesByKeyword(Context.Guild.Id, keyword);
|
||||||
|
|
||||||
if (qs==null || !qs.Any())
|
if (qs==null || !qs.Any())
|
||||||
{
|
{
|
||||||
await channel.SendErrorAsync("No quotes found.");
|
await Context.Channel.SendErrorAsync("No quotes found.").ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var q = qs.Shuffle().FirstOrDefault(elem => isAdmin || elem.AuthorId == umsg.Author.Id);
|
var q = qs.Shuffle().FirstOrDefault(elem => isAdmin || elem.AuthorId == Context.Message.Author.Id);
|
||||||
|
|
||||||
uow.Quotes.Remove(q);
|
uow.Quotes.Remove(q);
|
||||||
await uow.CompleteAsync().ConfigureAwait(false);
|
await uow.CompleteAsync().ConfigureAwait(false);
|
||||||
response = "🗑 **Deleted a random quote.**";
|
response = "🗑 **Deleted a random quote.**";
|
||||||
}
|
}
|
||||||
await channel.SendConfirmAsync(response);
|
await Context.Channel.SendConfirmAsync(response);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
[RequirePermission(GuildPermission.Administrator)]
|
[RequireUserPermission(GuildPermission.Administrator)]
|
||||||
public async Task DelAllQuotes(IUserMessage umsg, [Remainder] string keyword)
|
public async Task DelAllQuotes([Remainder] string keyword)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(keyword))
|
if (string.IsNullOrWhiteSpace(keyword))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -132,14 +122,14 @@ namespace NadekoBot.Modules.Utility
|
|||||||
|
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
{
|
{
|
||||||
var quotes = uow.Quotes.GetAllQuotesByKeyword(channel.Guild.Id, keyword);
|
var quotes = uow.Quotes.GetAllQuotesByKeyword(Context.Guild.Id, keyword);
|
||||||
|
|
||||||
uow.Quotes.RemoveRange(quotes.ToArray());//wtf?!
|
uow.Quotes.RemoveRange(quotes.ToArray());//wtf?!
|
||||||
|
|
||||||
await uow.CompleteAsync();
|
await uow.CompleteAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
await channel.SendConfirmAsync($"🗑 **Deleted all quotes** with **{keyword}** keyword.");
|
await Context.Channel.SendConfirmAsync($"🗑 **Deleted all quotes** with **{keyword}** keyword.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,7 +17,7 @@ namespace NadekoBot.Modules.Utility
|
|||||||
public partial class Utility
|
public partial class Utility
|
||||||
{
|
{
|
||||||
[Group]
|
[Group]
|
||||||
public class RemindCommands
|
public class RemindCommands : ModuleBase
|
||||||
{
|
{
|
||||||
|
|
||||||
Regex regex = new Regex(@"^(?:(?<months>\d)mo)?(?:(?<weeks>\d)w)?(?:(?<days>\d{1,2})d)?(?:(?<hours>\d{1,2})h)?(?:(?<minutes>\d{1,2})m)?$",
|
Regex regex = new Regex(@"^(?:(?<months>\d)mo)?(?:(?<weeks>\d)w)?(?:(?<days>\d{1,2})d)?(?:(?<hours>\d{1,2})h)?(?:(?<minutes>\d{1,2})m)?$",
|
||||||
@ -62,14 +62,16 @@ namespace NadekoBot.Modules.Utility
|
|||||||
await Task.Delay(time);
|
await Task.Delay(time);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
IMessageChannel ch;
|
IMessageChannel ch = null;
|
||||||
if (r.IsPrivate)
|
if (r.IsPrivate)
|
||||||
{
|
{
|
||||||
ch = await NadekoBot.Client.GetDMChannelAsync(r.ChannelId).ConfigureAwait(false);
|
ch = await NadekoBot.Client.GetDMChannelAsync(r.ChannelId).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ch = NadekoBot.Client.GetGuild(r.ServerId)?.GetTextChannel(r.ChannelId);
|
var t = NadekoBot.Client.GetGuild(r.ServerId)?.GetTextChannelAsync(r.ChannelId).ConfigureAwait(false);
|
||||||
|
if (t != null)
|
||||||
|
ch = await t.Value;
|
||||||
}
|
}
|
||||||
if (ch == null)
|
if (ch == null)
|
||||||
return;
|
return;
|
||||||
@ -101,16 +103,14 @@ namespace NadekoBot.Modules.Utility
|
|||||||
[Priority(1)]
|
[Priority(1)]
|
||||||
public async Task Remind(IUserMessage umsg, MeOrHere meorhere, string timeStr, [Remainder] string message)
|
public async Task Remind(IUserMessage umsg, MeOrHere meorhere, string timeStr, [Remainder] string message)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
|
||||||
|
|
||||||
IMessageChannel target;
|
IMessageChannel target;
|
||||||
if (meorhere == MeOrHere.Me)
|
if (meorhere == MeOrHere.Me)
|
||||||
{
|
{
|
||||||
target = await ((IGuildUser)umsg.Author).CreateDMChannelAsync().ConfigureAwait(false);
|
target = await ((IGuildUser)Context.User).CreateDMChannelAsync().ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
target = channel;
|
target = Context.Channel;
|
||||||
}
|
}
|
||||||
await Remind(umsg, target, timeStr, message).ConfigureAwait(false);
|
await Remind(umsg, target, timeStr, message).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
@ -120,11 +120,11 @@ namespace NadekoBot.Modules.Utility
|
|||||||
[Priority(0)]
|
[Priority(0)]
|
||||||
public async Task Remind(IUserMessage umsg, IMessageChannel ch, string timeStr, [Remainder] string message)
|
public async Task Remind(IUserMessage umsg, IMessageChannel ch, string timeStr, [Remainder] string message)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
if (ch == null)
|
if (ch == null)
|
||||||
{
|
{
|
||||||
await channel.SendErrorAsync($"{umsg.Author.Mention} Something went wrong (channel cannot be found) ;(").ConfigureAwait(false);
|
await channel.SendErrorAsync($"{Context.User.Mention} Something went wrong (channel cannot be found) ;(").ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -177,7 +177,7 @@ namespace NadekoBot.Modules.Utility
|
|||||||
IsPrivate = ch is IDMChannel,
|
IsPrivate = ch is IDMChannel,
|
||||||
When = time,
|
When = time,
|
||||||
Message = message,
|
Message = message,
|
||||||
UserId = umsg.Author.Id,
|
UserId = Context.User.Id,
|
||||||
ServerId = channel.Guild.Id
|
ServerId = channel.Guild.Id
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -187,7 +187,7 @@ namespace NadekoBot.Modules.Utility
|
|||||||
await uow.CompleteAsync();
|
await uow.CompleteAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
try { await channel.SendConfirmAsync($"⏰ I will remind **\"{(ch is ITextChannel ? ((ITextChannel)ch).Name : umsg.Author.Username)}\"** to **\"{message.SanitizeMentions()}\"** in **{output}** `({time:d.M.yyyy.} at {time:HH:mm})`").ConfigureAwait(false); } catch { }
|
try { await channel.SendConfirmAsync($"⏰ I will remind **\"{(ch is ITextChannel ? ((ITextChannel)ch).Name : Context.User.Username)}\"** to **\"{message.SanitizeMentions()}\"** in **{output}** `({time:d.M.yyyy.} at {time:HH:mm})`").ConfigureAwait(false); } catch { }
|
||||||
await StartReminder(rem);
|
await StartReminder(rem);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -196,7 +196,7 @@ namespace NadekoBot.Modules.Utility
|
|||||||
[OwnerOnly]
|
[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)Context.Channel;
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(arg))
|
if (string.IsNullOrWhiteSpace(arg))
|
||||||
return;
|
return;
|
||||||
|
@ -21,7 +21,7 @@ namespace NadekoBot.Modules.Utility
|
|||||||
public partial class Utility
|
public partial class Utility
|
||||||
{
|
{
|
||||||
[Group]
|
[Group]
|
||||||
public class UnitConverterCommands
|
public class UnitConverterCommands : ModuleBase
|
||||||
{
|
{
|
||||||
|
|
||||||
public static List<ConvertUnit> Units { get; set; } = new List<ConvertUnit>();
|
public static List<ConvertUnit> Units { get; set; } = new List<ConvertUnit>();
|
||||||
@ -102,7 +102,7 @@ namespace NadekoBot.Modules.Utility
|
|||||||
}
|
}
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task ConvertList(IUserMessage msg)
|
public async Task ConvertList()
|
||||||
{
|
{
|
||||||
var res = Units.GroupBy(x => x.UnitType)
|
var res = Units.GroupBy(x => x.UnitType)
|
||||||
.Aggregate(new EmbedBuilder().WithTitle("__Units which can be used by the converter__")
|
.Aggregate(new EmbedBuilder().WithTitle("__Units which can be used by the converter__")
|
||||||
@ -111,21 +111,21 @@ namespace NadekoBot.Modules.Utility
|
|||||||
efb.WithName(g.Key.ToTitleCase())
|
efb.WithName(g.Key.ToTitleCase())
|
||||||
.WithValue(String.Join(", ", g.Select(x => x.Triggers.FirstOrDefault())
|
.WithValue(String.Join(", ", g.Select(x => x.Triggers.FirstOrDefault())
|
||||||
.OrderBy(x => x)))));
|
.OrderBy(x => x)))));
|
||||||
await msg.Channel.EmbedAsync(res.Build());
|
await Context.Channel.EmbedAsync(res);
|
||||||
}
|
}
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
public async Task Convert(IUserMessage msg, string origin, string target, decimal value)
|
public async Task Convert(string origin, string target, decimal value)
|
||||||
{
|
{
|
||||||
var originUnit = Units.Find(x => x.Triggers.Select(y => y.ToLowerInvariant()).Contains(origin.ToLowerInvariant()));
|
var originUnit = Units.Find(x => x.Triggers.Select(y => y.ToLowerInvariant()).Contains(origin.ToLowerInvariant()));
|
||||||
var targetUnit = Units.Find(x => x.Triggers.Select(y => y.ToLowerInvariant()).Contains(target.ToLowerInvariant()));
|
var targetUnit = Units.Find(x => x.Triggers.Select(y => y.ToLowerInvariant()).Contains(target.ToLowerInvariant()));
|
||||||
if (originUnit == null || targetUnit == null)
|
if (originUnit == null || targetUnit == null)
|
||||||
{
|
{
|
||||||
await msg.Channel.SendErrorAsync(string.Format("Cannot convert {0} to {1}: units not found", origin, target));
|
await Context.Channel.SendErrorAsync(string.Format("Cannot convert {0} to {1}: units not found", origin, target));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (originUnit.UnitType != targetUnit.UnitType)
|
if (originUnit.UnitType != targetUnit.UnitType)
|
||||||
{
|
{
|
||||||
await msg.Channel.SendErrorAsync(string.Format("Cannot convert {0} to {1}: types of unit are not equal", originUnit.Triggers.First(), targetUnit.Triggers.First()));
|
await Context.Channel.SendErrorAsync(string.Format("Cannot convert {0} to {1}: types of unit are not equal", originUnit.Triggers.First(), targetUnit.Triggers.First()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
decimal res;
|
decimal res;
|
||||||
@ -169,7 +169,7 @@ namespace NadekoBot.Modules.Utility
|
|||||||
}
|
}
|
||||||
res = Math.Round(res, 4);
|
res = Math.Round(res, 4);
|
||||||
|
|
||||||
await msg.Channel.SendConfirmAsync(string.Format("{0} {1} is equal to {2} {3}", value, (originUnit.Triggers.First() + "s").SnPl(value.IsInteger() ? (int)value : 2), res, (targetUnit.Triggers.First() + "s").SnPl(res.IsInteger() ? (int)res : 2)));
|
await Context.Channel.SendConfirmAsync(string.Format("{0} {1} is equal to {2} {3}", value, (originUnit.Triggers.First() + "s").SnPl(value.IsInteger() ? (int)value : 2), res, (targetUnit.Triggers.First() + "s").SnPl(res.IsInteger() ? (int)res : 2)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,7 +18,6 @@ using EmbedField = Discord.API.EmbedField;
|
|||||||
|
|
||||||
namespace NadekoBot.Modules.Utility
|
namespace NadekoBot.Modules.Utility
|
||||||
{
|
{
|
||||||
|
|
||||||
[NadekoModule("Utility", ".")]
|
[NadekoModule("Utility", ".")]
|
||||||
public partial class Utility : DiscordModule
|
public partial class Utility : DiscordModule
|
||||||
{
|
{
|
||||||
@ -29,103 +28,101 @@ namespace NadekoBot.Modules.Utility
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task WhosPlaying(IUserMessage umsg, [Remainder] string game = null)
|
public async Task WhosPlaying([Remainder] string game = null)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
|
||||||
game = game.Trim().ToUpperInvariant();
|
game = game.Trim().ToUpperInvariant();
|
||||||
if (string.IsNullOrWhiteSpace(game))
|
if (string.IsNullOrWhiteSpace(game))
|
||||||
return;
|
return;
|
||||||
var arr = (await (umsg.Channel as IGuildChannel).Guild.GetUsersAsync())
|
var arr = (await (Context.Channel as IGuildChannel).Guild.GetUsersAsync())
|
||||||
.Where(u => u.Game?.Name?.ToUpperInvariant() == game)
|
.Where(u => u.Game?.Name?.ToUpperInvariant() == game)
|
||||||
.Select(u => u.Username)
|
.Select(u => u.Username)
|
||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
if (!arr.Any())
|
if (!arr.Any())
|
||||||
await channel.SendErrorAsync("Nobody is playing that game.").ConfigureAwait(false);
|
await Context.Channel.SendErrorAsync("Nobody is playing that game.").ConfigureAwait(false);
|
||||||
else
|
else
|
||||||
await channel.SendConfirmAsync("```css\n" + string.Join("\n", arr.GroupBy(item => (i++) / 2)
|
await Context.Channel.SendConfirmAsync("```css\n" + string.Join("\n", arr.GroupBy(item => (i++) / 2)
|
||||||
.Select(ig => string.Concat(ig.Select(el => $"• {el,-27}")))) + "\n```")
|
.Select(ig => string.Concat(ig.Select(el => $"• {el,-27}")))) + "\n```")
|
||||||
.ConfigureAwait(false);
|
.ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task InRole(IUserMessage umsg, [Remainder] string roles)
|
public async Task InRole([Remainder] string roles)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrWhiteSpace(roles))
|
if (string.IsNullOrWhiteSpace(roles))
|
||||||
return;
|
return;
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
|
||||||
var arg = roles.Split(',').Select(r => r.Trim().ToUpperInvariant());
|
var arg = roles.Split(',').Select(r => r.Trim().ToUpperInvariant());
|
||||||
string send = "ℹ️ **Here is a list of users in those roles:**";
|
string send = "ℹ️ **Here is a list of users in those roles:**";
|
||||||
foreach (var roleStr in arg.Where(str => !string.IsNullOrWhiteSpace(str) && str != "@EVERYONE" && str != "EVERYONE"))
|
foreach (var roleStr in arg.Where(str => !string.IsNullOrWhiteSpace(str) && str != "@EVERYONE" && str != "EVERYONE"))
|
||||||
{
|
{
|
||||||
var role = channel.Guild.Roles.Where(r => r.Name.ToUpperInvariant() == roleStr).FirstOrDefault();
|
var role = Context.Guild.Roles.Where(r => r.Name.ToUpperInvariant() == roleStr).FirstOrDefault();
|
||||||
if (role == null) continue;
|
if (role == null) continue;
|
||||||
send += $"```css\n[{role.Name}]\n";
|
send += $"```css\n[{role.Name}]\n";
|
||||||
send += string.Join(", ", channel.Guild.GetUsers().Where(u => u.Roles.Contains(role)).Select(u => u.ToString()));
|
send += string.Join(", ", (await Context.Guild.GetUsersAsync()).Where(u => u.Roles.Contains(role)).Select(u => u.ToString()));
|
||||||
send += $"\n```";
|
send += $"\n```";
|
||||||
}
|
}
|
||||||
var usr = umsg.Author as IGuildUser;
|
var usr = Context.User as IGuildUser;
|
||||||
while (send.Length > 2000)
|
while (send.Length > 2000)
|
||||||
{
|
{
|
||||||
if (!usr.GetPermissions(channel).ManageMessages)
|
if (!usr.GetPermissions((ITextChannel)Context.Channel).ManageMessages)
|
||||||
{
|
{
|
||||||
await channel.SendErrorAsync($"⚠️ {usr.Mention} **you are not allowed to use this command on roles with a lot of users in them to prevent abuse.**").ConfigureAwait(false);
|
await Context.Channel.SendErrorAsync($"⚠️ {usr.Mention} **you are not allowed to use this command on roles with a lot of users in them to prevent abuse.**").ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var curstr = send.Substring(0, 2000);
|
var curstr = send.Substring(0, 2000);
|
||||||
await channel.SendConfirmAsync(curstr.Substring(0,
|
await Context.Channel.SendConfirmAsync(curstr.Substring(0,
|
||||||
curstr.LastIndexOf(", ", StringComparison.Ordinal) + 1)).ConfigureAwait(false);
|
curstr.LastIndexOf(", ", StringComparison.Ordinal) + 1)).ConfigureAwait(false);
|
||||||
send = curstr.Substring(curstr.LastIndexOf(", ", StringComparison.Ordinal) + 1) +
|
send = curstr.Substring(curstr.LastIndexOf(", ", StringComparison.Ordinal) + 1) +
|
||||||
send.Substring(2000);
|
send.Substring(2000);
|
||||||
}
|
}
|
||||||
await channel.SendConfirmAsync(send).ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync(send).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task CheckMyPerms(IUserMessage msg)
|
public async Task CheckMyPerms()
|
||||||
{
|
{
|
||||||
|
|
||||||
StringBuilder builder = new StringBuilder("```http\n");
|
StringBuilder builder = new StringBuilder("```http\n");
|
||||||
var user = msg.Author as IGuildUser;
|
var user = Context.User as IGuildUser;
|
||||||
var perms = user.GetPermissions((ITextChannel)msg.Channel);
|
var perms = user.GetPermissions((ITextChannel)Context.Channel);
|
||||||
foreach (var p in perms.GetType().GetProperties().Where(p => !p.GetGetMethod().GetParameters().Any()))
|
foreach (var p in perms.GetType().GetProperties().Where(p => !p.GetGetMethod().GetParameters().Any()))
|
||||||
{
|
{
|
||||||
builder.AppendLine($"{p.Name} : {p.GetValue(perms, null).ToString()}");
|
builder.AppendLine($"{p.Name} : {p.GetValue(perms, null).ToString()}");
|
||||||
}
|
}
|
||||||
|
|
||||||
builder.Append("```");
|
builder.Append("```");
|
||||||
await msg.Channel.SendConfirmAsync(builder.ToString());
|
await Context.Channel.SendConfirmAsync(builder.ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task UserId(IUserMessage msg, IGuildUser target = null)
|
public async Task UserId(IGuildUser target = null)
|
||||||
{
|
{
|
||||||
var usr = target ?? msg.Author;
|
var usr = target ?? Context.User;
|
||||||
await msg.Channel.SendConfirmAsync($"🆔 of the user **{ usr.Username }** is `{ usr.Id }`").ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync($"🆔 of the user **{ usr.Username }** is `{ usr.Id }`").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
public async Task ChannelId(IUserMessage msg)
|
public async Task ChannelId()
|
||||||
{
|
{
|
||||||
await msg.Channel.SendConfirmAsync($"🆔 of this channel is `{msg.Channel.Id}`").ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync($"🆔 of this channel is `{Context.Channel.Id}`").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task ServerId(IUserMessage msg)
|
public async Task ServerId()
|
||||||
{
|
{
|
||||||
await msg.Channel.SendConfirmAsync($"🆔 of this server is `{((ITextChannel)msg.Channel).Guild.Id}`").ConfigureAwait(false);
|
await Context.Channel.SendConfirmAsync($"🆔 of this server is `{((ITextChannel)Context.Channel).Guild.Id}`").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Roles(IUserMessage msg, IGuildUser target, int page = 1)
|
public async Task Roles(IGuildUser target, int page = 1)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)msg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
var guild = channel.Guild;
|
var guild = channel.Guild;
|
||||||
|
|
||||||
const int RolesPerPage = 20;
|
const int RolesPerPage = 20;
|
||||||
@ -144,14 +141,14 @@ namespace NadekoBot.Modules.Utility
|
|||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public Task Roles(IUserMessage msg, int page = 1) =>
|
public Task Roles(int page = 1) =>
|
||||||
Roles(msg, null, page);
|
Roles(null, page);
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task ChannelTopic(IUserMessage umsg)
|
public async Task ChannelTopic()
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
var topic = channel.Topic;
|
var topic = channel.Topic;
|
||||||
if (string.IsNullOrWhiteSpace(topic))
|
if (string.IsNullOrWhiteSpace(topic))
|
||||||
@ -161,76 +158,31 @@ namespace NadekoBot.Modules.Utility
|
|||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
public async Task Stats(IUserMessage umsg)
|
public async Task Stats()
|
||||||
{
|
{
|
||||||
var channel = umsg.Channel;
|
var channel = Context.Channel;
|
||||||
|
|
||||||
var stats = NadekoBot.Stats;
|
var stats = NadekoBot.Stats;
|
||||||
|
|
||||||
await channel.EmbedAsync(
|
await channel.EmbedAsync(
|
||||||
new Embed()
|
new EmbedBuilder().WithColor(new Color(0x00bbd6))
|
||||||
{
|
.WithAuthor(eab => eab.WithName($"NadekoBot v{StatsService.BotVersion}")
|
||||||
Author = new EmbedAuthor()
|
.WithUrl("http://nadekobot.readthedocs.io/en/latest/")
|
||||||
{
|
.WithIconUrl("https://cdn.discordapp.com/avatars/116275390695079945/b21045e778ef21c96d175400e779f0fb.jpg"))
|
||||||
Name = $"NadekoBot v{StatsService.BotVersion}",
|
.AddField(efb => efb.WithName(Format.Bold("Author")).WithValue(stats.Author).WithIsInline(true))
|
||||||
Url = "http://nadekobot.readthedocs.io/en/latest/",
|
.AddField(efb => efb.WithName(Format.Bold("Library")).WithValue(stats.Library).WithIsInline(true))
|
||||||
IconUrl = "https://cdn.discordapp.com/avatars/116275390695079945/b21045e778ef21c96d175400e779f0fb.jpg"
|
.AddField(efb => efb.WithName(Format.Bold("Bot ID")).WithValue(NadekoBot.Client.CurrentUser().Id.ToString()).WithIsInline(true))
|
||||||
},
|
.AddField(efb => efb.WithName(Format.Bold("Commands Ran")).WithValue(stats.CommandsRan.ToString()).WithIsInline(true))
|
||||||
Fields = new[] {
|
.AddField(efb => efb.WithName(Format.Bold("Messages")).WithValue($"{stats.MessageCounter} ({stats.MessagesPerSecond:F2}/sec)").WithIsInline(true))
|
||||||
new EmbedField() {
|
.AddField(efb => efb.WithName(Format.Bold("Memory")).WithValue($"{stats.Heap} MB").WithIsInline(true))
|
||||||
Name = Format.Bold("Author"),
|
.AddField(efb => efb.WithName(Format.Bold("Owner ID(s)")).WithValue(stats.OwnerIds).WithIsInline(true))
|
||||||
Value = stats.Author,
|
.AddField(efb => efb.WithName(Format.Bold("Uptime")).WithValue(stats.GetUptimeString("\n")).WithIsInline(true))
|
||||||
Inline = true
|
.AddField(efb => efb.WithName(Format.Bold("Presence")).WithValue($"{NadekoBot.Client.GetGuilds().Count} Servers\n{stats.TextChannels} Text Channels\n{stats.VoiceChannels} Voice Channels").WithIsInline(true)));
|
||||||
},
|
|
||||||
new EmbedField() {
|
|
||||||
Name = Format.Bold("Library"),
|
|
||||||
Value = stats.Library,
|
|
||||||
Inline = true
|
|
||||||
},
|
|
||||||
new EmbedField() {
|
|
||||||
Name = Format.Bold("Bot ID"),
|
|
||||||
Value = NadekoBot.Client.GetCurrentUser().Id.ToString(),
|
|
||||||
Inline = true
|
|
||||||
},
|
|
||||||
new EmbedField() {
|
|
||||||
Name = Format.Bold("Commands Ran"),
|
|
||||||
Value = stats.CommandsRan.ToString(),
|
|
||||||
Inline = true
|
|
||||||
},
|
|
||||||
new EmbedField() {
|
|
||||||
Name = Format.Bold("Messages"),
|
|
||||||
Value = $"{stats.MessageCounter} ({stats.MessagesPerSecond:F2}/sec)",
|
|
||||||
Inline = true
|
|
||||||
},
|
|
||||||
new EmbedField() {
|
|
||||||
Name = Format.Bold("Memory"),
|
|
||||||
Value = $"{stats.Heap} MB",
|
|
||||||
Inline = true
|
|
||||||
},
|
|
||||||
new EmbedField() {
|
|
||||||
Name = Format.Bold("Owner ID(s)"),
|
|
||||||
Value = stats.OwnerIds,
|
|
||||||
Inline = true
|
|
||||||
},
|
|
||||||
new EmbedField() {
|
|
||||||
Name = Format.Bold("Uptime"),
|
|
||||||
Value = stats.GetUptimeString("\n"),
|
|
||||||
Inline = true
|
|
||||||
},
|
|
||||||
new EmbedField() {
|
|
||||||
Name = Format.Bold("Presence"),
|
|
||||||
Value = $"{NadekoBot.Client.GetGuilds().Count} Servers\n{stats.TextChannels} Text Channels\n{stats.VoiceChannels} Voice Channels",
|
|
||||||
Inline = true
|
|
||||||
},
|
|
||||||
|
|
||||||
},
|
|
||||||
Color = 0x00bbd6
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Regex emojiFinder { get; } = new Regex(@"<:(?<name>.+?):(?<id>\d*)>", RegexOptions.Compiled);
|
private Regex emojiFinder { get; } = new Regex(@"<:(?<name>.+?):(?<id>\d*)>", RegexOptions.Compiled);
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
public async Task Showemojis(IUserMessage msg, [Remainder] string emojis)
|
public async Task Showemojis([Remainder] string emojis)
|
||||||
{
|
{
|
||||||
var matches = emojiFinder.Matches(emojis);
|
var matches = emojiFinder.Matches(emojis);
|
||||||
|
|
||||||
@ -238,9 +190,9 @@ namespace NadekoBot.Modules.Utility
|
|||||||
.Select(m => $"**Name:** {m.Groups["name"]} **Link:** http://discordapp.com/api/emojis/{m.Groups["id"]}.png"));
|
.Select(m => $"**Name:** {m.Groups["name"]} **Link:** http://discordapp.com/api/emojis/{m.Groups["id"]}.png"));
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(result))
|
if (string.IsNullOrWhiteSpace(result))
|
||||||
await msg.Channel.SendErrorAsync("No special emojis found.");
|
await Context.Channel.SendErrorAsync("No special emojis found.");
|
||||||
else
|
else
|
||||||
await msg.Channel.SendMessageAsync(result).ConfigureAwait(false);
|
await Context.Channel.SendMessageAsync(result).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
@ -248,7 +200,7 @@ namespace NadekoBot.Modules.Utility
|
|||||||
[OwnerOnly]
|
[OwnerOnly]
|
||||||
public async Task ListServers(IUserMessage imsg, int page = 1)
|
public async Task ListServers(IUserMessage imsg, int page = 1)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)Context.Channel;
|
||||||
|
|
||||||
page -= 1;
|
page -= 1;
|
||||||
|
|
||||||
@ -265,9 +217,8 @@ namespace NadekoBot.Modules.Utility
|
|||||||
|
|
||||||
await channel.EmbedAsync(guilds.Aggregate(new EmbedBuilder().WithColor(NadekoBot.OkColor),
|
await channel.EmbedAsync(guilds.Aggregate(new EmbedBuilder().WithColor(NadekoBot.OkColor),
|
||||||
(embed, g) => embed.AddField(efb => efb.WithName(g.Name)
|
(embed, g) => embed.AddField(efb => efb.WithName(g.Name)
|
||||||
.WithValue($"```css\nID: {g.Id}\nMembers: {g.GetUsers().Count}\nOwnerID: {g.OwnerId} ```")
|
.WithValue($"```css\nID: {g.Id}\nMembers: {(g.GetUsersAsync().GetAwaiter().GetResult()).Count}\nOwnerID: {g.OwnerId} ```")
|
||||||
.WithIsInline(false)))
|
.WithIsInline(false))))
|
||||||
.Build())
|
|
||||||
.ConfigureAwait(false);
|
.ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,12 +12,10 @@ using System.Reflection;
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using NadekoBot.Modules.Permissions;
|
using NadekoBot.Modules.Permissions;
|
||||||
using Module = Discord.Commands.Module;
|
|
||||||
using NadekoBot.TypeReaders;
|
using NadekoBot.TypeReaders;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using NadekoBot.Modules.Music;
|
using NadekoBot.Modules.Music;
|
||||||
using NadekoBot.Services.Database.Models;
|
using NadekoBot.Services.Database.Models;
|
||||||
using NadekoBot.Modules.Games.Commands.Hangman;
|
|
||||||
|
|
||||||
namespace NadekoBot
|
namespace NadekoBot
|
||||||
{
|
{
|
||||||
@ -25,8 +23,8 @@ namespace NadekoBot
|
|||||||
{
|
{
|
||||||
private Logger _log;
|
private Logger _log;
|
||||||
|
|
||||||
public static uint OkColor { get; } = 0x71cd40;
|
public static Color OkColor { get; } = new Color(0x71cd40);
|
||||||
public static uint ErrorColor { get; } = 0xee281f;
|
public static Color ErrorColor { get; } = new Color(0xee281f);
|
||||||
|
|
||||||
public static CommandService CommandService { get; private set; }
|
public static CommandService CommandService { get; private set; }
|
||||||
public static CommandHandler CommandHandler { get; private set; }
|
public static CommandHandler CommandHandler { get; private set; }
|
||||||
@ -84,7 +82,7 @@ namespace NadekoBot
|
|||||||
|
|
||||||
//setup typereaders
|
//setup typereaders
|
||||||
CommandService.AddTypeReader<PermissionAction>(new PermissionActionTypeReader());
|
CommandService.AddTypeReader<PermissionAction>(new PermissionActionTypeReader());
|
||||||
CommandService.AddTypeReader<Command>(new CommandTypeReader());
|
CommandService.AddTypeReader<CommandInfo>(new CommandTypeReader());
|
||||||
CommandService.AddTypeReader<Module>(new ModuleTypeReader());
|
CommandService.AddTypeReader<Module>(new ModuleTypeReader());
|
||||||
CommandService.AddTypeReader<IGuild>(new GuildTypeReader());
|
CommandService.AddTypeReader<IGuild>(new GuildTypeReader());
|
||||||
|
|
||||||
@ -103,9 +101,9 @@ namespace NadekoBot
|
|||||||
// start handling messages received in commandhandler
|
// start handling messages received in commandhandler
|
||||||
await CommandHandler.StartHandling().ConfigureAwait(false);
|
await CommandHandler.StartHandling().ConfigureAwait(false);
|
||||||
|
|
||||||
await CommandService.LoadAssembly(this.GetType().GetTypeInfo().Assembly).ConfigureAwait(false);
|
await CommandService.AddModulesAsync(this.GetType().GetTypeInfo().Assembly).ConfigureAwait(false);
|
||||||
#if !GLOBAL_NADEKO
|
#if !GLOBAL_NADEKO
|
||||||
await CommandService.Load(new Music()).ConfigureAwait(false);
|
await CommandService.AddModuleAsync<Music>().ConfigureAwait(false);
|
||||||
#endif
|
#endif
|
||||||
Ready = true;
|
Ready = true;
|
||||||
Console.WriteLine(await Stats.Print().ConfigureAwait(false));
|
Console.WriteLine(await Stats.Print().ConfigureAwait(false));
|
||||||
|
@ -39,7 +39,7 @@ namespace NadekoBot.Services
|
|||||||
|
|
||||||
private List<IDMChannel> ownerChannels { get; set; }
|
private List<IDMChannel> ownerChannels { get; set; }
|
||||||
|
|
||||||
public event Func<IUserMessage,Command, Task> CommandExecuted = delegate { return Task.CompletedTask; };
|
public event Func<SocketUserMessage, CommandInfo, Task> CommandExecuted = delegate { return Task.CompletedTask; };
|
||||||
|
|
||||||
public CommandHandler(ShardedDiscordClient client, CommandService commandService)
|
public CommandHandler(ShardedDiscordClient client, CommandService commandService)
|
||||||
{
|
{
|
||||||
@ -49,7 +49,7 @@ namespace NadekoBot.Services
|
|||||||
}
|
}
|
||||||
public async Task StartHandling()
|
public async Task StartHandling()
|
||||||
{
|
{
|
||||||
ownerChannels = (await Task.WhenAll(_client.GetGuilds().SelectMany(g => g.GetUsers())
|
ownerChannels = (await Task.WhenAll(_client.GetGuilds().SelectMany(g => g.GetUsersAsync().GetAwaiter().GetResult())
|
||||||
.Where(u => NadekoBot.Credentials.OwnerIds.Contains(u.Id))
|
.Where(u => NadekoBot.Credentials.OwnerIds.Contains(u.Id))
|
||||||
.Distinct(new IGuildUserComparer())
|
.Distinct(new IGuildUserComparer())
|
||||||
.Select(async u => { try { return await u.CreateDMChannelAsync(); } catch { return null; } })))
|
.Select(async u => { try { return await u.CreateDMChannelAsync(); } catch { return null; } })))
|
||||||
@ -64,20 +64,20 @@ namespace NadekoBot.Services
|
|||||||
_client.MessageReceived += MessageReceivedHandler;
|
_client.MessageReceived += MessageReceivedHandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task MessageReceivedHandler(IMessage msg)
|
private async Task MessageReceivedHandler(SocketMessage msg)
|
||||||
{
|
{
|
||||||
var usrMsg = msg as IUserMessage;
|
var usrMsg = msg as SocketUserMessage;
|
||||||
if (usrMsg == null)
|
if (usrMsg == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (usrMsg.Author.IsBot || !NadekoBot.Ready) //no bots
|
if (usrContext.User.IsBot || !NadekoBot.Ready) //no bots
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var guild = (msg.Channel as ITextChannel)?.Guild;
|
var guild = (Context.Channel as SocketTextChannel)?.Guild;
|
||||||
|
|
||||||
if (guild != null && guild.OwnerId != usrMsg.Author.Id)
|
if (guild != null && guild.OwnerId != usrContext.User.Id)
|
||||||
{
|
{
|
||||||
if (Permissions.FilterCommands.InviteFilteringChannels.Contains(usrMsg.Channel.Id) ||
|
if (Permissions.FilterCommands.InviteFilteringChannels.Contains(usrContext.Channel.Id) ||
|
||||||
Permissions.FilterCommands.InviteFilteringServers.Contains(guild.Id))
|
Permissions.FilterCommands.InviteFilteringServers.Contains(guild.Id))
|
||||||
{
|
{
|
||||||
if (usrMsg.Content.IsDiscordInvite())
|
if (usrMsg.Content.IsDiscordInvite())
|
||||||
@ -89,12 +89,12 @@ namespace NadekoBot.Services
|
|||||||
}
|
}
|
||||||
catch (HttpException ex)
|
catch (HttpException ex)
|
||||||
{
|
{
|
||||||
_log.Warn("I do not have permission to filter invites in channel with id " + usrMsg.Channel.Id, ex);
|
_log.Warn("I do not have permission to filter invites in channel with id " + usrContext.Channel.Id, ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var filteredWords = Permissions.FilterCommands.FilteredWordsForChannel(usrMsg.Channel.Id, guild.Id).Concat(Permissions.FilterCommands.FilteredWordsForServer(guild.Id));
|
var filteredWords = Permissions.FilterCommands.FilteredWordsForChannel(usrContext.Channel.Id, guild.Id).Concat(Permissions.FilterCommands.FilteredWordsForServer(guild.Id));
|
||||||
var wordsInMessage = usrMsg.Content.ToLowerInvariant().Split(' ');
|
var wordsInMessage = usrMsg.Content.ToLowerInvariant().Split(' ');
|
||||||
if (filteredWords.Any(w => wordsInMessage.Contains(w)))
|
if (filteredWords.Any(w => wordsInMessage.Contains(w)))
|
||||||
{
|
{
|
||||||
@ -105,7 +105,7 @@ namespace NadekoBot.Services
|
|||||||
}
|
}
|
||||||
catch (HttpException ex)
|
catch (HttpException ex)
|
||||||
{
|
{
|
||||||
_log.Warn("I do not have permission to filter words in channel with id " + usrMsg.Channel.Id, ex);
|
_log.Warn("I do not have permission to filter words in channel with id " + usrContext.Channel.Id, ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -113,8 +113,8 @@ namespace NadekoBot.Services
|
|||||||
BlacklistItem blacklistedItem;
|
BlacklistItem blacklistedItem;
|
||||||
if ((blacklistedItem = Permissions.BlacklistCommands.BlacklistedItems.FirstOrDefault(bi =>
|
if ((blacklistedItem = Permissions.BlacklistCommands.BlacklistedItems.FirstOrDefault(bi =>
|
||||||
(bi.Type == BlacklistItem.BlacklistType.Server && bi.ItemId == guild?.Id) ||
|
(bi.Type == BlacklistItem.BlacklistType.Server && bi.ItemId == guild?.Id) ||
|
||||||
(bi.Type == BlacklistItem.BlacklistType.Channel && bi.ItemId == msg.Channel.Id) ||
|
(bi.Type == BlacklistItem.BlacklistType.Channel && bi.ItemId == Context.Channel.Id) ||
|
||||||
(bi.Type == BlacklistItem.BlacklistType.User && bi.ItemId == usrMsg.Author.Id))) != null)
|
(bi.Type == BlacklistItem.BlacklistType.User && bi.ItemId == usrContext.User.Id))) != null)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -146,12 +146,12 @@ namespace NadekoBot.Services
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var t = await ExecuteCommand(usrMsg, usrMsg.Content, guild, usrMsg.Author, MultiMatchHandling.Best);
|
var t = await ExecuteCommand(usrMsg, usrMsg.Content, guild, usrContext.User, MultiMatchHandling.Best);
|
||||||
var command = t.Item1;
|
var command = t.Item1;
|
||||||
var permCache = t.Item2;
|
var permCache = t.Item2;
|
||||||
var result = t.Item3;
|
var result = t.Item3;
|
||||||
sw.Stop();
|
sw.Stop();
|
||||||
var channel = (usrMsg.Channel as ITextChannel);
|
var channel = (usrContext.Channel as ITextChannel);
|
||||||
if (result.IsSuccess)
|
if (result.IsSuccess)
|
||||||
{
|
{
|
||||||
await CommandExecuted(usrMsg, command);
|
await CommandExecuted(usrMsg, command);
|
||||||
@ -160,7 +160,7 @@ namespace NadekoBot.Services
|
|||||||
"Server: {1}\n\t" +
|
"Server: {1}\n\t" +
|
||||||
"Channel: {2}\n\t" +
|
"Channel: {2}\n\t" +
|
||||||
"Message: {3}",
|
"Message: {3}",
|
||||||
usrMsg.Author + " [" + usrMsg.Author.Id + "]", // {0}
|
usrContext.User + " [" + usrContext.User.Id + "]", // {0}
|
||||||
(channel == null ? "PRIVATE" : channel.Guild.Name + " [" + channel.Guild.Id + "]"), // {1}
|
(channel == null ? "PRIVATE" : channel.Guild.Name + " [" + channel.Guild.Id + "]"), // {1}
|
||||||
(channel == null ? "PRIVATE" : channel.Name + " [" + channel.Id + "]"), // {2}
|
(channel == null ? "PRIVATE" : channel.Name + " [" + channel.Id + "]"), // {2}
|
||||||
usrMsg.Content, // {3}
|
usrMsg.Content, // {3}
|
||||||
@ -175,7 +175,7 @@ namespace NadekoBot.Services
|
|||||||
"Channel: {2}\n\t" +
|
"Channel: {2}\n\t" +
|
||||||
"Message: {3}\n\t" +
|
"Message: {3}\n\t" +
|
||||||
"Error: {4}",
|
"Error: {4}",
|
||||||
usrMsg.Author + " [" + usrMsg.Author.Id + "]", // {0}
|
usrContext.User + " [" + usrContext.User.Id + "]", // {0}
|
||||||
(channel == null ? "PRIVATE" : channel.Guild.Name + " [" + channel.Guild.Id + "]"), // {1}
|
(channel == null ? "PRIVATE" : channel.Guild.Name + " [" + channel.Guild.Id + "]"), // {1}
|
||||||
(channel == null ? "PRIVATE" : channel.Name + " [" + channel.Id + "]"), // {2}
|
(channel == null ? "PRIVATE" : channel.Name + " [" + channel.Id + "]"), // {2}
|
||||||
usrMsg.Content,// {3}
|
usrMsg.Content,// {3}
|
||||||
@ -185,18 +185,18 @@ namespace NadekoBot.Services
|
|||||||
if (guild != null && command != null && result.Error == CommandError.Exception)
|
if (guild != null && command != null && result.Error == CommandError.Exception)
|
||||||
{
|
{
|
||||||
if (permCache != null && permCache.Verbose)
|
if (permCache != null && permCache.Verbose)
|
||||||
try { await msg.Channel.SendMessageAsync("⚠️ " + result.ErrorReason).ConfigureAwait(false); } catch { }
|
try { await Context.Channel.SendMessageAsync("⚠️ " + result.ErrorReason).ConfigureAwait(false); } catch { }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (msg.Channel is IPrivateChannel)
|
if (Context.Channel is IPrivateChannel)
|
||||||
{
|
{
|
||||||
//rofl, gotta do this to prevent this message from occuring on polls
|
//rofl, gotta do this to prevent this message from occuring on polls
|
||||||
int vote;
|
int vote;
|
||||||
if (int.TryParse(msg.Content, out vote)) return;
|
if (int.TryParse(msg.Content, out vote)) return;
|
||||||
|
|
||||||
await msg.Channel.SendMessageAsync(Help.DMHelpString).ConfigureAwait(false);
|
await Context.Channel.SendMessageAsync(Help.DMHelpString).ConfigureAwait(false);
|
||||||
|
|
||||||
await DMForwardCommands.HandleDMForwarding(msg, ownerChannels);
|
await DMForwardCommands.HandleDMForwarding(msg, ownerChannels);
|
||||||
}
|
}
|
||||||
@ -212,10 +212,10 @@ namespace NadekoBot.Services
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<Tuple<Command, PermissionCache, IResult>> ExecuteCommand(IUserMessage message, string input, IGuild guild, IUser user, MultiMatchHandling multiMatchHandling = MultiMatchHandling.Best) {
|
public async Task<Tuple<CommandInfo, PermissionCache, IResult>> ExecuteCommand(IUserMessage message, string input, IGuild guild, IUser user, 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, PermissionCache, IResult>(null, null, searchResult);
|
return new Tuple<CommandInfo, PermissionCache, IResult>(null, null, searchResult);
|
||||||
|
|
||||||
var commands = searchResult.Commands;
|
var commands = searchResult.Commands;
|
||||||
for (int i = commands.Count - 1; i >= 0; i--)
|
for (int i = commands.Count - 1; i >= 0; i--)
|
||||||
@ -224,7 +224,7 @@ namespace NadekoBot.Services
|
|||||||
if (!preconditionResult.IsSuccess)
|
if (!preconditionResult.IsSuccess)
|
||||||
{
|
{
|
||||||
if (commands.Count == 1)
|
if (commands.Count == 1)
|
||||||
return new Tuple<Command, PermissionCache, IResult>(null, null, searchResult);
|
return new Tuple<CommandInfo, PermissionCache, IResult>(null, null, searchResult);
|
||||||
else
|
else
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -248,7 +248,7 @@ namespace NadekoBot.Services
|
|||||||
if (!parseResult.IsSuccess)
|
if (!parseResult.IsSuccess)
|
||||||
{
|
{
|
||||||
if (commands.Count == 1)
|
if (commands.Count == 1)
|
||||||
return new Tuple<Command, PermissionCache, IResult>(null, null, parseResult);
|
return new Tuple<CommandInfo, PermissionCache, IResult>(null, null, parseResult);
|
||||||
else
|
else
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -276,7 +276,7 @@ namespace NadekoBot.Services
|
|||||||
if (!resetCommand && !pc.RootPermission.AsEnumerable().CheckPermissions(message, cmd.Text, cmd.Module.Name, out index))
|
if (!resetCommand && !pc.RootPermission.AsEnumerable().CheckPermissions(message, cmd.Text, cmd.Module.Name, out index))
|
||||||
{
|
{
|
||||||
var returnMsg = $"Permission number #{index + 1} **{pc.RootPermission.GetAt(index).GetCommand(guild)}** is preventing this action.";
|
var returnMsg = $"Permission number #{index + 1} **{pc.RootPermission.GetAt(index).GetCommand(guild)}** is preventing this action.";
|
||||||
return new Tuple<Command, PermissionCache, IResult>(cmd, pc, SearchResult.FromError(CommandError.Exception, returnMsg));
|
return new Tuple<CommandInfo, PermissionCache, IResult>(cmd, pc, SearchResult.FromError(CommandError.Exception, returnMsg));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -284,28 +284,28 @@ namespace NadekoBot.Services
|
|||||||
{
|
{
|
||||||
if (!((IGuildUser)user).Roles.Any(r => r.Name.Trim().ToLowerInvariant() == pc.PermRole.Trim().ToLowerInvariant()))
|
if (!((IGuildUser)user).Roles.Any(r => r.Name.Trim().ToLowerInvariant() == pc.PermRole.Trim().ToLowerInvariant()))
|
||||||
{
|
{
|
||||||
return new Tuple<Command, PermissionCache, IResult>(cmd, pc, SearchResult.FromError(CommandError.Exception, $"You need the **{pc.PermRole}** role in order to use permission commands."));
|
return new Tuple<CommandInfo, PermissionCache, IResult>(cmd, pc, SearchResult.FromError(CommandError.Exception, $"You need the **{pc.PermRole}** role in order to use permission commands."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (CmdCdsCommands.HasCooldown(cmd, guild, user))
|
if (CmdCdsCommands.HasCooldown(cmd, guild, user))
|
||||||
return new Tuple<Command, PermissionCache, IResult>(cmd, null, SearchResult.FromError(CommandError.Exception, $"That command is on cooldown for you."));
|
return new Tuple<CommandInfo, PermissionCache, IResult>(cmd, null, SearchResult.FromError(CommandError.Exception, $"That command is on cooldown for you."));
|
||||||
|
|
||||||
return new Tuple<Command, PermissionCache, IResult>(commands[i], null, await commands[i].Execute(message, parseResult));
|
return new Tuple<CommandInfo, PermissionCache, IResult>(commands[i], null, await commands[i].Execute(message, parseResult));
|
||||||
}
|
}
|
||||||
|
|
||||||
return new Tuple<Command, PermissionCache, IResult>(null, null, SearchResult.FromError(CommandError.UnknownCommand, "This input does not match any overload."));
|
return new Tuple<CommandInfo, PermissionCache, IResult>(null, null, SearchResult.FromError(CommandError.UnknownCommand, "This input does not match any overload."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class CommandExecutedEventArgs
|
public class CommandExecutedEventArgs
|
||||||
{
|
{
|
||||||
public Command Command { get; }
|
public CommandInfo Command { get; }
|
||||||
public IUserMessage Message { get; }
|
public IUserMessage Message { get; }
|
||||||
|
|
||||||
public CommandExecutedEventArgs(IUserMessage msg, Command cmd)
|
public CommandExecutedEventArgs(CommandInfo cmd)
|
||||||
{
|
{
|
||||||
Message = msg;
|
Message = msg;
|
||||||
Command = cmd;
|
Command = cmd;
|
||||||
|
@ -46,7 +46,7 @@ namespace NadekoBot.Services.Impl
|
|||||||
configBuilder.AddJsonFile(credsFileName, true)
|
configBuilder.AddJsonFile(credsFileName, true)
|
||||||
.AddEnvironmentVariables("NadekoBot_");
|
.AddEnvironmentVariables("NadekoBot_");
|
||||||
|
|
||||||
var data = configBuilder.Build();
|
var data = configBuilder;
|
||||||
|
|
||||||
Token = data[nameof(Token)];
|
Token = data[nameof(Token)];
|
||||||
if (string.IsNullOrWhiteSpace(Token))
|
if (string.IsNullOrWhiteSpace(Token))
|
||||||
|
@ -67,7 +67,7 @@ namespace NadekoBot.Services.Impl
|
|||||||
}
|
}
|
||||||
public async Task<string> Print()
|
public async Task<string> Print()
|
||||||
{
|
{
|
||||||
var curUser = await client.GetCurrentUserAsync();
|
var curUser = await client.CurrentUser();
|
||||||
return $@"
|
return $@"
|
||||||
Author: [{Author}] | Library: [{Library}]
|
Author: [{Author}] | Library: [{Library}]
|
||||||
Bot Version: [{BotVersion}]
|
Bot Version: [{BotVersion}]
|
||||||
|
@ -13,19 +13,19 @@ namespace NadekoBot
|
|||||||
private DiscordSocketConfig discordSocketConfig;
|
private DiscordSocketConfig discordSocketConfig;
|
||||||
private Logger _log { get; }
|
private Logger _log { get; }
|
||||||
|
|
||||||
public event Func<IGuildUser, Task> UserJoined = delegate { return Task.CompletedTask; };
|
public event Func<SocketGuildUser, Task> UserJoined = delegate { return Task.CompletedTask; };
|
||||||
public event Func<IMessage, Task> MessageReceived = delegate { return Task.CompletedTask; };
|
public event Func<SocketMessage, Task> MessageReceived = delegate { return Task.CompletedTask; };
|
||||||
public event Func<IGuildUser, Task> UserLeft = delegate { return Task.CompletedTask; };
|
public event Func<SocketGuildUser, Task> UserLeft = delegate { return Task.CompletedTask; };
|
||||||
public event Func<IGuildUser, IGuildUser, Task> UserUpdated = delegate { return Task.CompletedTask; };
|
public event Func<SocketUser, SocketUser, Task> UserUpdated = delegate { return Task.CompletedTask; };
|
||||||
public event Func<Optional<IMessage>, IMessage, Task> MessageUpdated = delegate { return Task.CompletedTask; };
|
public event Func<Optional<SocketMessage>, SocketMessage, Task> MessageUpdated = delegate { return Task.CompletedTask; };
|
||||||
public event Func<ulong, Optional<IMessage>, Task> MessageDeleted = delegate { return Task.CompletedTask; };
|
public event Func<ulong, Optional<SocketMessage>, Task> MessageDeleted = delegate { return Task.CompletedTask; };
|
||||||
public event Func<IUser, IGuild, Task> UserBanned = delegate { return Task.CompletedTask; };
|
public event Func<SocketUser, SocketGuild, Task> UserBanned = delegate { return Task.CompletedTask; };
|
||||||
public event Func<IUser, IGuild, Task> UserUnbanned = delegate { return Task.CompletedTask; };
|
public event Func<SocketUser, SocketGuild, Task> UserUnbanned = delegate { return Task.CompletedTask; };
|
||||||
public event Func<IGuildUser, IPresence, IPresence, Task> UserPresenceUpdated = delegate { return Task.CompletedTask; };
|
public event Func<Optional<SocketGuild>, SocketUser, SocketPresence, SocketPresence, Task> UserPresenceUpdated = delegate { return Task.CompletedTask; };
|
||||||
public event Func<IUser, IVoiceState, IVoiceState, Task> UserVoiceStateUpdated = delegate { return Task.CompletedTask; };
|
public event Func<SocketUser, SocketVoiceState, SocketVoiceState, Task> UserVoiceStateUpdated = delegate { return Task.CompletedTask; };
|
||||||
public event Func<IChannel, Task> ChannelCreated = delegate { return Task.CompletedTask; };
|
public event Func<SocketChannel, Task> ChannelCreated = delegate { return Task.CompletedTask; };
|
||||||
public event Func<IChannel, Task> ChannelDestroyed = delegate { return Task.CompletedTask; };
|
public event Func<SocketChannel, Task> ChannelDestroyed = delegate { return Task.CompletedTask; };
|
||||||
public event Func<IChannel, IChannel, Task> ChannelUpdated = delegate { return Task.CompletedTask; };
|
public event Func<SocketChannel, SocketChannel, Task> ChannelUpdated = delegate { return Task.CompletedTask; };
|
||||||
public event Func<Exception, Task> Disconnected = delegate { return Task.CompletedTask; };
|
public event Func<Exception, Task> Disconnected = delegate { return Task.CompletedTask; };
|
||||||
|
|
||||||
private IReadOnlyList<DiscordSocketClient> Clients { get; }
|
private IReadOnlyList<DiscordSocketClient> Clients { get; }
|
||||||
@ -48,7 +48,7 @@ namespace NadekoBot
|
|||||||
client.MessageUpdated += async (arg1, m2) => await MessageUpdated(arg1, m2);
|
client.MessageUpdated += async (arg1, m2) => await MessageUpdated(arg1, m2);
|
||||||
client.MessageDeleted += async (arg1, arg2) => await MessageDeleted(arg1, arg2);
|
client.MessageDeleted += async (arg1, arg2) => await MessageDeleted(arg1, arg2);
|
||||||
client.UserBanned += async (arg1, arg2) => await UserBanned(arg1, arg2);
|
client.UserBanned += async (arg1, arg2) => await UserBanned(arg1, arg2);
|
||||||
client.UserPresenceUpdated += async (arg1, arg2, arg3) => await UserPresenceUpdated(arg1, arg2, arg3);
|
client.UserPresenceUpdated += async (arg1, arg2, arg3, arg4) => await UserPresenceUpdated(arg1, arg2, arg3, arg4);
|
||||||
client.UserVoiceStateUpdated += async (arg1, arg2, arg3) => await UserVoiceStateUpdated(arg1, arg2, arg3);
|
client.UserVoiceStateUpdated += async (arg1, arg2, arg3) => await UserVoiceStateUpdated(arg1, arg2, arg3);
|
||||||
client.ChannelCreated += async arg => await ChannelCreated(arg);
|
client.ChannelCreated += async arg => await ChannelCreated(arg);
|
||||||
client.ChannelDestroyed += async arg => await ChannelDestroyed(arg);
|
client.ChannelDestroyed += async arg => await ChannelDestroyed(arg);
|
||||||
@ -60,17 +60,14 @@ namespace NadekoBot
|
|||||||
Clients = clientList.AsReadOnly();
|
Clients = clientList.AsReadOnly();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ISelfUser GetCurrentUser() =>
|
public ISelfUser CurrentUser() =>
|
||||||
Clients[0].GetCurrentUser();
|
Clients[0].CurrentUser;
|
||||||
|
|
||||||
public Task<ISelfUser> GetCurrentUserAsync() =>
|
public ISelfUser[] GetAllCurrentUsers() =>
|
||||||
Clients[0].GetCurrentUserAsync();
|
Clients.Select(c => c.CurrentUser).ToArray();
|
||||||
|
|
||||||
public Task<ISelfUser[]> GetAllCurrentUsersAsync() =>
|
|
||||||
Task.WhenAll(Clients.Select(c => c.GetCurrentUserAsync()));
|
|
||||||
|
|
||||||
public IReadOnlyCollection<IGuild> GetGuilds() =>
|
public IReadOnlyCollection<IGuild> GetGuilds() =>
|
||||||
Clients.SelectMany(c => c.GetGuilds()).ToArray();
|
Clients.SelectMany(c => c.Guilds).ToList();
|
||||||
|
|
||||||
public IGuild GetGuild(ulong id) =>
|
public IGuild GetGuild(ulong id) =>
|
||||||
Clients.Select(c => c.GetGuild(id)).FirstOrDefault(g => g != null);
|
Clients.Select(c => c.GetGuild(id)).FirstOrDefault(g => g != null);
|
||||||
@ -104,19 +101,11 @@ namespace NadekoBot
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal Task DownloadAllUsersAsync() =>
|
internal Task DownloadAllUsersAsync() =>
|
||||||
Task.WhenAll(Clients.Select(async c => { await c.DownloadAllUsersAsync().ConfigureAwait(false); _log.Info($"Shard #{c.ShardId} downloaded {c.GetGuilds().Sum(g => g.GetUsers().Count)} users."); }));
|
Task.WhenAll(Clients.Select(async c => { await c.DownloadAllUsersAsync().ConfigureAwait(false); _log.Info($"Shard #{c.ShardId} downloaded {c.Guilds.Sum(g => g.Users.Count)} users."); }));
|
||||||
|
|
||||||
public async Task SetGame(string game)
|
public Task SetGame(string game) => Task.WhenAll(Clients.Select(ms => ms.SetGame(game)));
|
||||||
{
|
|
||||||
await Task.WhenAll((await GetAllCurrentUsersAsync())
|
|
||||||
.Select(u => u.ModifyStatusAsync(ms => ms.Game = new Discord.Game(game))));
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task SetStream(string name, string url)
|
|
||||||
{
|
public Task SetStream(string name, string url) => Task.WhenAll(Clients.Select(ms => ms.SetGame(name, url, StreamType.NotStreaming)));
|
||||||
await Task.WhenAll((await GetAllCurrentUsersAsync())
|
|
||||||
.Select(u => u.ModifyStatusAsync(ms => ms.Game = new Discord.Game(name, url, StreamType.Twitch))));
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,12 +7,11 @@ namespace NadekoBot.TypeReaders
|
|||||||
{
|
{
|
||||||
public class CommandTypeReader : TypeReader
|
public class CommandTypeReader : TypeReader
|
||||||
{
|
{
|
||||||
public override Task<TypeReaderResult> Read(IUserMessage context, string input)
|
public override Task<TypeReaderResult> Read(CommandContext context, string input)
|
||||||
{
|
{
|
||||||
input = input.ToUpperInvariant();
|
input = input.ToUpperInvariant();
|
||||||
var cmd = NadekoBot.CommandService.Commands.FirstOrDefault(c =>
|
var cmd = NadekoBot.CommandService.Commands.FirstOrDefault(c =>
|
||||||
c.Aliases.Select(a => a.ToUpperInvariant()).Contains(input) ||
|
c.Aliases.Select(a => a.ToUpperInvariant()).Contains(input));
|
||||||
c.Text.ToUpperInvariant() == input);
|
|
||||||
if (cmd == null)
|
if (cmd == null)
|
||||||
return Task.FromResult(TypeReaderResult.FromError(CommandError.ParseFailed, "No such command found."));
|
return Task.FromResult(TypeReaderResult.FromError(CommandError.ParseFailed, "No such command found."));
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ namespace NadekoBot.TypeReaders
|
|||||||
{
|
{
|
||||||
public class GuildTypeReader : TypeReader
|
public class GuildTypeReader : TypeReader
|
||||||
{
|
{
|
||||||
public override Task<TypeReaderResult> Read(IUserMessage context, string input)
|
public override Task<TypeReaderResult> Read(CommandContext context, string input)
|
||||||
{
|
{
|
||||||
input = input.Trim().ToLowerInvariant();
|
input = input.Trim().ToLowerInvariant();
|
||||||
var guilds = NadekoBot.Client.GetGuilds();
|
var guilds = NadekoBot.Client.GetGuilds();
|
||||||
|
@ -7,7 +7,7 @@ namespace NadekoBot.TypeReaders
|
|||||||
{
|
{
|
||||||
public class ModuleTypeReader : TypeReader
|
public class ModuleTypeReader : TypeReader
|
||||||
{
|
{
|
||||||
public override Task<TypeReaderResult> Read(IUserMessage context, string input)
|
public override Task<TypeReaderResult> Read(CommandContext context, string input)
|
||||||
{
|
{
|
||||||
input = input.ToUpperInvariant();
|
input = input.ToUpperInvariant();
|
||||||
var module = NadekoBot.CommandService.Modules.FirstOrDefault(m => m.Name.ToUpperInvariant() == input);
|
var module = NadekoBot.CommandService.Modules.FirstOrDefault(m => m.Name.ToUpperInvariant() == input);
|
||||||
|
@ -10,7 +10,7 @@ namespace NadekoBot.TypeReaders
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class PermissionActionTypeReader : TypeReader
|
public class PermissionActionTypeReader : TypeReader
|
||||||
{
|
{
|
||||||
public override Task<TypeReaderResult> Read(IUserMessage context, string input)
|
public override Task<TypeReaderResult> Read(CommandContext context, string input)
|
||||||
{
|
{
|
||||||
input = input.ToUpperInvariant();
|
input = input.ToUpperInvariant();
|
||||||
switch (input)
|
switch (input)
|
||||||
|
@ -69,16 +69,18 @@ namespace NadekoBot.Extensions
|
|||||||
await (await user.CreateDMChannelAsync().ConfigureAwait(false)).SendMessageAsync(message, isTTS).ConfigureAwait(false);
|
await (await user.CreateDMChannelAsync().ConfigureAwait(false)).SendMessageAsync(message, isTTS).ConfigureAwait(false);
|
||||||
|
|
||||||
public static async Task<IUserMessage> SendConfirmAsync(this IGuildUser user, string text)
|
public static async Task<IUserMessage> SendConfirmAsync(this IGuildUser user, string text)
|
||||||
=> await (await user.CreateDMChannelAsync()).SendMessageAsync("", embed: new Embed() { Description = text, Color = NadekoBot.OkColor });
|
=> await (await user.CreateDMChannelAsync()).SendMessageAsync("", embed: new EmbedBuilder().WithColor(NadekoBot.OkColor).WithDescription(text));
|
||||||
|
|
||||||
public static async Task<IUserMessage> SendConfirmAsync(this IGuildUser user, string title, string text, string url = null)
|
public static async Task<IUserMessage> SendConfirmAsync(this IGuildUser user, string title, string text, string url = null)
|
||||||
=> await(await user.CreateDMChannelAsync()).SendMessageAsync("", embed: new Embed() { Description = text, Title = title, Url = url, Color = NadekoBot.OkColor });
|
=> await(await user.CreateDMChannelAsync()).SendMessageAsync("", embed: new EmbedBuilder().WithColor(NadekoBot.OkColor).WithDescription(text)
|
||||||
|
.WithTitle(title).WithUrl(url));
|
||||||
|
|
||||||
public static async Task<IUserMessage> SendErrorAsync(this IGuildUser user, string title, string error, string url = null)
|
public static async Task<IUserMessage> SendErrorAsync(this IGuildUser user, string title, string error, string url = null)
|
||||||
=> await (await user.CreateDMChannelAsync()).SendMessageAsync("", embed: new Embed() { Description = error, Title = title, Url = url, Color = NadekoBot.ErrorColor });
|
=> await (await user.CreateDMChannelAsync()).SendMessageAsync("", embed: new EmbedBuilder().WithColor(NadekoBot.OkColor).WithDescription(error)
|
||||||
|
.WithTitle(title).WithUrl(url));
|
||||||
|
|
||||||
public static async Task<IUserMessage> SendErrorAsync(this IGuildUser user, string error)
|
public static async Task<IUserMessage> SendErrorAsync(this IGuildUser user, string error)
|
||||||
=> await (await user.CreateDMChannelAsync()).SendMessageAsync("", embed: new Embed() { Description = error, Color = NadekoBot.ErrorColor });
|
=> await (await user.CreateDMChannelAsync()).SendMessageAsync("", embed: new EmbedBuilder().WithColor(NadekoBot.OkColor).WithDescription(error));
|
||||||
|
|
||||||
public static async Task<IUserMessage> SendFileAsync(this IGuildUser user, string filePath, string caption = null, bool isTTS = false) =>
|
public static async Task<IUserMessage> SendFileAsync(this IGuildUser user, string filePath, string caption = null, bool isTTS = false) =>
|
||||||
await (await user.CreateDMChannelAsync().ConfigureAwait(false)).SendFileAsync(filePath, caption, isTTS).ConfigureAwait(false);
|
await (await user.CreateDMChannelAsync().ConfigureAwait(false)).SendFileAsync(filePath, caption, isTTS).ConfigureAwait(false);
|
||||||
@ -87,25 +89,27 @@ namespace NadekoBot.Extensions
|
|||||||
await (await user.CreateDMChannelAsync().ConfigureAwait(false)).SendFileAsync(fileStream, fileName, caption, isTTS).ConfigureAwait(false);
|
await (await user.CreateDMChannelAsync().ConfigureAwait(false)).SendFileAsync(fileStream, fileName, caption, isTTS).ConfigureAwait(false);
|
||||||
|
|
||||||
public static bool IsAuthor(this IUserMessage msg) =>
|
public static bool IsAuthor(this IUserMessage msg) =>
|
||||||
NadekoBot.Client.GetCurrentUser().Id == msg.Author.Id;
|
NadekoBot.Client.CurrentUser().Id == msg.Author.Id;
|
||||||
|
|
||||||
public static IEnumerable<IUser> Members(this IRole role) =>
|
public static IEnumerable<IUser> Members(this IRole role) =>
|
||||||
NadekoBot.Client.GetGuild(role.GuildId)?.GetUsers().Where(u => u.Roles.Contains(role)) ?? Enumerable.Empty<IUser>();
|
role.Guild.GetUsersAsync().GetAwaiter().GetResult() ?? Enumerable.Empty<IUser>();
|
||||||
|
|
||||||
public static Task<IUserMessage> EmbedAsync(this IMessageChannel ch, Discord.API.Embed embed, string msg = "")
|
public static Task<IUserMessage> EmbedAsync(this IMessageChannel ch, EmbedBuilder embed, string msg = "")
|
||||||
=> ch.SendMessageAsync(msg, embed: embed);
|
=> ch.SendMessageAsync(msg, embed: embed);
|
||||||
|
|
||||||
public static Task<IUserMessage> SendErrorAsync(this IMessageChannel ch, string title, string error, string url = null)
|
public static Task<IUserMessage> SendErrorAsync(this IMessageChannel ch, string title, string error, string url = null)
|
||||||
=> ch.SendMessageAsync("", embed: new Embed() { Description = error, Title = title, Url = url, Color = NadekoBot.ErrorColor });
|
=> ch.SendMessageAsync("", embed: new EmbedBuilder().WithColor(NadekoBot.ErrorColor).WithDescription(error)
|
||||||
|
.WithTitle(title).WithUrl(url));
|
||||||
|
|
||||||
public static Task<IUserMessage> SendErrorAsync(this IMessageChannel ch, string error)
|
public static Task<IUserMessage> SendErrorAsync(this IMessageChannel ch, string error)
|
||||||
=> ch.SendMessageAsync("", embed: new Embed() { Description = error, Color = NadekoBot.ErrorColor });
|
=> ch.SendMessageAsync("", embed: new EmbedBuilder().WithColor(NadekoBot.OkColor).WithDescription(error));
|
||||||
|
|
||||||
public static Task<IUserMessage> SendConfirmAsync(this IMessageChannel ch, string title, string text, string url = null)
|
public static Task<IUserMessage> SendConfirmAsync(this IMessageChannel ch, string title, string text, string url = null)
|
||||||
=> ch.SendMessageAsync("", embed: new Embed() { Description = text, Title = title, Url = url, Color = NadekoBot.OkColor });
|
=> ch.SendMessageAsync("", embed: new EmbedBuilder().WithColor(NadekoBot.OkColor).WithDescription(text)
|
||||||
|
.WithTitle(title).WithUrl(url));
|
||||||
|
|
||||||
public static Task<IUserMessage> SendConfirmAsync(this IMessageChannel ch, string text)
|
public static Task<IUserMessage> SendConfirmAsync(this IMessageChannel ch, string text)
|
||||||
=> ch.SendMessageAsync("", embed: new Embed() { Description = text, Color = NadekoBot.OkColor });
|
=> ch.SendMessageAsync("", embed: new EmbedBuilder().WithColor(NadekoBot.OkColor).WithDescription(text));
|
||||||
|
|
||||||
public static Task<IUserMessage> SendTableAsync<T>(this IMessageChannel ch, string seed, IEnumerable<T> items, Func<T, string> howToPrint, int columns = 3)
|
public static Task<IUserMessage> SendTableAsync<T>(this IMessageChannel ch, string seed, IEnumerable<T> items, Func<T, string> howToPrint, int columns = 3)
|
||||||
{
|
{
|
||||||
@ -274,11 +278,11 @@ namespace NadekoBot.Extensions
|
|||||||
|
|
||||||
public static string Unmention(this string str) => str.Replace("@", "ම");
|
public static string Unmention(this string str) => str.Replace("@", "ම");
|
||||||
|
|
||||||
public static Image Merge(this IEnumerable<Image> images)
|
public static ImageSharp.Image Merge(this IEnumerable<ImageSharp.Image> images)
|
||||||
{
|
{
|
||||||
var imgList = images.ToList();
|
var imgList = images.ToList();
|
||||||
|
|
||||||
var canvas = new Image(imgList.Sum(img => img.Width), imgList.Max(img => img.Height));
|
var canvas = new ImageSharp.Image(imgList.Sum(img => img.Width), imgList.Max(img => img.Height));
|
||||||
|
|
||||||
var canvasPixels = canvas.Lock();
|
var canvasPixels = canvas.Lock();
|
||||||
int offsetX = 0;
|
int offsetX = 0;
|
||||||
@ -297,7 +301,7 @@ namespace NadekoBot.Extensions
|
|||||||
return canvas;
|
return canvas;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Stream ToStream(this Image img)
|
public static Stream ToStream(this ImageSharp.Image img)
|
||||||
{
|
{
|
||||||
var imageStream = new MemoryStream();
|
var imageStream = new MemoryStream();
|
||||||
img.SaveAsPng(imageStream);
|
img.SaveAsPng(imageStream);
|
||||||
|
@ -19,12 +19,6 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"VideoLibrary": "1.3.4",
|
"VideoLibrary": "1.3.4",
|
||||||
"CoreCLR-NCalc": "2.1.2",
|
"CoreCLR-NCalc": "2.1.2",
|
||||||
"Discord.Net.Commands": {
|
|
||||||
"target": "project"
|
|
||||||
},
|
|
||||||
"Discord.Net": {
|
|
||||||
"target": "project"
|
|
||||||
},
|
|
||||||
"Google.Apis.Urlshortener.v1": "1.19.0.138",
|
"Google.Apis.Urlshortener.v1": "1.19.0.138",
|
||||||
"Google.Apis.YouTube.v3": "1.19.0.655",
|
"Google.Apis.YouTube.v3": "1.19.0.655",
|
||||||
"ImageSharp": "1.0.0-alpha-000079",
|
"ImageSharp": "1.0.0-alpha-000079",
|
||||||
@ -44,7 +38,9 @@
|
|||||||
"Newtonsoft.Json": "9.0.2-beta1",
|
"Newtonsoft.Json": "9.0.2-beta1",
|
||||||
"NLog": "5.0.0-beta03",
|
"NLog": "5.0.0-beta03",
|
||||||
"System.Diagnostics.Contracts": "4.3.0",
|
"System.Diagnostics.Contracts": "4.3.0",
|
||||||
"System.Xml.XPath": "4.3.0"
|
"System.Xml.XPath": "4.3.0",
|
||||||
|
"Discord.Net.Commands": "1.0.0-*",
|
||||||
|
"Discord.Net.WebSocket": "1.0.0-*"
|
||||||
},
|
},
|
||||||
"tools": {
|
"tools": {
|
||||||
"Microsoft.EntityFrameworkCore.Tools.DotNet": "1.1.0-preview4-final",
|
"Microsoft.EntityFrameworkCore.Tools.DotNet": "1.1.0-preview4-final",
|
||||||
|
Loading…
Reference in New Issue
Block a user