public async Task Invite(CommandContext ctx, [Description("Участник")] DiscordMember member) { var ship = PrivateShip.GetOwnedShip(ctx.Member.Id); if (ship == null || ship.GetCaptain().Status == false) { await ctx.RespondAsync( $"{Bot.BotSettings.ErrorEmoji} Ты не являешься владельцем корабля или твой запрос ещё не был подтвержден."); return; } if (ship.GetMembers().Any(m => m.MemberId == member.Id)) { await ctx.RespondAsync( $"{Bot.BotSettings.ErrorEmoji} Пользователь уже приглашен или является участником корабля."); return; } ship.AddMember(member.Id, PrivateShipMemberRole.Member, false); try { await member.SendMessageAsync( $"Ты был приглашён присоединиться к кораблю **{ship.Name}**. Используй в канале для команд " + $"`!p yes {ship.Name}`, чтобы принять приглашение, или `!p no {ship.Name}`, чтобы отклонить его."); } catch (UnauthorizedException) { } await ctx.RespondAsync($"{Bot.BotSettings.OkEmoji} Приглашение успешно отправлено."); }
public async Task Invite(CommandContext ctx, [Description("Участник")] DiscordMember member, [Description("Корабль (необязательно для капитанов)")] [RemainingText] string shipName) { PrivateShip ship = null; if (string.IsNullOrEmpty(shipName)) { ship = PrivateShip.GetOwnedShip(ctx.Member.Id); if (ship == null) { await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Ты не являешься капитаном. Офицеры могут использовать команду " + $"`!p invite участник название корабля`"); return; } } else { ship = PrivateShip.Get(shipName); if (ship == null) { await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Указанный корабль не был найден!"); return; } } var requesterMember = ship.GetMember(ctx.Member.Id); if (requesterMember == null || (requesterMember.Role != PrivateShipMemberRole.Officer && requesterMember.Role != PrivateShipMemberRole.Captain)) { await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Ты не являешься офицером или капитаном на данном корабле"); return; } if (ship.GetMembers().Any(m => m.MemberId == member.Id)) { await ctx.RespondAsync( $"{Bot.BotSettings.ErrorEmoji} Пользователь уже приглашен или является участником корабля."); return; } ship.AddMember(member.Id, PrivateShipMemberRole.Member, false); try { await member.SendMessageAsync( $":envelope: Ты был приглашён присоединиться к кораблю **{ship.Name}**. Используй в канале для команд " + $"`!p yes {ship.Name}`, чтобы принять приглашение, или `!p no {ship.Name}`, чтобы отклонить его."); } catch (UnauthorizedException) { } await ctx.RespondAsync($"{Bot.BotSettings.OkEmoji} Приглашение успешно отправлено."); }
public async Task New(CommandContext ctx, [Description("Уникальное имя корабля")][RemainingText] string name) { // check if user already has a ship if (PrivateShip.GetOwnedShip(ctx.Member.Id) != null) { await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Ты уже являешься владельцем корабля."); return; } var requestTime = DateTime.Now; // check if the ship name is not set if (string.IsNullOrEmpty(name)) { await ctx.RespondAsync( $"{Bot.BotSettings.ErrorEmoji} Ты не указал имя корабля: `!p new название корабля`"); return; } // check if there is a ship with the same name if (PrivateShip.Get(name) != null) { await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Корабль с таким именем уже существует."); return; } // create a new ship var ship = PrivateShip.Create(name, requestTime, 0); ship.AddMember(ctx.Member.Id, PrivateShipMemberRole.Captain, false); // create a request message var requestsChannel = ctx.Guild.GetChannel(Bot.BotSettings.PrivateRequestsChannel); var requestText = "**Запрос на создание корабля**\n\n" + $"**От:** {ctx.Member.Mention} ({ctx.Member.Id})\n" + $"**Название:** {name}\n" + $"**Время:** {DateTime.Now}\n\n" + $"Используйте :white_check_mark: для подтверждения или :no_entry: для отказа."; var message = await requestsChannel.SendMessageAsync(requestText); await message.CreateReactionAsync(DiscordEmoji.FromName(ctx.Client, ":white_check_mark:")); await message.CreateReactionAsync(DiscordEmoji.FromName(ctx.Client, ":no_entry:")); ship.RequestMessage = message.Id; // notify user await ctx.RespondAsync($"{Bot.BotSettings.OkEmoji} Запрос успешно отправлен"); }
private static string GetPrivateShip(ulong userId) { var ship = PrivateShip.GetOwnedShip(userId); if (ship == null) { return(null); } else { return(ship.Name); } }
public async Task Kick(CommandContext ctx, [Description("Участник")] DiscordMember member) { var ship = PrivateShip.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; } var members = ship.GetMembers(); var selected = members.Find(m => m.MemberId == member.Id); if (selected == null) { await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Этого участника нет на корабле."); return; } ship.RemoveMember(selected.MemberId); await ctx.RespondAsync($"{Bot.BotSettings.OkEmoji} Ты успешно выгнал участника с корабля."); try { if (selected.Status) { await ctx.Guild.GetChannel(ship.Channel).AddOverwriteAsync(member); await member.SendMessageAsync($"Капитан **{ctx.Member.DisplayName}#{ctx.Member.Discriminator}** " + $"выгнал тебя с корабля **{ship.Name}**"); } else { await member.SendMessageAsync($"Капитан **{ctx.Member.DisplayName}#{ctx.Member.Discriminator}** " + $"отменил твоё приглашение на корабль **{ship.Name}**"); } } catch (UnauthorizedException) { } }
public async Task Transfer(CommandContext ctx, [Description("Новый капитан")] DiscordMember member) { var ship = PrivateShip.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; } var members = ship.GetMembers(); var oldCaptain = members.Find(m => m.Role == PrivateShipMemberRole.Captain); var newCaptain = members.Find(m => m.MemberId == member.Id); if (newCaptain == null) { await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Нельзя передать права пользователю, которого нет на твоём корабле"); return; } newCaptain.Role = PrivateShipMemberRole.Captain; if (oldCaptain != null) { oldCaptain.Role = PrivateShipMemberRole.Member; } await ctx.RespondAsync($"{Bot.BotSettings.OkEmoji} Ты успешно передал должность капитана"); try { await member.SendMessageAsync($"Ты был назначен капитаном корабля **{ship.Name}**"); return; } catch (UnauthorizedException) { } }
public async Task List(CommandContext ctx) { var ship = PrivateShip.GetOwnedShip(ctx.Member.Id); if (ship == null) { await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Вы не являетесь владельцем корабля!"); return; } var members = ship.GetMembers().OrderByDescending(m => m.Role).ToList(); await ctx.Channel.TriggerTypingAsync(); var memberList = new List <string>(); foreach (var member in members) { DiscordMember discordMember = null; try { discordMember = await ctx.Guild.GetMemberAsync(member.MemberId); } catch (NotFoundException) { continue; } var type = PrivateShipMember.RoleEnumToStringRu(member.Role); memberList.Add($"{type} {discordMember.DisplayName}#{discordMember.Discriminator}."); } var interactivity = ctx.Client.GetInteractivity(); var membersPagination = Utility.GeneratePagesInEmbeds(memberList, $"Список членов экипажа вашего корабля."); if (memberList.Count() > 1) { await interactivity.SendPaginatedMessageAsync(ctx.Channel, ctx.User, membersPagination, timeoutoverride : TimeSpan.FromMinutes(5)); } else { await ctx.RespondAsync(embed : membersPagination.First().Embed); } }
public async Task Rename(CommandContext ctx, [RemainingText][Description("Новое название")] string name) { var ship = PrivateShip.GetOwnedShip(ctx.Member.Id); if (ship == null) { await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Ты не являешься владельцем корабля"); return; } ship.Name = name; name = "☠" + name + "☠"; await ctx.Guild.GetChannel(ship.Channel).ModifyAsync(x => x.Name = name); await ctx.RespondAsync($"{Bot.BotSettings.OkEmoji} Успешно переименован корабль"); }
public async Task Demote(CommandContext ctx, [Description("Офицер")] DiscordMember member) { var ship = PrivateShip.GetOwnedShip(ctx.Member.Id); if (ship == null) { await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Ты не являешься капитаном корабля"); return; } // check if the specified member is a ship member var shipMember = ship.GetMember(member.Id); if (shipMember == null || !shipMember.Status) { await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Этого участника нет на корабле"); return; } // check if the specified member is not an officer if (shipMember.Role != PrivateShipMemberRole.Officer) { await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Участник не является офицером"); return; } shipMember.Role = PrivateShipMemberRole.Member; try { await member.SendMessageAsync($":arrow_down: Ты был снят с должности офицера на корабле **{ship.Name}**"); } catch (UnauthorizedException) { } await ctx.RespondAsync($"{Bot.BotSettings.OkEmoji} Участник был снят с должности офицера"); }
public async Task Promote(CommandContext ctx, [Description("Новый офицер")] DiscordMember member) { var ship = PrivateShip.GetOwnedShip(ctx.Member.Id); if (ship == null) { await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Ты не являешься капитаном корабля"); return; } // check if the specified member is a ship member var shipMember = ship.GetMember(member.Id); if (shipMember == null || !shipMember.Status) { await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Нельзя назначить офицером пользователя, которого нет на корабле"); return; } // check if the specified member is not an officer already if (shipMember.Role == PrivateShipMemberRole.Officer) { await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Пользователь уже является офицером"); return; } shipMember.Role = PrivateShipMemberRole.Officer; try { await member.SendMessageAsync($":arrow_up: Ты был назначен офицером на корабле **{ship.Name}**"); } catch (UnauthorizedException) { } await ctx.RespondAsync($"{Bot.BotSettings.OkEmoji} Участник был успешно назначен офицером"); }
public async Task List(CommandContext ctx, [Description("Название корабля (необязательно для капитанов)")][RemainingText] string shipName = null) { PrivateShip ship = null; if (string.IsNullOrEmpty(shipName)) { ship = PrivateShip.GetOwnedShip(ctx.Member.Id); if (ship == null) { await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Ты не являешься капитаном. Офицеры могут использовать команду " + $"`!p list название корабля`"); return; } } else { ship = PrivateShip.Get(shipName); if (ship == null) { await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Указанный корабль не был найден!"); return; } } var requesterMember = ship.GetMember(ctx.Member.Id); if (requesterMember == null || (requesterMember.Role != PrivateShipMemberRole.Officer && requesterMember.Role != PrivateShipMemberRole.Captain)) { await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Ты не являешься офицером или капитаном на данном корабле"); return; } var members = ship.GetMembers().OrderByDescending(m => m.Role).ToList(); await ctx.Channel.TriggerTypingAsync(); var memberList = new List <string>(); foreach (var member in members) { DiscordMember discordMember = null; try { discordMember = await ctx.Guild.GetMemberAsync(member.MemberId); } catch (NotFoundException) { continue; } var type = PrivateShipMember.RoleEnumToStringRu(member.Role); memberList.Add($"{type} {discordMember.DisplayName}#{discordMember.Discriminator}." + (member.Status ? null : " Приглашён.")); } var interactivity = ctx.Client.GetInteractivity(); var membersPagination = Utility.GeneratePagesInEmbeds(memberList, $"Список членов экипажа вашего корабля."); if (memberList.Count() > 1) { //await interactivity.SendPaginatedMessageAsync(ctx.Channel, ctx.User, membersPagination, timeoutoverride: TimeSpan.FromMinutes(5)); await interactivity.SendPaginatedMessageAsync( channel : await ctx.Member.CreateDmChannelAsync(), user : ctx.User, pages : membersPagination, behaviour : PaginationBehaviour.Ignore, deletion : ButtonPaginationBehavior.DeleteButtons, token : default);
public async Task Kick(CommandContext ctx, [Description("Участник")] DiscordMember member, [RemainingText][Description("Название корабля (необязательно для капитанов)")] string shipName) { PrivateShip ship = null; if (string.IsNullOrEmpty(shipName)) { ship = PrivateShip.GetOwnedShip(ctx.Member.Id); if (ship == null) { await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Ты не являешься капитаном. Офицеры могут использовать команду " + $"`!p kick участник название корабля`"); return; } } else { ship = PrivateShip.Get(shipName); if (ship == null) { await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Указанный корабль не был найден!"); return; } } var requesterMember = ship.GetMember(ctx.Member.Id); if (requesterMember == null || (requesterMember.Role != PrivateShipMemberRole.Officer && requesterMember.Role != PrivateShipMemberRole.Captain)) { await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Ты не являешься офицером или капитаном на данном корабле"); return; } if (ctx.Member == member) { await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Нельзя выгнать самого себя."); return; } var members = ship.GetMembers(); var selected = members.Find(m => m.MemberId == member.Id); if (selected == null) { await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Этого участника нет на корабле."); return; } ship.RemoveMember(selected.MemberId); await ctx.RespondAsync($"{Bot.BotSettings.OkEmoji} Ты успешно выгнал участника с корабля."); try { string title = requesterMember.Role == PrivateShipMemberRole.Captain ? "Капитан" : "Офицер"; if (selected.Status) { await ctx.Guild.GetChannel(ship.Channel).AddOverwriteAsync(member); await member.SendMessageAsync($":right_facing_fist: {title} **{ctx.Member.DisplayName}#{ctx.Member.Discriminator}** " + $"выгнал тебя с корабля **{ship.Name}**"); } else { await member.SendMessageAsync($":right_facing_fist: {title} **{ctx.Member.DisplayName}#{ctx.Member.Discriminator}** " + $"отменил твоё приглашение на корабль **{ship.Name}**"); } } catch (UnauthorizedException) { } }