static async Task MainAsync(string[] args)
        {
            discord = new DiscordClient(new DiscordConfiguration
            {
                Token     = cfgToken,
                TokenType = TokenType.User
            });

            discord.Ready += async r =>
            {
                Console.WriteLine("DM Channels: " + discord.PrivateChannels.Count());
                foreach (DSharpPlus.Entities.DiscordDmChannel channel in discord.PrivateChannels)
                {
                    dmChannels.Add(channel);
                    if (channelToSelect != 0)
                    {
                        if (channel.Id == channelToSelect)
                        {
                            selectedChannel = channel;
                        }
                    }
                }
                if (channelToSelect == 0)
                {
                    selectedChannel = dmChannels[0];
                }
                DSharpPlus.Entities.DiscordUser[] tempUsers = selectedChannel.Recipients.ToArray();
                if (tempUsers.Length == 1)
                {
                    LCDWrapper.LogiLcdMonoSetText(0, "Channel: " + tempUsers[0].Username);
                }
                else if (tempUsers.Length > 1)
                {
                    LCDWrapper.LogiLcdMonoSetText(0, "Channel: " + tempUsers[0].Username + " + " + tempUsers.Length + " More");
                }
                LCDWrapper.LogiLcdUpdate();
                Console.WriteLine("Selected channel: " + selectedChannel.Recipients[0].Username);

                getPrevMessages();
            };

            discord.TypingStarted += async t =>
            {
                if (t.Channel == selectedChannel)
                {
                    Console.WriteLine("User typing!");

                    Thread typingIndicatorThread = new Thread(() => notification(t.User.Username.ToUpper() + " is typing...", 3));
                    typingIndicatorThread.Start();
                }
            };

            discord.DmChannelCreated += async c =>
            {
                dmChannels.Add(c.Channel);
                if (c.Channel.Recipients.Count() > 1)
                {
                    Console.WriteLine("Channel added: " + c.Channel.Recipients[0].Username + " + " + c.Channel.Recipients.Count + " More");
                }
                else if (c.Channel.Recipients.Count() == 1)
                {
                    Console.WriteLine("Channel added: " + c.Channel.Recipients[0].Username);
                }
            };

            discord.DmChannelDeleted += async c =>
            {
                for (int i = 0; i < dmChannels.Count(); i++)
                {
                    if (dmChannels[i] == c.Channel)
                    {
                        if (dmChannels[i].Recipients.Count() > 1)
                        {
                            Console.WriteLine("Channel removed: " + dmChannels[i].Recipients[0].Username + " + " + dmChannels[i].Recipients.Count + " More");
                        }
                        else if (dmChannels[i].Recipients.Count() == 1)
                        {
                            Console.WriteLine("Channel removed: " + dmChannels[i].Recipients[0].Username);
                        }
                        dmChannels.RemoveAt(i);
                        break;
                    }
                }
            };

            discord.MessageCreated += async e => {
                if (window == 0)
                {
                    if (e.Channel == selectedChannel)
                    {
                        if (e.Message.MessageType == DSharpPlus.Entities.MessageType.Call)
                        {
                            newMessage(e.Author.Username.ToUpper() + " started a call.");
                        }
                        else if (e.Message.MessageType == DSharpPlus.Entities.MessageType.ChannelIconChange)
                        {
                            newMessage(e.Author.Username.ToUpper() + " changed the channel icon.");
                        }
                        else if (e.Message.MessageType == DSharpPlus.Entities.MessageType.ChannelNameChange)
                        {
                            newMessage(e.Author.Username.ToUpper() + " changed the channel name.");
                        }
                        else if (e.Message.MessageType == DSharpPlus.Entities.MessageType.ChannelPinnedMessage)
                        {
                            newMessage(e.Author.Username.ToUpper() + " pinned a message.");
                        }
                        else if (e.Message.MessageType == DSharpPlus.Entities.MessageType.RecipientAdd)
                        {
                            newMessage(e.Author.Username.ToUpper() + " added a user.");
                        }
                        else if (e.Message.MessageType == DSharpPlus.Entities.MessageType.RecipientRemove)
                        {
                            newMessage(e.Author.Username.ToUpper() + " removed a user.");
                        }
                        else if (e.Message.MessageType == DSharpPlus.Entities.MessageType.Default)
                        {
                            string extraInfo       = "";
                            int    attachmentCount = e.Message.Attachments.Count();

                            if (attachmentCount > 0)
                            {
                                if (attachmentCount == 1)
                                {
                                    extraInfo = (" [" + attachmentCount + " Attachment]");
                                }
                                else if (attachmentCount > 1)
                                {
                                    extraInfo = (" [" + attachmentCount + " Attachments]");
                                }
                            }

                            newMessage(e.Author.Username.ToUpper() + ":" + e.Message.Content + extraInfo);
                        }
                    }
                    else if (e.Channel != selectedChannel)
                    {
                        for (int i = 0; i < dmChannels.Count(); i++)
                        {
                            if (e.Channel == dmChannels[i])
                            {
                                Thread newUnselectedChannelMessageThread = new Thread(() => notification("Message from " + e.Author.Username.ToUpper(), 0));
                                newUnselectedChannelMessageThread.Start();
                            }
                        }
                    }
                }
            };

            await discord.ConnectAsync();

            await Task.Delay(-1);
        }
        static void dmSelect()
        {
            DSharpPlus.Entities.DiscordDmChannel[] tempChannels = dmChannels.ToArray();
            for (int i = 0; i < tempChannels.Length; i++)
            {
                if (tempChannels[i] == selectedChannel)
                {
                    if (tempChannels.Length > 1)
                    {
                        if ((i + 1) < tempChannels.Length)
                        {
                            selectedChannel = tempChannels[i + 1];
                            Console.WriteLine("Selected channel: " + selectedChannel.Recipients[0].Username);
                        }
                        else if ((i + 1) >= tempChannels.Length)
                        {
                            selectedChannel = tempChannels[0];
                            Console.WriteLine("Selected channel: " + selectedChannel.Recipients[0].Username);
                        }
                    }
                    break;
                }
            }

            for (int i = 0; i < tempChannels.Length; i++)
            {
                if (tempChannels[i] == selectedChannel)
                {
                    DSharpPlus.Entities.DiscordUser[] tempUsers = tempChannels[i].Recipients.ToArray();
                    if (tempUsers.Length == 1)
                    {
                        LCDWrapper.LogiLcdMonoSetText(0, tempUsers[0].Username + " <--");
                    }
                    else if (tempUsers.Length > 1)
                    {
                        LCDWrapper.LogiLcdMonoSetText(0, tempUsers[0].Username + " + " + tempUsers.Length + " More <--");
                    }

                    for (int c = 1; c < tempChannels.Length; c++)
                    {
                        if (c <= 3)
                        {
                            if ((i + c) < tempChannels.Length)
                            {
                                tempUsers = tempChannels[i + c].Recipients.ToArray();
                                if (tempUsers.Length == 1)
                                {
                                    LCDWrapper.LogiLcdMonoSetText(c, tempUsers[0].Username);
                                }
                                else if (tempUsers.Length > 1)
                                {
                                    LCDWrapper.LogiLcdMonoSetText(c, tempUsers[0].Username + " + " + tempUsers.Length + " More");
                                }
                            }
                            else
                            {
                                LCDWrapper.LogiLcdMonoSetText(c, "");
                            }
                        }
                    }
                }
            }

            LCDWrapper.LogiLcdUpdate();
        }