public async Task New(CommandContext ctx, [Description("Уникальное имя корабля")][RemainingText] string name) { var doc = XDocument.Load("actions.xml"); foreach (var action in doc.Element("actions").Elements("action")) { if (Convert.ToUInt64(action.Value) == ctx.Member.Id) { await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Вы не можете снова создать корабль!"); return; } } var ship = Ship.Create(name, 0, 0); ship.AddMember(ctx.Member.Id, MemberType.Owner); ShipList.SaveToXML(Bot.BotSettings.ShipXML); doc.Element("actions").Add(new XElement("action", ctx.Member.Id, new XAttribute("type", "ship"))); doc.Save("actions.xml"); await ctx.Guild.GetChannel(Bot.BotSettings.PrivateRequestsChannel) .SendMessageAsync($"**Запрос на создание корабля**\n\n" + $"**От:** {ctx.Member.Mention} ({ctx.Member.Id})\n" + $"**Название:** {name}\n" + $"**Время:** {DateTime.Now.ToUniversalTime()}\n\n" + $"Отправьте `{Bot.BotSettings.Prefix}confirm {name}` для подтверждения, или " + $"`{Bot.BotSettings.Prefix}decline {name}` для отказа."); await ctx.RespondAsync( $"{Bot.BotSettings.OkEmoji} Успешно отправлен запрос на создание корабля **{name}**!"); }
public async Task Leave(CommandContext ctx, [Description("Корабль")][RemainingText] string name) { if (!ShipList.Ships[name].Members.ContainsKey(ctx.Member.Id)) { await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Вы не являетесь членом этого корабля!"); return; } if (ShipList.Ships[name].Members[ctx.Member.Id].Type == MemberType.Owner) { await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Вы должны передать права владельца корабля прежде чем покинуть его!"); return; } if (!ShipList.Ships[name].Members[ctx.Member.Id].Status) { await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Чтобы отклонить приглашение используйте команду `!no`!"); return; } ShipList.Ships[name].RemoveMember(ctx.Member.Id); ShipList.SaveToXML(Bot.BotSettings.ShipXML); await ctx.Member.RevokeRoleAsync(ctx.Guild.GetRole(ShipList.Ships[name].Role)); await ctx.RespondAsync($"{Bot.BotSettings.OkEmoji} Вы покинули корабль **{name}**!"); }
public async Task Invite(CommandContext ctx, [Description("Участник")] DiscordMember member) { var ship = ShipList.GetOwnedShip(ctx.Member.Id); if (ship == null) { await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Вы не являетесь владельцем корабля!"); return; } if (ctx.Member == member) { await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Нельзя пригласить самого себя!"); return; } ship.AddMember(member.Id); ShipList.SaveToXML(Bot.BotSettings.ShipXML); await member.SendMessageAsync( $"Вы были приглашены на корабль **{ship.Name}** участником **{ctx.Member.Username}**! Отправьте " + $"`{Bot.BotSettings.Prefix}yes {ship.Name}` для принятия приглашения, или `{Bot.BotSettings.Prefix}no {ship.Name}` для отказа."); await ctx.RespondAsync( $"{Bot.BotSettings.OkEmoji} Успешно отправлено приглашение участнику {member.Username}!"); }
public async Task ADelete(CommandContext ctx, [RemainingText] string name) { if (!ShipList.Ships.ContainsKey(name)) { await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Не найден корабль с названием **{name}**!"); return; } var ship = ShipList.Ships[name]; var role = ctx.Guild.GetRole(ship.Role); var channel = ctx.Guild.GetChannel(ship.Channel); DiscordMember owner = null; foreach (var member in ship.Members.Values) { if (member.Type == MemberType.Owner) { owner = await ctx.Guild.GetMemberAsync(member.Id); break; } } ship.Delete(); ShipList.SaveToXML(Bot.BotSettings.ShipXML); await ctx.Guild.DeleteRoleAsync(role); await channel.DeleteAsync(); var doc = XDocument.Load("actions.xml"); foreach (var action in doc.Element("actions").Elements("action")) { if (owner != null && Convert.ToUInt64(action.Value) == owner.Id) { action.Remove(); } } doc.Save("actions.xml"); await ctx.RespondAsync($"{Bot.BotSettings.OkEmoji} Успешно удален корабль!"); await ctx.Guild.GetChannel(Bot.BotSettings.ModlogChannel).SendMessageAsync( $"**Удаление корабля**\n\n" + $"**Модератор:** {ctx.Member}\n" + $"**Корабль:** {name}\n" + $"**Владелец:** {owner}\n" + $"**Дата:** {DateTime.Now.ToUniversalTime()} UTC"); }
public async Task No(CommandContext ctx, [Description("Корабль")][RemainingText] string name) { var ship = ShipList.Ships[name]; if (!ship.IsInvited(ctx.Member.Id)) { await ctx.RespondAsync( $"{Bot.BotSettings.ErrorEmoji} Вы не были приглашены присоединиться к этому кораблю!"); return; } ship.RemoveMember(ctx.Member.Id); ShipList.SaveToXML(Bot.BotSettings.ShipXML); await ctx.RespondAsync($"{Bot.BotSettings.OkEmoji} Вы успешно отклонили приглашение на корабль **{name}**!"); }
public async Task Confirm(CommandContext ctx, [Description("Название корабля")][RemainingText] string name) { if (!ShipList.Ships.ContainsKey(name)) { await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Не найден корабль с названием **{name}**!"); return; } if (ShipList.Ships[name].Status) { await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Корабль с названием **{name}** уже активирован!"); return; } var role = await ctx.Guild.CreateRoleAsync($"☠{name}☠", null, new DiscordColor("7e41ad"), true, true); var channel = await ctx.Guild.CreateChannelAsync($"☠{name}☠", ChannelType.Voice, ctx.Guild.GetChannel(Bot.BotSettings.PrivateCategory), Bot.BotSettings.Bitrate); await channel.AddOverwriteAsync(role, Permissions.UseVoice, Permissions.None); await channel.AddOverwriteAsync(ctx.Guild.EveryoneRole, Permissions.None, Permissions.UseVoice); var member = await ctx.Guild.GetMemberAsync(ShipList.Ships[name].Members.ToArray()[0].Value.Id); await member.GrantRoleAsync(role); ShipList.Ships[name].SetChannel(channel.Id); ShipList.Ships[name].SetRole(role.Id); ShipList.Ships[name].SetStatus(true); ShipList.Ships[name].SetMemberStatus(member.Id, true); ShipList.SaveToXML(Bot.BotSettings.ShipXML); await member.SendMessageAsync( $"{Bot.BotSettings.OkEmoji} Запрос на создание корабля **{name}** был подтвержден администратором **{ctx.Member.Username}**"); await ctx.RespondAsync( $"{Bot.BotSettings.OkEmoji} Вы успешно подтвердили запрос на создание корабля **{name}**!"); }
public async Task Kick(CommandContext ctx, [Description("Участник")] DiscordMember member) { var ship = ShipList.GetOwnedShip(ctx.Member.Id); if (ship == null) { await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Вы не являетесь владельцем корабля!"); return; } if (ctx.Member == member) { await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Нельзя выгнать самого себя!"); return; } if (!ship.Members.ContainsKey(member.Id)) { await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Этот участник не является членом вашего корабля!"); return; } if (!ship.Members[member.Id].Status) { await ctx.RespondAsync( $"{Bot.BotSettings.ErrorEmoji} Используйте команду `!uninvite [DiscordMember]`, чтобы отозвать приглашение!"); return; } ship.RemoveMember(member.Id); await member.RevokeRoleAsync(ctx.Guild.GetRole(ship.Role)); ShipList.SaveToXML(Bot.BotSettings.ShipXML); await ctx.RespondAsync( $"{Bot.BotSettings.OkEmoji} Вы выгнали участника **{member.Username}** с корабля **{ship.Name}**!"); await member.SendMessageAsync($"Капитан **{ctx.Member.Username}** выгнал вас с корабля **{ship.Name}**!"); }
public async Task Yes(CommandContext ctx, [Description("Корабль")][RemainingText] string name) { var ship = ShipList.Ships[name]; if (!ship.IsInvited(ctx.Member.Id)) { await ctx.RespondAsync( $"{Bot.BotSettings.ErrorEmoji} Вы не были приглашены присоединиться к этому кораблю!"); return; } ship.SetMemberStatus(ctx.Member.Id, true); ShipList.SaveToXML(Bot.BotSettings.ShipXML); await ctx.Member.GrantRoleAsync(ctx.Guild.GetRole(ship.Role)); await ctx.RespondAsync($"{Bot.BotSettings.OkEmoji} Добро пожаловать на борт корабля **{name}**!"); }
public async Task Decline(CommandContext ctx, [Description("Название корабля")][RemainingText] string name) { if (!ShipList.Ships.ContainsKey(name)) { await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Не найден корабль с названием **{name}**!"); return; } if (ShipList.Ships[name].Status) { await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Корабль с названием **{name}** уже активирован!"); return; } var member = await ctx.Guild.GetMemberAsync(ShipList.Ships[name].Members.ToArray()[0].Value.Id); ShipList.Ships[name].Delete(); ShipList.SaveToXML(Bot.BotSettings.ShipXML); var doc = XDocument.Load("actions.xml"); foreach (var action in doc.Element("actions").Elements("action")) { if (Convert.ToUInt64(action.Value) == member.Id) { action.Remove(); } } doc.Save("actions.xml"); await member.SendMessageAsync( $"{Bot.BotSettings.OkEmoji} Запрос на создание корабля **{name}** был отклонен администратором **{ctx.Member.Username}**"); await ctx.RespondAsync( $"{Bot.BotSettings.OkEmoji} Вы успешно отклонили запрос на создание корабля **{name}**!"); }
public async Task Prune(CommandContext ctx) { var ship = ShipList.GetOwnedShip(ctx.Member.Id); if (ship == null) { await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Вы не являетесь владельцем корабля!"); return; } List <ulong> toBePruned = new List <ulong>(); foreach (var member in ship.Members) { try { var m = await ctx.Guild.GetMemberAsync(member.Value.Id); } catch (NotFoundException) { toBePruned.Add(member.Value.Id); } } int i = 0; foreach (var member in toBePruned) { ship.RemoveMember(member); ++i; } ShipList.SaveToXML(Bot.BotSettings.ShipXML); await ctx.RespondAsync($"{Bot.BotSettings.OkEmoji} Успешно завершена очистка! Было удалено **{i}** человек."); }
public async Task Rename(CommandContext ctx, [RemainingText][Description("Новое название")] string name) { var ship = ShipList.GetOwnedShip(ctx.Member.Id); if (ship == null) { await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Вы не являетесь владельцем корабля!"); return; } ship.Rename(name); ShipList.SaveToXML(Bot.BotSettings.ShipXML); ShipList.ReadFromXML(Bot.BotSettings.ShipXML); //костыль адовый name = "☠" + name + "☠"; await ctx.Guild.UpdateRoleAsync(ctx.Guild.GetRole(ship.Role), name); await ctx.Guild.GetChannel(ship.Channel).ModifyAsync(name); await ctx.RespondAsync($"{Bot.BotSettings.OkEmoji} Успешно переименован корабль!"); }