Administration module fully translatable!!! Partially tested though, report any missing keys.

This commit is contained in:
Kwoth 2017-02-15 00:38:02 +01:00
parent 0d0938f613
commit d0100f0c9f
4 changed files with 552 additions and 116 deletions

View File

@ -1,18 +1,14 @@
using Discord; using Discord;
using Discord.Commands; using Discord.Commands;
using NadekoBot.Extensions; using NadekoBot.Extensions;
using Newtonsoft.Json;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using NadekoBot.Services; using NadekoBot.Services;
using NadekoBot.Attributes; using NadekoBot.Attributes;
using Discord.WebSocket; using Discord.WebSocket;
using NadekoBot.Services.Database.Models; using NadekoBot.Services.Database.Models;
using System.Net.Http;
using System.IO;
using static NadekoBot.Modules.Permissions.Permissions; using static NadekoBot.Modules.Permissions.Permissions;
using System.Collections.Concurrent; using System.Collections.Concurrent;
using NLog; using NLog;
@ -22,7 +18,7 @@ namespace NadekoBot.Modules.Administration
[NadekoModule("Administration", ".")] [NadekoModule("Administration", ".")]
public partial class Administration : NadekoModule public partial class Administration : NadekoModule
{ {
private static ConcurrentHashSet<ulong> DeleteMessagesOnCommand { get; } = new ConcurrentHashSet<ulong>(); private static ConcurrentHashSet<ulong> deleteMessagesOnCommand { get; }
private new static Logger _log { get; } private new static Logger _log { get; }
@ -31,7 +27,7 @@ namespace NadekoBot.Modules.Administration
_log = LogManager.GetCurrentClassLogger(); _log = LogManager.GetCurrentClassLogger();
NadekoBot.CommandHandler.CommandExecuted += DelMsgOnCmd_Handler; NadekoBot.CommandHandler.CommandExecuted += DelMsgOnCmd_Handler;
DeleteMessagesOnCommand = new ConcurrentHashSet<ulong>(NadekoBot.AllGuildConfigs.Where(g => g.DeleteMessageOnCommand).Select(g => g.GuildId)); deleteMessagesOnCommand = new ConcurrentHashSet<ulong>(NadekoBot.AllGuildConfigs.Where(g => g.DeleteMessageOnCommand).Select(g => g.GuildId));
} }
@ -44,7 +40,7 @@ namespace NadekoBot.Modules.Administration
var channel = msg.Channel as SocketTextChannel; var channel = msg.Channel as SocketTextChannel;
if (channel == null) if (channel == null)
return; return;
if (DeleteMessagesOnCommand.Contains(channel.Guild.Id) && cmd.Name != "prune") if (deleteMessagesOnCommand.Contains(channel.Guild.Id) && cmd.Name != "prune")
await msg.DeleteAsync().ConfigureAwait(false); await msg.DeleteAsync().ConfigureAwait(false);
} }
catch (Exception ex) catch (Exception ex)
@ -71,17 +67,17 @@ namespace NadekoBot.Modules.Administration
PermRole = config.PermissionRole, PermRole = config.PermissionRole,
Verbose = config.VerbosePermissions, Verbose = config.VerbosePermissions,
}; };
Permissions.Permissions.Cache.AddOrUpdate(channel.Guild.Id, Cache.AddOrUpdate(channel.Guild.Id,
toAdd, (id, old) => toAdd); toAdd, (id, old) => toAdd);
await uow.CompleteAsync(); await uow.CompleteAsync();
} }
await ReplyConfirmLocalized("perms_reset").ConfigureAwait(false);
await 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)]
[RequireUserPermission(GuildPermission.Administrator)] [RequireUserPermission(GuildPermission.Administrator)]
[RequireBotPermission(GuildPermission.ManageMessages)]
public async Task Delmsgoncmd() public async Task Delmsgoncmd()
{ {
bool enabled; bool enabled;
@ -94,29 +90,31 @@ namespace NadekoBot.Modules.Administration
} }
if (enabled) if (enabled)
{ {
DeleteMessagesOnCommand.Add(Context.Guild.Id); deleteMessagesOnCommand.Add(Context.Guild.Id);
await Context.Channel.SendConfirmAsync("✅ **Now automatically deleting successful command invokations.**").ConfigureAwait(false); await ReplyConfirmLocalized("delmsg_on").ConfigureAwait(false);
} }
else else
{ {
DeleteMessagesOnCommand.TryRemove(Context.Guild.Id); deleteMessagesOnCommand.TryRemove(Context.Guild.Id);
await Context.Channel.SendConfirmAsync("❗**Stopped automatic deletion of successful command invokations.**").ConfigureAwait(false); await ReplyConfirmLocalized("delmsg_off").ConfigureAwait(false);
} }
} }
[NadekoCommand, Usage, Description, Aliases] [NadekoCommand, Usage, Description, Aliases]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]
[RequireUserPermission(GuildPermission.ManageRoles)] [RequireUserPermission(GuildPermission.ManageRoles)]
[RequireBotPermission(GuildPermission.ManageRoles)]
public async Task Setrole(IGuildUser usr, [Remainder] IRole role) public async Task Setrole(IGuildUser usr, [Remainder] IRole role)
{ {
try try
{ {
await usr.AddRolesAsync(role).ConfigureAwait(false); await usr.AddRolesAsync(role).ConfigureAwait(false);
await Context.Channel.SendConfirmAsync($" Successfully added role **{role.Name}** to user **{usr.Username}**").ConfigureAwait(false); await ReplyConfirmLocalized("setrole", Format.Bold(role.Name), Format.Bold(usr.ToString()))
.ConfigureAwait(false);
} }
catch (Exception ex) catch (Exception ex)
{ {
await Context.Channel.SendErrorAsync("⚠️ Failed to add role. **Bot has insufficient permissions.**\n").ConfigureAwait(false); await ReplyErrorLocalized("setrole_err").ConfigureAwait(false);
Console.WriteLine(ex.ToString()); Console.WriteLine(ex.ToString());
} }
} }
@ -124,82 +122,81 @@ namespace NadekoBot.Modules.Administration
[NadekoCommand, Usage, Description, Aliases] [NadekoCommand, Usage, Description, Aliases]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]
[RequireUserPermission(GuildPermission.ManageRoles)] [RequireUserPermission(GuildPermission.ManageRoles)]
[RequireBotPermission(GuildPermission.ManageRoles)]
public async Task Removerole(IGuildUser usr, [Remainder] IRole role) public async Task Removerole(IGuildUser usr, [Remainder] IRole role)
{ {
try try
{ {
await usr.RemoveRolesAsync(role).ConfigureAwait(false); await usr.RemoveRolesAsync(role).ConfigureAwait(false);
await Context.Channel.SendConfirmAsync($" Successfully removed role **{role.Name}** from user **{usr.Username}**").ConfigureAwait(false); await ReplyConfirmLocalized("remrole", Format.Bold(role.Name), Format.Bold(usr.ToString())).ConfigureAwait(false);
} }
catch catch
{ {
await Context.Channel.SendErrorAsync("⚠️ Failed to remove role. Most likely reason: **Insufficient permissions.**").ConfigureAwait(false); await ReplyErrorLocalized("remrole_err").ConfigureAwait(false);
} }
} }
[NadekoCommand, Usage, Description, Aliases] [NadekoCommand, Usage, Description, Aliases]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]
[RequireUserPermission(GuildPermission.ManageRoles)] [RequireUserPermission(GuildPermission.ManageRoles)]
[RequireBotPermission(GuildPermission.ManageRoles)]
public async Task RenameRole(IRole roleToEdit, string newname) public async Task RenameRole(IRole roleToEdit, string newname)
{ {
try try
{ {
if (roleToEdit.Position > (await Context.Guild.GetCurrentUserAsync().ConfigureAwait(false)).GetRoles().Max(r => r.Position)) if (roleToEdit.Position > (await Context.Guild.GetCurrentUserAsync().ConfigureAwait(false)).GetRoles().Max(r => r.Position))
{ {
await Context.Channel.SendErrorAsync("🚫 You can't edit roles higher than your highest role.").ConfigureAwait(false); await ReplyErrorLocalized("renrole_perms").ConfigureAwait(false);
return; return;
} }
await roleToEdit.ModifyAsync(g => g.Name = newname).ConfigureAwait(false); await roleToEdit.ModifyAsync(g => g.Name = newname).ConfigureAwait(false);
await Context.Channel.SendConfirmAsync("✅ Role renamed.").ConfigureAwait(false); await ReplyConfirmLocalized("renrole").ConfigureAwait(false);
} }
catch (Exception) catch (Exception)
{ {
await Context.Channel.SendErrorAsync("⚠️ Failed to rename role. Probably **insufficient permissions.**").ConfigureAwait(false); await ReplyErrorLocalized("renrole_err").ConfigureAwait(false);
} }
} }
[NadekoCommand, Usage, Description, Aliases] [NadekoCommand, Usage, Description, Aliases]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]
[RequireUserPermission(GuildPermission.ManageRoles)] [RequireUserPermission(GuildPermission.ManageRoles)]
[RequireBotPermission(GuildPermission.ManageRoles)]
public async Task RemoveAllRoles([Remainder] IGuildUser user) public async Task RemoveAllRoles([Remainder] IGuildUser user)
{ {
try try
{ {
await user.RemoveRolesAsync(user.GetRoles()).ConfigureAwait(false); await user.RemoveRolesAsync(user.GetRoles()).ConfigureAwait(false);
await Context.Channel.SendConfirmAsync($"🗑 Successfully removed **all** roles from user **{user.Username}**").ConfigureAwait(false); await ReplyConfirmLocalized("rar", Format.Bold(user.ToString())).ConfigureAwait(false);
} }
catch catch
{ {
await Context.Channel.SendErrorAsync("⚠️ Failed to remove roles. Most likely reason: **Insufficient permissions.**").ConfigureAwait(false); await ReplyErrorLocalized("rar_err").ConfigureAwait(false);
} }
} }
[NadekoCommand, Usage, Description, Aliases] [NadekoCommand, Usage, Description, Aliases]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]
[RequireUserPermission(GuildPermission.ManageRoles)] [RequireUserPermission(GuildPermission.ManageRoles)]
[RequireBotPermission(GuildPermission.ManageRoles)]
public async Task CreateRole([Remainder] string roleName = null) public async Task CreateRole([Remainder] string roleName = null)
{ {
if (string.IsNullOrWhiteSpace(roleName)) if (string.IsNullOrWhiteSpace(roleName))
return; return;
try
{
var r = await Context.Guild.CreateRoleAsync(roleName).ConfigureAwait(false); var r = await Context.Guild.CreateRoleAsync(roleName).ConfigureAwait(false);
await Context.Channel.SendConfirmAsync($"✅ Successfully created role **{r.Name}**.").ConfigureAwait(false); await ReplyConfirmLocalized("cr", Format.Bold(r.Name)).ConfigureAwait(false);
}
catch (Exception)
{
await Context.Channel.SendErrorAsync("⚠️ Unspecified error.").ConfigureAwait(false);
}
} }
[NadekoCommand, Usage, Description, Aliases] [NadekoCommand, Usage, Description, Aliases]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]
[RequireUserPermission(GuildPermission.ManageRoles)] [RequireUserPermission(GuildPermission.ManageRoles)]
[RequireBotPermission(GuildPermission.ManageRoles)]
public async Task RoleColor(params string[] args) public async Task RoleColor(params string[] args)
{ {
if (args.Count() != 2 && args.Count() != 4) if (args.Length != 2 && args.Length != 4)
{ {
await Context.Channel.SendErrorAsync("❌ The parameters specified are **invalid.**").ConfigureAwait(false); await ReplyErrorLocalized("rc_params").ConfigureAwait(false);
return; return;
} }
var roleName = args[0].ToUpperInvariant(); var roleName = args[0].ToUpperInvariant();
@ -207,7 +204,7 @@ namespace NadekoBot.Modules.Administration
if (role == null) if (role == null)
{ {
await Context.Channel.SendErrorAsync("🚫 That role **does not exist.**").ConfigureAwait(false); await ReplyErrorLocalized("rc_not_exist").ConfigureAwait(false);
return; return;
} }
try try
@ -220,64 +217,54 @@ 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 Color(red, green, blue)).ConfigureAwait(false); await role.ModifyAsync(r => r.Color = new Color(red, green, blue)).ConfigureAwait(false);
await Context.Channel.SendConfirmAsync($"☑️ Role **{role.Name}'s** color has been changed.").ConfigureAwait(false); await ReplyConfirmLocalized("rc", Format.Bold(role.Name)).ConfigureAwait(false);
} }
catch (Exception) catch (Exception)
{ {
await Context.Channel.SendErrorAsync("⚠️ Error occured, most likely **invalid parameters** or **insufficient permissions.**").ConfigureAwait(false); await ReplyErrorLocalized("rc_perms").ConfigureAwait(false);
} }
} }
[NadekoCommand, Usage, Description, Aliases] [NadekoCommand, Usage, Description, Aliases]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]
[RequireUserPermission(GuildPermission.BanMembers)] [RequireUserPermission(GuildPermission.BanMembers)]
[RequireBotPermission(GuildPermission.BanMembers)]
public async Task Ban(IGuildUser user, [Remainder] string msg = null) public async Task Ban(IGuildUser user, [Remainder] string msg = null)
{ {
if (string.IsNullOrWhiteSpace(msg))
{
msg = "❗No reason provided.";
}
if (Context.User.Id != user.Guild.OwnerId && (user.GetRoles().Select(r => r.Position).Max() >= ((IGuildUser)Context.User).GetRoles().Select(r => r.Position).Max())) if (Context.User.Id != user.Guild.OwnerId && (user.GetRoles().Select(r => r.Position).Max() >= ((IGuildUser)Context.User).GetRoles().Select(r => r.Position).Max()))
{ {
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); await ReplyErrorLocalized("hierarchy").ConfigureAwait(false);
return; return;
} }
if (!string.IsNullOrWhiteSpace(msg)) if (!string.IsNullOrWhiteSpace(msg))
{ {
try try
{ {
await (await user.CreateDMChannelAsync()).SendErrorAsync($"⛔️ **You have been BANNED from `{Context.Guild.Name}` server.**\n" + await user.SendErrorAsync(GetText("bandm", Format.Bold(Context.Guild.Name), msg));
$"⚖ *Reason:* {msg}").ConfigureAwait(false);
await Task.Delay(2000).ConfigureAwait(false); await Task.Delay(2000).ConfigureAwait(false);
} }
catch { } catch { }
} }
try
{
await Context.Guild.AddBanAsync(user, 7).ConfigureAwait(false);
await Context.Channel.SendConfirmAsync("⛔️ **Banned** user **" + user.Username + "** ID: `" + user.Id + "`").ConfigureAwait(false); await Context.Guild.AddBanAsync(user, 7).ConfigureAwait(false);
} await Context.Channel.EmbedAsync(new EmbedBuilder().WithOkColor()
catch .WithTitle("⛔️ " + GetText("banned_user"))
{ .AddField(efb => efb.WithName(GetText("username")).WithValue(user.ToString()).WithIsInline(true))
await Context.Channel.SendErrorAsync("⚠️ **Error.** Most likely I don't have sufficient permissions.").ConfigureAwait(false); .AddField(efb => efb.WithName("ID").WithValue(user.Id.ToString()).WithIsInline(true)))
} .ConfigureAwait(false);
} }
[NadekoCommand, Usage, Description, Aliases] [NadekoCommand, Usage, Description, Aliases]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]
[RequireUserPermission(GuildPermission.KickMembers)] [RequireUserPermission(GuildPermission.KickMembers)]
[RequireUserPermission(GuildPermission.ManageMessages)] [RequireUserPermission(GuildPermission.ManageMessages)]
[RequireBotPermission(GuildPermission.BanMembers)]
public async Task Softban(IGuildUser user, [Remainder] string msg = null) public async Task Softban(IGuildUser user, [Remainder] string msg = null)
{ {
if (string.IsNullOrWhiteSpace(msg))
{
msg = "❗No reason provided.";
}
if (Context.User.Id != user.Guild.OwnerId && user.GetRoles().Select(r => r.Position).Max() >= ((IGuildUser)Context.User).GetRoles().Select(r => r.Position).Max()) if (Context.User.Id != user.Guild.OwnerId && user.GetRoles().Select(r => r.Position).Max() >= ((IGuildUser)Context.User).GetRoles().Select(r => r.Position).Max())
{ {
await Context.Channel.SendErrorAsync("⚠️ You can't use this command on users with a role higher or equal to yours in the role hierarchy."); await ReplyErrorLocalized("hierarchy").ConfigureAwait(false);
return; return;
} }
@ -285,161 +272,159 @@ namespace NadekoBot.Modules.Administration
{ {
try try
{ {
await user.SendErrorAsync($"☣ **You have been SOFT-BANNED from `{Context.Guild.Name}` server.**\n" + await user.SendErrorAsync(GetText("sbdm", Format.Bold(Context.Guild.Name), msg));
$"⚖ *Reason:* {msg}").ConfigureAwait(false);
await Task.Delay(2000).ConfigureAwait(false); await Task.Delay(2000).ConfigureAwait(false);
} }
catch { } catch { }
} }
try
{
await Context.Guild.AddBanAsync(user, 7).ConfigureAwait(false); await Context.Guild.AddBanAsync(user, 7).ConfigureAwait(false);
try { await Context.Guild.RemoveBanAsync(user).ConfigureAwait(false); } try { await Context.Guild.RemoveBanAsync(user).ConfigureAwait(false); }
catch { await Context.Guild.RemoveBanAsync(user).ConfigureAwait(false); } catch { await Context.Guild.RemoveBanAsync(user).ConfigureAwait(false); }
await Context.Channel.SendConfirmAsync("☣ **Soft-Banned** user **" + user.Username + "** ID: `" + user.Id + "`").ConfigureAwait(false); await Context.Channel.EmbedAsync(new EmbedBuilder().WithOkColor()
} .WithTitle("☣ " + GetText("sb_user"))
catch .AddField(efb => efb.WithName(GetText("username")).WithValue(user.ToString()).WithIsInline(true))
{ .AddField(efb => efb.WithName("ID").WithValue(user.Id.ToString()).WithIsInline(true)))
await Context.Channel.SendErrorAsync("⚠️ Error. Most likely I don't have sufficient permissions.").ConfigureAwait(false); .ConfigureAwait(false);
}
} }
[NadekoCommand, Usage, Description, Aliases] [NadekoCommand, Usage, Description, Aliases]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]
[RequireUserPermission(GuildPermission.KickMembers)] [RequireUserPermission(GuildPermission.KickMembers)]
[RequireBotPermission(GuildPermission.KickMembers)]
public async Task Kick(IGuildUser user, [Remainder] string msg = null) public async Task Kick(IGuildUser user, [Remainder] string msg = null)
{ {
if (user == null)
{
await Context.Channel.SendErrorAsync("❗User not found.").ConfigureAwait(false);
return;
}
if (Context.Message.Author.Id != user.Guild.OwnerId && user.GetRoles().Select(r => r.Position).Max() >= ((IGuildUser)Context.User).GetRoles().Select(r => r.Position).Max()) if (Context.Message.Author.Id != user.Guild.OwnerId && user.GetRoles().Select(r => r.Position).Max() >= ((IGuildUser)Context.User).GetRoles().Select(r => r.Position).Max())
{ {
await Context.Channel.SendErrorAsync("⚠️ You can't use this command on users with a role higher or equal to yours in the role hierarchy."); await ReplyErrorLocalized("hierarchy").ConfigureAwait(false);
return; return;
} }
if (!string.IsNullOrWhiteSpace(msg)) if (!string.IsNullOrWhiteSpace(msg))
{ {
try try
{ {
await user.SendErrorAsync($"‼️**You have been KICKED from `{Context.Guild.Name}` server.**\n" + await user.SendErrorAsync(GetText("kickdm", Format.Bold(Context.Guild.Name), msg));
$"⚖ *Reason:* {msg}").ConfigureAwait(false);
await Task.Delay(2000).ConfigureAwait(false); await Task.Delay(2000).ConfigureAwait(false);
} }
catch { } catch { }
} }
try
{
await user.KickAsync().ConfigureAwait(false); await user.KickAsync().ConfigureAwait(false);
await Context.Channel.SendConfirmAsync("‼️**Kicked** user **" + user.Username + "** ID: `" + user.Id + "`").ConfigureAwait(false); await Context.Channel.EmbedAsync(new EmbedBuilder().WithOkColor()
} .WithTitle(GetText("kicked_user"))
catch .AddField(efb => efb.WithName(GetText("username")).WithValue(user.ToString()).WithIsInline(true))
{ .AddField(efb => efb.WithName("ID").WithValue(user.Id.ToString()).WithIsInline(true)))
await Context.Channel.SendErrorAsync("⚠️ Error. Most likely I don't have sufficient permissions.").ConfigureAwait(false); .ConfigureAwait(false);
}
} }
[NadekoCommand, Usage, Description, Aliases] [NadekoCommand, Usage, Description, Aliases]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]
[RequireUserPermission(GuildPermission.DeafenMembers)] [RequireUserPermission(GuildPermission.DeafenMembers)]
[RequireBotPermission(GuildPermission.DeafenMembers)]
public async Task Deafen(params IGuildUser[] users) public async Task Deafen(params IGuildUser[] users)
{ {
if (!users.Any()) if (!users.Any())
return; return;
try
{
foreach (var u in users) foreach (var u in users)
{
try
{ {
await u.ModifyAsync(usr => usr.Deaf = true).ConfigureAwait(false); await u.ModifyAsync(usr => usr.Deaf = true).ConfigureAwait(false);
} }
await Context.Channel.SendConfirmAsync("🔇 **Deafen** successful.").ConfigureAwait(false);
}
catch catch
{ {
await Context.Channel.SendErrorAsync("⚠️ I most likely don't have the permission necessary for that.").ConfigureAwait(false); // ignored
} }
}
await ReplyConfirmLocalized("deafen").ConfigureAwait(false);
} }
[NadekoCommand, Usage, Description, Aliases] [NadekoCommand, Usage, Description, Aliases]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]
[RequireUserPermission(GuildPermission.DeafenMembers)] [RequireUserPermission(GuildPermission.DeafenMembers)]
[RequireBotPermission(GuildPermission.DeafenMembers)]
public async Task UnDeafen(params IGuildUser[] users) public async Task UnDeafen(params IGuildUser[] users)
{ {
if (!users.Any()) if (!users.Any())
return; return;
try
{
foreach (var u in users) foreach (var u in users)
{
try
{ {
await u.ModifyAsync(usr => usr.Deaf = false).ConfigureAwait(false); await u.ModifyAsync(usr => usr.Deaf = false).ConfigureAwait(false);
} }
await Context.Channel.SendConfirmAsync("🔊 **Undeafen** successful.").ConfigureAwait(false);
}
catch catch
{ {
await Context.Channel.SendErrorAsync("⚠️ I most likely don't have the permission necessary for that.").ConfigureAwait(false); // ignored
} }
} }
await ReplyConfirmLocalized("undeafen").ConfigureAwait(false);
}
[NadekoCommand, Usage, Description, Aliases] [NadekoCommand, Usage, Description, Aliases]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]
[RequireUserPermission(GuildPermission.ManageChannels)] [RequireUserPermission(GuildPermission.ManageChannels)]
[RequireBotPermission(GuildPermission.ManageChannels)]
public async Task DelVoiChanl([Remainder] IVoiceChannel voiceChannel) public async Task DelVoiChanl([Remainder] IVoiceChannel voiceChannel)
{ {
await voiceChannel.DeleteAsync().ConfigureAwait(false); await voiceChannel.DeleteAsync().ConfigureAwait(false);
await Context.Channel.SendConfirmAsync($"🗑 Removed voice channel **{voiceChannel.Name}** successfully.").ConfigureAwait(false); await ReplyConfirmLocalized("delvoich", Format.Bold(voiceChannel.Name)).ConfigureAwait(false);
} }
[NadekoCommand, Usage, Description, Aliases] [NadekoCommand, Usage, Description, Aliases]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]
[RequireUserPermission(GuildPermission.ManageChannels)] [RequireUserPermission(GuildPermission.ManageChannels)]
[RequireBotPermission(GuildPermission.ManageChannels)]
public async Task CreatVoiChanl([Remainder] string channelName) public async Task CreatVoiChanl([Remainder] string channelName)
{ {
var ch = await Context.Guild.CreateVoiceChannelAsync(channelName).ConfigureAwait(false); var ch = await Context.Guild.CreateVoiceChannelAsync(channelName).ConfigureAwait(false);
await Context.Channel.SendConfirmAsync($"✅ Created voice channel **{ch.Name}**. ID: `{ch.Id}`").ConfigureAwait(false); await ReplyConfirmLocalized("createvoich",Format.Bold(ch.Name)).ConfigureAwait(false);
} }
[NadekoCommand, Usage, Description, Aliases] [NadekoCommand, Usage, Description, Aliases]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]
[RequireUserPermission(GuildPermission.ManageChannels)] [RequireUserPermission(GuildPermission.ManageChannels)]
[RequireBotPermission(GuildPermission.ManageChannels)]
public async Task DelTxtChanl([Remainder] ITextChannel toDelete) public async Task DelTxtChanl([Remainder] ITextChannel toDelete)
{ {
await toDelete.DeleteAsync().ConfigureAwait(false); await toDelete.DeleteAsync().ConfigureAwait(false);
await Context.Channel.SendConfirmAsync($"🗑 Removed text channel **{toDelete.Name}**. ID: `{toDelete.Id}`").ConfigureAwait(false); await ReplyConfirmLocalized("deltextchan", Format.Bold(toDelete.Name)).ConfigureAwait(false);
} }
[NadekoCommand, Usage, Description, Aliases] [NadekoCommand, Usage, Description, Aliases]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]
[RequireUserPermission(GuildPermission.ManageChannels)] [RequireUserPermission(GuildPermission.ManageChannels)]
[RequireBotPermission(GuildPermission.ManageChannels)]
public async Task CreaTxtChanl([Remainder] string channelName) public async Task CreaTxtChanl([Remainder] string channelName)
{ {
var txtCh = await Context.Guild.CreateTextChannelAsync(channelName).ConfigureAwait(false); var txtCh = await Context.Guild.CreateTextChannelAsync(channelName).ConfigureAwait(false);
await Context.Channel.SendConfirmAsync($"✅ Added text channel **{txtCh.Name}**. ID: `{txtCh.Id}`").ConfigureAwait(false); await ReplyConfirmLocalized("createtextchan", Format.Bold(txtCh.Name)).ConfigureAwait(false);
} }
[NadekoCommand, Usage, Description, Aliases] [NadekoCommand, Usage, Description, Aliases]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]
[RequireUserPermission(GuildPermission.ManageChannels)] [RequireUserPermission(GuildPermission.ManageChannels)]
[RequireBotPermission(GuildPermission.ManageChannels)]
public async Task SetTopic([Remainder] string topic = null) public async Task SetTopic([Remainder] string topic = null)
{ {
var channel = (ITextChannel)Context.Channel; var channel = (ITextChannel)Context.Channel;
topic = topic ?? ""; topic = topic ?? "";
await channel.ModifyAsync(c => c.Topic = topic); await channel.ModifyAsync(c => c.Topic = topic);
await channel.SendConfirmAsync("🆗 **New channel topic set.**").ConfigureAwait(false); await ReplyConfirmLocalized("set_topic").ConfigureAwait(false);
} }
[NadekoCommand, Usage, Description, Aliases] [NadekoCommand, Usage, Description, Aliases]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]
[RequireUserPermission(GuildPermission.ManageChannels)] [RequireUserPermission(GuildPermission.ManageChannels)]
[RequireBotPermission(GuildPermission.ManageChannels)]
public async Task SetChanlName([Remainder] string name) public async Task SetChanlName([Remainder] string name)
{ {
var channel = (ITextChannel)Context.Channel; var channel = (ITextChannel)Context.Channel;
await channel.ModifyAsync(c => c.Name = name).ConfigureAwait(false); await channel.ModifyAsync(c => c.Name = name).ConfigureAwait(false);
await channel.SendConfirmAsync("🆗 **New channel name set.**").ConfigureAwait(false); await ReplyConfirmLocalized("set_channel_name").ConfigureAwait(false);
} }
@ -459,6 +444,7 @@ namespace NadekoBot.Modules.Administration
[NadekoCommand, Usage, Description, Aliases] [NadekoCommand, Usage, Description, Aliases]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]
[RequireUserPermission(ChannelPermission.ManageMessages)] [RequireUserPermission(ChannelPermission.ManageMessages)]
[RequireBotPermission(GuildPermission.ManageMessages)]
public async Task Prune(int count) public async Task Prune(int count)
{ {
if (count < 1) if (count < 1)
@ -474,6 +460,7 @@ namespace NadekoBot.Modules.Administration
[NadekoCommand, Usage, Description, Aliases] [NadekoCommand, Usage, Description, Aliases]
[RequireContext(ContextType.Guild)] [RequireContext(ContextType.Guild)]
[RequireUserPermission(ChannelPermission.ManageMessages)] [RequireUserPermission(ChannelPermission.ManageMessages)]
[RequireBotPermission(GuildPermission.ManageMessages)]
public async Task Prune(IGuildUser user, int count = 100) public async Task Prune(IGuildUser user, int count = 100)
{ {
if (count < 1) if (count < 1)
@ -492,7 +479,7 @@ namespace NadekoBot.Modules.Administration
[RequireUserPermission(GuildPermission.MentionEveryone)] [RequireUserPermission(GuildPermission.MentionEveryone)]
public async Task MentionRole(params IRole[] roles) public async Task MentionRole(params IRole[] roles)
{ {
string send = $"❕{Context.User.Mention} has invoked a mention on the following roles ❕"; string send = "❕" +GetText("menrole",Context.User.Mention);
foreach (var role in roles) foreach (var role in roles)
{ {
send += $"\n**{role.Name}**\n"; send += $"\n**{role.Name}**\n";
@ -510,7 +497,7 @@ namespace NadekoBot.Modules.Administration
await Context.Channel.SendMessageAsync(send).ConfigureAwait(false); await Context.Channel.SendMessageAsync(send).ConfigureAwait(false);
} }
IGuild _nadekoSupportServer; private IGuild _nadekoSupportServer;
[NadekoCommand, Usage, Description, Aliases] [NadekoCommand, Usage, Description, Aliases]
public async Task Donators() public async Task Donators()
{ {
@ -520,7 +507,7 @@ namespace NadekoBot.Modules.Administration
{ {
donatorsOrdered = uow.Donators.GetDonatorsOrdered(); donatorsOrdered = uow.Donators.GetDonatorsOrdered();
} }
await Context.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(GetText("donators"), string.Join("⭐", donatorsOrdered.Select(d => d.Name))).ConfigureAwait(false);
_nadekoSupportServer = _nadekoSupportServer ?? NadekoBot.Client.GetGuild(117523346618318850); _nadekoSupportServer = _nadekoSupportServer ?? NadekoBot.Client.GetGuild(117523346618318850);
@ -543,8 +530,7 @@ namespace NadekoBot.Modules.Administration
don = uow.Donators.AddOrUpdateDonator(donator.Id, donator.Username, amount); don = uow.Donators.AddOrUpdateDonator(donator.Id, donator.Username, amount);
await uow.CompleteAsync(); await uow.CompleteAsync();
} }
await ReplyConfirmLocalized("donadd", don.Amount).ConfigureAwait(false);
await Context.Channel.SendConfirmAsync($"Successfuly added a new donator. Total donated amount from this user: {don.Amount} 👑").ConfigureAwait(false);
} }
//[NadekoCommand, Usage, Description, Aliases] //[NadekoCommand, Usage, Description, Aliases]

View File

@ -24,7 +24,7 @@ namespace NadekoBot.Modules.Administration
{ {
private const int CURRENT_VERSION = 1; private const int CURRENT_VERSION = 1;
private static Logger _log { get; } private new static readonly Logger _log;
static Migration() static Migration()
{ {

View File

@ -95,6 +95,16 @@ namespace NadekoBot.Resources {
} }
} }
/// <summary>
/// Looks up a localized string similar to You have been banned from {0} server.
///Reason: {1}.
/// </summary>
public static string administration_bandm {
get {
return ResourceManager.GetString("administration_bandm", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to banned. /// Looks up a localized string similar to banned.
/// </summary> /// </summary>
@ -104,6 +114,15 @@ namespace NadekoBot.Resources {
} }
} }
/// <summary>
/// Looks up a localized string similar to User Banned.
/// </summary>
public static string administration_banned_user {
get {
return ResourceManager.GetString("administration_banned_user", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to Bot name changed to {0}. /// Looks up a localized string similar to Bot name changed to {0}.
/// </summary> /// </summary>
@ -230,6 +249,42 @@ namespace NadekoBot.Resources {
} }
} }
/// <summary>
/// Looks up a localized string similar to Sucessfully created role {0}.
/// </summary>
public static string administration_cr {
get {
return ResourceManager.GetString("administration_cr", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Text channel {0} created..
/// </summary>
public static string administration_createtextchan {
get {
return ResourceManager.GetString("administration_createtextchan", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Voice channel {0} created..
/// </summary>
public static string administration_createvoich {
get {
return ResourceManager.GetString("administration_createvoich", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Deafen successful..
/// </summary>
public static string administration_deafen {
get {
return ResourceManager.GetString("administration_deafen", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to Deleted server {0}. /// Looks up a localized string similar to Deleted server {0}.
/// </summary> /// </summary>
@ -239,6 +294,42 @@ namespace NadekoBot.Resources {
} }
} }
/// <summary>
/// Looks up a localized string similar to Stopped automatic deletion of successful command invokations..
/// </summary>
public static string administration_delmsg_off {
get {
return ResourceManager.GetString("administration_delmsg_off", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Now automatically deleting sucessful command invokations..
/// </summary>
public static string administration_delmsg_on {
get {
return ResourceManager.GetString("administration_delmsg_on", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Text channel {0} deleted..
/// </summary>
public static string administration_deltextchan {
get {
return ResourceManager.GetString("administration_deltextchan", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Voice channel {0} deleted..
/// </summary>
public static string administration_delvoich {
get {
return ResourceManager.GetString("administration_delvoich", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to DM from. /// Looks up a localized string similar to DM from.
/// </summary> /// </summary>
@ -248,6 +339,24 @@ namespace NadekoBot.Resources {
} }
} }
/// <summary>
/// Looks up a localized string similar to Sucessfully added a new donator.Total donated amount from this user: {0} 👑.
/// </summary>
public static string administration_donadd {
get {
return ResourceManager.GetString("administration_donadd", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Thanks to the people listed below for making this project hjappen!.
/// </summary>
public static string administration_donators {
get {
return ResourceManager.GetString("administration_donators", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to I will forward DMs to all owners.. /// Looks up a localized string similar to I will forward DMs to all owners..
/// </summary> /// </summary>
@ -392,6 +501,15 @@ namespace NadekoBot.Resources {
} }
} }
/// <summary>
/// Looks up a localized string similar to You can&apos;t use this command on users with a role higher or equal to yours in the role hierarchy..
/// </summary>
public static string administration_hierarchy {
get {
return ResourceManager.GetString("administration_hierarchy", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to Images loaded after {0} seconds!. /// Looks up a localized string similar to Images loaded after {0} seconds!.
/// </summary> /// </summary>
@ -428,6 +546,25 @@ namespace NadekoBot.Resources {
} }
} }
/// <summary>
/// Looks up a localized string similar to You have been kicked from {0} server.
///Reason: {1}.
/// </summary>
public static string administration_kickdm {
get {
return ResourceManager.GetString("administration_kickdm", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to User Kicked.
/// </summary>
public static string administration_kicked_user {
get {
return ResourceManager.GetString("administration_kicked_user", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to List Of Languages /// Looks up a localized string similar to List Of Languages
///{0}. ///{0}.
@ -564,6 +701,15 @@ namespace NadekoBot.Resources {
} }
} }
/// <summary>
/// Looks up a localized string similar to {0} has invoked a mention on the following roles.
/// </summary>
public static string administration_menrole {
get {
return ResourceManager.GetString("administration_menrole", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to Message from {0} `[Bot Owner]`:. /// Looks up a localized string similar to Message from {0} `[Bot Owner]`:.
/// </summary> /// </summary>
@ -735,6 +881,24 @@ namespace NadekoBot.Resources {
} }
} }
/// <summary>
/// Looks up a localized string similar to Error. Most likely I don&apos;t have sufficient permissions..
/// </summary>
public static string administration_perms {
get {
return ResourceManager.GetString("administration_perms", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Permissions for this server are reset..
/// </summary>
public static string administration_perms_reset {
get {
return ResourceManager.GetString("administration_perms_reset", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to Active Protections. /// Looks up a localized string similar to Active Protections.
/// </summary> /// </summary>
@ -807,6 +971,105 @@ namespace NadekoBot.Resources {
} }
} }
/// <summary>
/// Looks up a localized string similar to Successfully removed all roles from user {0}.
/// </summary>
public static string administration_rar {
get {
return ResourceManager.GetString("administration_rar", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Failed to remove roles. I have insufficient permissions..
/// </summary>
public static string administration_rar_err {
get {
return ResourceManager.GetString("administration_rar_err", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Color of {0} role has been changed..
/// </summary>
public static string administration_rc {
get {
return ResourceManager.GetString("administration_rc", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to That role does not exist..
/// </summary>
public static string administration_rc_not_exist {
get {
return ResourceManager.GetString("administration_rc_not_exist", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to The parameters specified are invalid..
/// </summary>
public static string administration_rc_params {
get {
return ResourceManager.GetString("administration_rc_params", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Error occured due to invalid color or insufficient permissions..
/// </summary>
public static string administration_rc_perms {
get {
return ResourceManager.GetString("administration_rc_perms", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Successfully removed role {0} from user {1}.
/// </summary>
public static string administration_remrole {
get {
return ResourceManager.GetString("administration_remrole", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Failed to remove role. I have insufficient permissions..
/// </summary>
public static string administration_remrole_err {
get {
return ResourceManager.GetString("administration_remrole_err", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Role renamed..
/// </summary>
public static string administration_renrole {
get {
return ResourceManager.GetString("administration_renrole", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Failed to rename role. I have insufficient permissions..
/// </summary>
public static string administration_renrole_err {
get {
return ResourceManager.GetString("administration_renrole_err", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to You can&apos;t edit roles higher than your highest role..
/// </summary>
public static string administration_renrole_perms {
get {
return ResourceManager.GetString("administration_renrole_perms", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to Removed the playing message: {0}. /// Looks up a localized string similar to Removed the playing message: {0}.
/// </summary> /// </summary>
@ -997,6 +1260,15 @@ namespace NadekoBot.Resources {
} }
} }
/// <summary>
/// Looks up a localized string similar to New channel name set..
/// </summary>
public static string administration_set_channel_name {
get {
return ResourceManager.GetString("administration_set_channel_name", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to New game set!. /// Looks up a localized string similar to New game set!.
/// </summary> /// </summary>
@ -1015,6 +1287,33 @@ namespace NadekoBot.Resources {
} }
} }
/// <summary>
/// Looks up a localized string similar to New channel topic set..
/// </summary>
public static string administration_set_topic {
get {
return ResourceManager.GetString("administration_set_topic", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Sucessfully added role {0} to user {1}.
/// </summary>
public static string administration_setrole {
get {
return ResourceManager.GetString("administration_setrole", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Failed to add role. I have insufficient permissions..
/// </summary>
public static string administration_setrole_err {
get {
return ResourceManager.GetString("administration_setrole_err", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to Shard {0} reconnected.. /// Looks up a localized string similar to Shard {0} reconnected..
/// </summary> /// </summary>
@ -1124,6 +1423,15 @@ namespace NadekoBot.Resources {
} }
} }
/// <summary>
/// Looks up a localized string similar to Undeafen successful..
/// </summary>
public static string administration_undeafen {
get {
return ResourceManager.GetString("administration_undeafen", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to Unmuted. /// Looks up a localized string similar to Unmuted.
/// </summary> /// </summary>
@ -1268,6 +1576,15 @@ namespace NadekoBot.Resources {
} }
} }
/// <summary>
/// Looks up a localized string similar to Username.
/// </summary>
public static string administration_username {
get {
return ResourceManager.GetString("administration_username", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to Username Changed. /// Looks up a localized string similar to Username Changed.
/// </summary> /// </summary>
@ -1376,6 +1693,16 @@ namespace NadekoBot.Resources {
} }
} }
/// <summary>
/// Looks up a localized string similar to You have been soft-banned from {0} server.
///Reason: {1}.
/// </summary>
public static string administraton_sbdm {
get {
return ResourceManager.GetString("administraton_sbdm", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to User Unbanned. /// Looks up a localized string similar to User Unbanned.
/// </summary> /// </summary>
@ -1412,6 +1739,15 @@ namespace NadekoBot.Resources {
} }
} }
/// <summary>
/// Looks up a localized string similar to User Soft-Banned.
/// </summary>
public static string adminsitration_sb_user {
get {
return ResourceManager.GetString("adminsitration_sb_user", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to That base is already claimed or destroyed.. /// Looks up a localized string similar to That base is already claimed or destroyed..
/// </summary> /// </summary>

View File

@ -310,10 +310,17 @@
<data name="administration_avatar_changed" xml:space="preserve"> <data name="administration_avatar_changed" xml:space="preserve">
<value>Avatar Changed</value> <value>Avatar Changed</value>
</data> </data>
<data name="administration_bandm" xml:space="preserve">
<value>You have been banned from {0} server.
Reason: {1}</value>
</data>
<data name="administration_banned_pl" xml:space="preserve"> <data name="administration_banned_pl" xml:space="preserve">
<value>banned</value> <value>banned</value>
<comment>PLURAL</comment> <comment>PLURAL</comment>
</data> </data>
<data name="administration_banned_user" xml:space="preserve">
<value>User Banned</value>
</data>
<data name="administration_bot_name" xml:space="preserve"> <data name="administration_bot_name" xml:space="preserve">
<value>Bot name changed to {0}</value> <value>Bot name changed to {0}</value>
</data> </data>
@ -356,12 +363,42 @@
<data name="administration_content" xml:space="preserve"> <data name="administration_content" xml:space="preserve">
<value>Content</value> <value>Content</value>
</data> </data>
<data name="administration_cr" xml:space="preserve">
<value>Sucessfully created role {0}</value>
</data>
<data name="administration_createtextchan" xml:space="preserve">
<value>Text channel {0} created.</value>
</data>
<data name="administration_createvoich" xml:space="preserve">
<value>Voice channel {0} created.</value>
</data>
<data name="administration_deafen" xml:space="preserve">
<value>Deafen successful.</value>
</data>
<data name="administration_deleted_server" xml:space="preserve"> <data name="administration_deleted_server" xml:space="preserve">
<value>Deleted server {0}</value> <value>Deleted server {0}</value>
</data> </data>
<data name="administration_delmsg_off" xml:space="preserve">
<value>Stopped automatic deletion of successful command invokations.</value>
</data>
<data name="administration_delmsg_on" xml:space="preserve">
<value>Now automatically deleting sucessful command invokations.</value>
</data>
<data name="administration_deltextchan" xml:space="preserve">
<value>Text channel {0} deleted.</value>
</data>
<data name="administration_delvoich" xml:space="preserve">
<value>Voice channel {0} deleted.</value>
</data>
<data name="administration_dm_from" xml:space="preserve"> <data name="administration_dm_from" xml:space="preserve">
<value>DM from</value> <value>DM from</value>
</data> </data>
<data name="administration_donadd" xml:space="preserve">
<value>Sucessfully added a new donator.Total donated amount from this user: {0} 👑</value>
</data>
<data name="administration_donators" xml:space="preserve">
<value>Thanks to the people listed below for making this project hjappen!</value>
</data>
<data name="administration_fwall_start" xml:space="preserve"> <data name="administration_fwall_start" xml:space="preserve">
<value>I will forward DMs to all owners.</value> <value>I will forward DMs to all owners.</value>
</data> </data>
@ -410,6 +447,9 @@
<data name="administration_greet_on" xml:space="preserve"> <data name="administration_greet_on" xml:space="preserve">
<value>Greet announcements enabled on this channel.</value> <value>Greet announcements enabled on this channel.</value>
</data> </data>
<data name="administration_hierarchy" xml:space="preserve">
<value>You can't use this command on users with a role higher or equal to yours in the role hierarchy.</value>
</data>
<data name="administration_images_loaded" xml:space="preserve"> <data name="administration_images_loaded" xml:space="preserve">
<value>Images loaded after {0} seconds!</value> <value>Images loaded after {0} seconds!</value>
</data> </data>
@ -422,6 +462,13 @@
<data name="administration_joined" xml:space="preserve"> <data name="administration_joined" xml:space="preserve">
<value>{0} has joined {1}</value> <value>{0} has joined {1}</value>
</data> </data>
<data name="administration_kickdm" xml:space="preserve">
<value>You have been kicked from {0} server.
Reason: {1}</value>
</data>
<data name="administration_kicked_user" xml:space="preserve">
<value>User Kicked</value>
</data>
<data name="administration_lang_list" xml:space="preserve"> <data name="administration_lang_list" xml:space="preserve">
<value>List Of Languages <value>List Of Languages
{0}</value> {0}</value>
@ -468,6 +515,9 @@
<data name="administration_log_stop" xml:space="preserve"> <data name="administration_log_stop" xml:space="preserve">
<value>Stopped logging {0} event.</value> <value>Stopped logging {0} event.</value>
</data> </data>
<data name="administration_menrole" xml:space="preserve">
<value>{0} has invoked a mention on the following roles</value>
</data>
<data name="administration_message_from_bo" xml:space="preserve"> <data name="administration_message_from_bo" xml:space="preserve">
<value>Message from {0} `[Bot Owner]`:</value> <value>Message from {0} `[Bot Owner]`:</value>
</data> </data>
@ -527,6 +577,12 @@
<data name="administration_old_topic" xml:space="preserve"> <data name="administration_old_topic" xml:space="preserve">
<value>Old Topic</value> <value>Old Topic</value>
</data> </data>
<data name="administration_perms" xml:space="preserve">
<value>Error. Most likely I don't have sufficient permissions.</value>
</data>
<data name="administration_perms_reset" xml:space="preserve">
<value>Permissions for this server are reset.</value>
</data>
<data name="administration_prot_active" xml:space="preserve"> <data name="administration_prot_active" xml:space="preserve">
<value>Active Protections</value> <value>Active Protections</value>
</data> </data>
@ -551,6 +607,39 @@
<data name="administration_raid_time" xml:space="preserve"> <data name="administration_raid_time" xml:space="preserve">
<value>Time must be between {0} and {1} seconds.</value> <value>Time must be between {0} and {1} seconds.</value>
</data> </data>
<data name="administration_rar" xml:space="preserve">
<value>Successfully removed all roles from user {0}</value>
</data>
<data name="administration_rar_err" xml:space="preserve">
<value>Failed to remove roles. I have insufficient permissions.</value>
</data>
<data name="administration_rc" xml:space="preserve">
<value>Color of {0} role has been changed.</value>
</data>
<data name="administration_rc_not_exist" xml:space="preserve">
<value>That role does not exist.</value>
</data>
<data name="administration_rc_params" xml:space="preserve">
<value>The parameters specified are invalid.</value>
</data>
<data name="administration_rc_perms" xml:space="preserve">
<value>Error occured due to invalid color or insufficient permissions.</value>
</data>
<data name="administration_remrole" xml:space="preserve">
<value>Successfully removed role {0} from user {1}</value>
</data>
<data name="administration_remrole_err" xml:space="preserve">
<value>Failed to remove role. I have insufficient permissions.</value>
</data>
<data name="administration_renrole" xml:space="preserve">
<value>Role renamed.</value>
</data>
<data name="administration_renrole_err" xml:space="preserve">
<value>Failed to rename role. I have insufficient permissions.</value>
</data>
<data name="administration_renrole_perms" xml:space="preserve">
<value>You can't edit roles higher than your highest role.</value>
</data>
<data name="administration_reprm" xml:space="preserve"> <data name="administration_reprm" xml:space="preserve">
<value>Removed the playing message: {0}</value> <value>Removed the playing message: {0}</value>
</data> </data>
@ -612,15 +701,27 @@
<data name="administration_self_assign_sucess" xml:space="preserve"> <data name="administration_self_assign_sucess" xml:space="preserve">
<value>You now have {0} role.</value> <value>You now have {0} role.</value>
</data> </data>
<data name="administration_setrole" xml:space="preserve">
<value>Sucessfully added role {0} to user {1}</value>
</data>
<data name="administration_setrole_err" xml:space="preserve">
<value>Failed to add role. I have insufficient permissions.</value>
</data>
<data name="administration_set_avatar" xml:space="preserve"> <data name="administration_set_avatar" xml:space="preserve">
<value>New avatar set!</value> <value>New avatar set!</value>
</data> </data>
<data name="administration_set_channel_name" xml:space="preserve">
<value>New channel name set.</value>
</data>
<data name="administration_set_game" xml:space="preserve"> <data name="administration_set_game" xml:space="preserve">
<value>New game set!</value> <value>New game set!</value>
</data> </data>
<data name="administration_set_stream" xml:space="preserve"> <data name="administration_set_stream" xml:space="preserve">
<value>New stream set!</value> <value>New stream set!</value>
</data> </data>
<data name="administration_set_topic" xml:space="preserve">
<value>New channel topic set.</value>
</data>
<data name="administration_shard_reconnected" xml:space="preserve"> <data name="administration_shard_reconnected" xml:space="preserve">
<value>Shard {0} reconnected.</value> <value>Shard {0} reconnected.</value>
</data> </data>
@ -659,10 +760,16 @@
<data name="administration_text_chan_destroyed" xml:space="preserve"> <data name="administration_text_chan_destroyed" xml:space="preserve">
<value>Text Channel Destroyed </value> <value>Text Channel Destroyed </value>
</data> </data>
<data name="administration_undeafen" xml:space="preserve">
<value>Undeafen successful.</value>
</data>
<data name="administration_unmuted_sn" xml:space="preserve"> <data name="administration_unmuted_sn" xml:space="preserve">
<value>Unmuted</value> <value>Unmuted</value>
<comment>singular</comment> <comment>singular</comment>
</data> </data>
<data name="administration_username" xml:space="preserve">
<value>Username</value>
</data>
<data name="administration_username_changed" xml:space="preserve"> <data name="administration_username_changed" xml:space="preserve">
<value>Username Changed</value> <value>Username Changed</value>
</data> </data>
@ -744,6 +851,10 @@
<data name="administration_xmuted_voice" xml:space="preserve"> <data name="administration_xmuted_voice" xml:space="preserve">
<value>User {0} from voice chat</value> <value>User {0} from voice chat</value>
</data> </data>
<data name="administraton_sbdm" xml:space="preserve">
<value>You have been soft-banned from {0} server.
Reason: {1}</value>
</data>
<data name="administraton_user_unbanned" xml:space="preserve"> <data name="administraton_user_unbanned" xml:space="preserve">
<value>User Unbanned</value> <value>User Unbanned</value>
</data> </data>
@ -756,6 +867,9 @@
<data name="adminsitration_presence_updates" xml:space="preserve"> <data name="adminsitration_presence_updates" xml:space="preserve">
<value>Presence Updates</value> <value>Presence Updates</value>
</data> </data>
<data name="adminsitration_sb_user" xml:space="preserve">
<value>User Soft-Banned</value>
</data>
<data name="help_back_to_toc" xml:space="preserve"> <data name="help_back_to_toc" xml:space="preserve">
<value>Back to ToC</value> <value>Back to ToC</value>
</data> </data>