示例#1
0
        private void ProcessCommand(DiscordEventArgs e)
        {
            var         clientType = GetType().ToString();
            var         argsList   = new List <string>();
            DiscordUser user;
            string      channel, cmdText;

            (user, channel, cmdText) = ExtractFromEventArgs(e);

            if (user.IsBot)
            {
                return;
            }

            var commandPieces = cmdText.Split(' ');
            var command       = commandPieces[0].Replace("!", string.Empty);
            var userName      = user?.Username ?? string.Empty;
            var userId        = user?.Id.ToString() ?? "0";

            for (var i = 1; i < commandPieces.Length; i++)
            {
                argsList.Add(commandPieces[i]);
            }

            OnChatCommandReceived?.Invoke(this, new Core.ChatCommandEventArgs(command, argsList,
                                                                              channel, userName, userId, clientType, Core.UserRole.Moderator));
        }
示例#2
0
        private static async Task Status(DiscordEventArgs e)
        {
            //Set the status to a random one from the database
            var c = e.Client;

            Utilities.Con.Open();
            using (var cmd =
                       new SqliteCommand(
                           "SELECT text FROM Status ORDER BY RANDOM() LIMIT 1", Utilities.Con))
            {
                using (var rdr = cmd.ExecuteReader())
                {
                    if (rdr.Read())
                    {
                        c?.UpdateStatusAsync(new DiscordActivity(rdr.GetString(0), ActivityType.ListeningTo));
                    }
                }
            }

            Utilities.Con.Close();
            await Task.CompletedTask;
        }
示例#3
0
        private (DiscordUser user, string channel, string cmdText) ExtractFromEventArgs(DiscordEventArgs e)
        {
            switch (e)
            {
            case MessageUpdateEventArgs u:
                return(u.Author, u.Channel.Id.ToString(), u.Message.Content.ToLower());

            case MessageCreateEventArgs c:
                return(c.Author, c.Channel.Id.ToString(), c.Message.Content.ToLower());
            }

            return(null, string.Empty, string.Empty);
        }
        private static async Task MessageReactionAddedRemoved(DiscordClient s, DiscordEventArgs _e)
        {
            (bool added, DiscordMessage Message, DiscordMember User, DiscordEmoji Emoji)e;

            // detect reaction was added or removed
            if (_e is MessageReactionAddEventArgs _ea)
            {
                e = (true, _ea.Message, (DiscordMember)_ea.User, _ea.Emoji);
            }
            else if (_e is MessageReactionRemoveEventArgs _er)
            {
                e = (false, _er.Message, (DiscordMember)_er.User, _er.Emoji);
            }
            else
            {
                return;
            }

            if (e.Message.Author != s.CurrentUser ||
                (e.User).IsBot ||
                (e.User).VoiceState.Channel == null
                )
            {
                return;
            }

            foreach (var game in games)
            {
                if (game.Value.startMessage != e.Message)
                {
                    continue;
                }

                if ((e.User).VoiceState.Channel != game.Value.voiceChannel)
                {
                    return;
                }

                //check right emoji
                int eid;
                if (-1 == (eid = Array.IndexOf(EmojiList, e.Emoji)))
                {
                    return;
                }

                var player = game.Value.players[eid];
                if (e.added)
                {
                    if (player.uid == null)
                    {
                        player.uid = e.User; // TODO only 1 color per DiscordMember
                    }
                }
                else
                {
                    if (player.uid == e.User)
                    {
                        player.uid = null;
                    }
                }

                await e.Message.ModifyAsync(null, buildMessage(game.Key, game.Value.voiceChannel.Name, game.Value.players));

                return;
            }
        }