コード例 #1
0
        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} Приглашение успешно отправлено.");
        }