コード例 #1
0
        public async Task Invite([Summary("List of users to invite, separated by spaces.")][Remainder] string invites)
        {
            ulong             raidMessageId = Context.Message.Reference.MessageId.Value;
            SocketUserMessage raidMessage   = (SocketUserMessage)await Context.Channel.GetMessageAsync(raidMessageId);

            RaidParent parent = raidMessages[raidMessageId];

            if (parent.IsInRaid((SocketGuildUser)Context.Message.Author, false) != Global.NOT_IN_RAID)
            {
                if (!parent.HasActiveInvite())
                {
                    parent.InvitingPlayer = (SocketGuildUser)Context.Message.Author;

                    List <string> inviteList = invites.Split(' ').ToList();
                    inviteList.RemoveAll(x => x.StartsWith("<@", StringComparison.OrdinalIgnoreCase));

                    List <SocketUser> mentioned = Context.Message.MentionedUsers.ToList();
                    bool failedInvites          = false;

                    foreach (string openInvite in inviteList)
                    {
                        SocketGuildUser invite = Context.Guild.Users.FirstOrDefault(x => x.Username.Equals(openInvite, StringComparison.OrdinalIgnoreCase) || (
                                                                                        x.Nickname != null && x.Nickname.Equals(openInvite, StringComparison.OrdinalIgnoreCase)));
                        if (invite != null && !mentioned.Contains(invite))
                        {
                            mentioned.Add(invite);
                        }
                        else
                        {
                            failedInvites = true;
                        }
                    }

                    foreach (SocketUser invite in mentioned)
                    {
                        if (parent.InvitePlayer((SocketGuildUser)invite, parent.InvitingPlayer))
                        {
                            await invite.SendMessageAsync($"You have been invited to a raid by {parent.InvitingPlayer.Nickname ?? parent.InvitingPlayer.Username}.");
                        }
                        else
                        {
                            failedInvites = true;
                        }
                    }

                    if (failedInvites)
                    {
                        await ResponseMessage.SendWarningMessage(Context.Channel, "invite", "Some users where not found to be invited");
                    }
                    await ModifyMessage(raidMessage, parent);

                    parent.InvitingPlayer = null;
                }
            }
            await Context.Message.DeleteAsync();
        }