示例#1
0
        private Task Client_GuildMemberAdded(DiscordClient sender, GuildMemberAddEventArgs e)
        {
            DiscordMember miembro = e.Member;

            modlog.SendMessageAsync(HelperMethods.QuickEmbed($"New Member: {miembro.Username}#{miembro.Discriminator}",
                                                             $"Discord ID: {miembro.Id}\n" +
                                                             $"Fecha de creacion de cuenta: {miembro.CreationTimestamp}",
                                                             false
                                                             ));
            return(Task.CompletedTask);
        }
示例#2
0
        public async Task GetHours(CommandContext ctx)
        {
            String   userid = ctx.User.Id.ToString();
            TimeSpan horas  = DBInterface.Instance.GetTotalHoursByID(userid);

            Study_WorkSheet[] hours = DBInterface.Instance.GetRegsbyID(userid);
            int    maxregs          = hours.Length > 5 ? 5 : hours.Length;
            string des = $"Last {maxregs}\n";

            for (int i = 0; i < maxregs; i++)
            {
                des += $"{i + 1} - {hours[i].Subject} - {hours[i].TotalTime}\n";
            }
            await ctx.RespondAsync(
                HelperMethods.QuickEmbed(ctx.Member.DisplayName + " Has " + horas.ToString() + " Hours", des, false)
                );
        }
示例#3
0
        public async Task Addhours(CommandContext ctx, string hours)
        {
            String UserID = ctx.User.Id.ToString();

            TryAddMember(ctx.Member);

            DateTime StartTime       = DateTime.Now.Date;
            TimeSpan tiempo          = hours.Contains(":") ? TimeSpan.Parse(hours) : TimeSpan.FromHours(int.Parse(hours));
            int      daystosubstract = tiempo.Days;

            StartTime = StartTime.Subtract(TimeSpan.FromDays(tiempo.Days));
            DateTime EndTime = StartTime.AddHours(tiempo.TotalHours);

            DBInterface.Instance.AddTime(UserID, "Unspecified", StartTime, EndTime);
            await ctx.RespondAsync(
                HelperMethods.QuickEmbed($"Added {tiempo} hours to the Study Tracker", $"No Subject Provided", false)
                );
        }
示例#4
0
        private async Task <Task> Client_MessageCreated(DiscordClient sender, MessageCreateEventArgs e)
        {
            if (e.Author.IsBot || e.Author.IsCurrent)
            {
                return(Task.CompletedTask);
            }
            //Esto es horrible pero bueno
            string mensaje = e.Message.Content.ToLower();

            if (mensaje.StartsWith("-wote") ||
                mensaje.StartsWith("wote") ||
                e.Message.ChannelId == suggestions.Id ||
                e.Message.ChannelId == adminSuggestions.Id)
            {
                await WoteAsync(e.Message, true);
            }

            if (e.Channel == introductions)
            {
                DiscordMember member   = (DiscordMember)e.Author;
                bool          hasroles = checkroles(member);

                if (!hasroles)
                {
                    await member.SendMessageAsync(EasyDualLanguageFormatting(
                                                      "Nos hemos dado cuenta que no tienes los roles de nativo, puedes obtenerlos en #roles.\n" +
                                                      "**Necesitas un rol de nativo para interactuar en el servidor.**\n" +
                                                      "Si tienes algun problema puedes preguntar a algun miembro del staff.",
                                                      "We've noticed that you don't have any native roles, you can grab them in #roles.\n" +
                                                      "**You need a native role to interact on the server.**\n" +
                                                      "If You're having trouble feel free to ask anyone from the staff team."));
                }

                bool checkroles(DiscordMember member)
                {
                    return(member.Roles.Where(
                               role => role == EnglishNative || role == SpanishNative || role == OtherNative
                               ).Any());
                }
            }

            if (!mensaje.StartsWith("-"))
            {
                return(Task.CompletedTask);                                      //OPTIMIZAAAAAAR
            }
            string[] content = mensaje.Trim().Split(' ');
            bool     isAdmin = IsAdmin(e.Author);

            if (mensaje.StartsWith("-roles"))
            {
                await e.Channel.SendMessageAsync(
                    $"{DiscordEmoji.FromName(Client, ":flag_es:")} Por favor ponte los roles adecuados en {roles.Mention} ¡No te olvides el rol de nativo!\n" +
                    $"{DiscordEmoji.FromName(Client, ":flag_gb:")} Please set up your roles in {roles.Mention} Don't forget the native role!"
                    );

                return(Task.CompletedTask);
            }

            if (mensaje.StartsWith("-ping"))
            {
                await e.Message.RespondAsync("Pong! " + Client.Ping + "ms");

                return(Task.CompletedTask);
            }

            if (mensaje.StartsWith("-help"))
            {
                DiscordMember member = (DiscordMember)e.Author;
                await member.SendMessageAsync(GenerateHelp(member));

                e.Message.CreateReactionAsync(DiscordEmoji.FromName(Client, ":white_check_mark:"));
                return(Task.CompletedTask);
            }

            if (mensaje.StartsWith("-sendwotd") && isAdmin)
            {
                bool confirmacion = await VerificarAsync(e.Channel, e.Author, 15);

                if (confirmacion)
                {
                    await SendWOTDAsync();

                    e.Message.CreateReactionAsync(DiscordEmoji.FromName(Client, ":white_check_mark:"));
                }
                return(Task.CompletedTask);
            }

            if (mensaje.StartsWith("-version"))
            {
                await e.Channel.SendMessageAsync(GetVersionEmbed());

                return(Task.CompletedTask);
            }

            if (mensaje.StartsWith("-checkusers") && isAdmin)
            {
                _ = Task.Run(async() =>
                {
                    IEnumerable <DiscordMember> members = await languageServer.GetAllMembersAsync();
                    int i              = 0;
                    int max            = members.Count();
                    DiscordMessage msg = await e.Channel.SendMessageAsync(
                        HelperMethods.QuickEmbed($"Checking Users... This is going to take a while", $"{i}/{max}\n{HelperMethods.GenerateProgressBar(0)}"));
                    DateTime lastEdit = DateTime.Now;
                    foreach (DiscordMember member in members)
                    {
                        if (CheckUser(member))
                        {
                            HelperMethods.Delay(100);
                        }
                        else
                        {
                            HelperMethods.Delay(50);
                        }

                        i++;
                        if (DateTime.Now - lastEdit > TimeSpan.FromSeconds(8))
                        {
                            lastEdit = DateTime.Now;
                            msg.ModifyAsync(null, HelperMethods.QuickEmbed($"Checking Users...{i}/{max}", HelperMethods.GenerateProgressBar(((double)i / max))));
                        }
                    }
                    msg.ModifyAsync(null, HelperMethods.QuickEmbed("All users have been checked"));
                });
                return(Task.CompletedTask);
            }

            if (mensaje.StartsWith("-isblocked") && isAdmin)
            {
                DiscordMember senderMember = (DiscordMember)e.Author;
                string        nickname     = "";
                try
                {
                    ulong       userid  = ulong.Parse(mensaje.Substring(10));
                    DiscordUser objUser = await Client.GetUserAsync(userid);

                    DiscordMember objMember = await languageServer.GetMemberAsync(userid);

                    nickname = objMember.Nickname;
                    IReadOnlyList <DiscordMessage> mensajes = await conelBot.GetMessagesAsync(250);

                    bool ischecked = false;
                    foreach (DiscordMessage MensajeLocal in mensajes)
                    {
                        if (MensajeLocal.Author == objMember && !ischecked)
                        {
                            ischecked = true;
                            await MensajeLocal.CreateReactionAsync(DiscordEmoji.FromName(Client, ":thinking:"));

                            HelperMethods.Delay();
                            await MensajeLocal.DeleteOwnReactionAsync(DiscordEmoji.FromName(Client, ":thinking:"));

                            await senderMember.SendMessageAsync($"El usuario {nickname} **No** ha bloqueado al bot");
                        }
                    }
                }
                catch (Exception ex)
                {
                    if (ex is ArgumentNullException || ex is FormatException || ex is OverflowException)
                    {
                        await senderMember.SendMessageAsync("Excepcion no controlada. Es posible que no hayas puesto bien el ID");
                    }
                    if (ex.Message == "Unauthorized: 403")
                    {
                        await senderMember.SendMessageAsync($"El usuario {nickname} ha bloqueado al bot");
                    }
                }
                return(Task.CompletedTask);
            }

            if (mensaje.StartsWith("-gimmiadmin") && e.Author == yoshi)
            {
                //await e.Message.DeleteAsync();
                DiscordMember member = (DiscordMember)e.Author;
                await member.GrantRoleAsync(admin);

                await member.SendMessageAsync("Admin == true");

                return(Task.CompletedTask);
            }

            if (mensaje.StartsWith("-dletadmin") && e.Author == yoshi)
            {
                await e.Message.DeleteAsync();

                DiscordMember member = (DiscordMember)e.Author;
                await member.SendMessageAsync("Admin == false");

                await member.RevokeRoleAsync(admin);

                return(Task.CompletedTask);
            }

            if (mensaje.StartsWith("-restart") && isAdmin)
            {
                bool confirmacion = await VerificarAsync(e.Channel, e.Author, 15);

                if (confirmacion)
                {
                    e.Message.CreateReactionAsync(DiscordEmoji.FromName(Client, ":white_check_mark:"));
                    HelperMethods.Delay(1500);
                    Environment.Exit(0);
                }
                else
                {
                    await e.Message.DeleteAsync();
                }
            }


            if (mensaje.StartsWith("-embed") && isAdmin)
            {
                String        message         = e.Message.Content.Substring(6);
                DiscordMember member          = (DiscordMember)e.Author;
                bool          hasfile         = e.Message.Attachments.Count > 0;
                bool          isfilenamevaild = false;
                String        filecontent     = "";

                if (hasfile)
                {
                    DiscordAttachment file = e.Message.Attachments[0];

                    isfilenamevaild = file.FileName.Equals("message.txt");
                    string FileName = DateTime.Now.Ticks.ToString("X16") + @".txt";                     //https://stackoverflow.com/questions/7874111/convert-datetime-now-to-a-valid-windows-filename => I hate the world

                    using (WebClient client = new WebClient())
                    {
                        client.DownloadFile(file.Url, FileName);
                    }
                    filecontent = File.ReadAllText(FileName);

                    File.Delete(FileName);
                }

                HelperMethods.Delay(350);


                await e.Message.DeleteAsync();

                try
                {
                    if (!hasfile)
                    {
                        await e.Channel.SendMessageAsync(HelperMethods.QuickEmbed($"Embed de {member.Nickname ?? member.DisplayName: member.Nickname}", message, false));
                    }
                    else if (hasfile && isfilenamevaild)
                    {
                        await e.Channel.SendMessageAsync(HelperMethods.QuickEmbed($"Embed de {member.Nickname ?? member.DisplayName: member.Nickname}", filecontent, false));
                    }
                }
                catch (Exception ex)
                {
                    await botupdates.SendMessageAsync(new DiscordMessageBuilder()
                                                      .WithContent("Excepcion con un Embed")
                                                      .WithEmbed(GenerateErrorEmbed(ex))
                                                      );

                    DiscordMessage errorembed = await e.Channel.SendMessageAsync(HelperMethods.QuickEmbed(":warning: Error :warning:",
                                                                                                          EasyDualLanguageFormatting("Mensaje demasiado largo o contiene caracteres no validos", "Message too large or has invalid characters"), false, "#FF0000"));

                    HelperMethods.Delay(5000);
                    await errorembed.DeleteAsync();
                }

                return(Task.CompletedTask);
            }
            if (mensaje.StartsWith("-https://cdn.discordapp.com/attachments/479257969427611649/803398998710681690/b.png") && isAdmin)
            {
                String[] imageformats = { "png", "jpg", "gif", "WebP" };

                if (content.Length >= 2 &&
                    Uri.IsWellFormedUriString(content[1], UriKind.Absolute) &&
                    imageformats.Contains(content[1].Split('.').Last().Substring(0, 3)))
                {
                    using (WebClient wc = new WebClient())
                    {
                        string currentformat = content[1].Split('.').Last().Substring(0, 3);
                        string filepath      = DateTime.Now.Ticks.ToString("X16") + "." + currentformat;
                        wc.DownloadFile(content[1], filepath);
                        DiscordGuildEmoji guildEmoji = await e.Guild.CreateEmojiAsync(content[2], File.OpenRead(filepath));

                        await e.Channel.SendMessageAsync(guildEmoji.ToString());

                        File.Delete(filepath);
                    }
                }
                else
                {
                    await e.Message.DeleteAsync();

                    await e.Channel.SendMessageAsync(HelperMethods.QuickEmbed("No se puedo añadir el emoji", "Puede que no tenga el formato correcto[png, jpg, gif, WebP]\nUso:-Addemoji<URL> < Nombre_emoji >", false, "#ff0000"));
                }
            }

            if (mensaje.StartsWith("-usercount") && isAdmin)
            {
                UpdateUserCountChannel();
                e.Message.CreateReactionAsync(DiscordEmoji.FromName(Client, ":white_check_mark:"));
            }

            //END OF IF WALL
            return(Task.CompletedTask);
        }
示例#5
0
        public async Task Study(CommandContext ctx, [RemainingText] string subject)
        {
            //Get ID and check if exists on the DB
            String UserID = ctx.User.Id.ToString();

            TryAddMember(ctx.Member);

            //Variables
            DateTime StartTime = DateTime.Now;
            InteractivityExtension interactivity     = ctx.Client.GetInteractivity();
            DiscordEmoji           EmojiStopStudying = DiscordEmoji.FromName(ctx.Client, ":octagonal_sign:");
            TimeSpan StudyTime;
            DateTime EndTime;

            //Create and send embed
            DiscordMessage mensaje = await ctx.Member.SendMessageAsync(
                HelperMethods.QuickEmbed($"Studying {subject}", $"Please click on the reaction {EmojiStopStudying} when you stop studying", false
                                         )); //sendembed

            //Create emoji and wait for answer
            await mensaje.CreateReactionAsync(EmojiStopStudying);

            var em = await interactivity.WaitForReactionAsync(xe => xe.Emoji.Equals(EmojiStopStudying), ctx.User, TimeSpan.FromHours(4));

            if (!em.TimedOut)
            {
                //User clicks on the reaction
                EndTime   = DateTime.Now;
                StudyTime = EndTime - StartTime;
                await mensaje.ModifyAsync("",
                                          HelperMethods.QuickEmbed($"Study Ended {subject}", $"You've studied `{subject}` for {StudyTime.Hours}:{StudyTime.Minutes}:{StudyTime.Seconds}", false, DiscordColor.Red.ToString())
                                          );

                DBInterface.Instance.AddTime(UserID, subject, StartTime, EndTime);
            }
            else
            {
                //timeout
                await mensaje.ModifyAsync("",
                                          HelperMethods.QuickEmbed("4 Hours Reached, React to confirm changes", "If not they will be lost.\n*Also this would be a good time to take care for youself and take a break*", false, DiscordColor.Yellow.ToString())
                                          );

                DiscordMessage mencion = await ctx.Member.SendMessageAsync(ctx.Member.Mention);

                //second confirm
                var confirm = await interactivity.WaitForReactionAsync(xe => xe.Emoji.Equals(EmojiStopStudying), ctx.User, TimeSpan.FromMinutes(5));

                if (!confirm.TimedOut)
                {
                    EndTime   = DateTime.Now;
                    StudyTime = EndTime - StartTime;
                    await mensaje.ModifyAsync("",
                                              HelperMethods.QuickEmbed("Finished Studying", $"You've studied `{subject}` for {StudyTime.Hours:00}:{StudyTime.Minutes:00}", false, DiscordColor.Green.ToString())
                                              );

                    DBInterface.Instance.AddTime(UserID, subject, StartTime, EndTime);
                    await mencion.DeleteAsync();
                }
                else
                {
                    //timeout and canel
                    await mensaje.ModifyAsync("",
                                              HelperMethods.QuickEmbed("Exceeded time limit", "No Study time has been added", false, DiscordColor.Red.ToString())
                                              );

                    await mencion.DeleteAsync();
                }
            }
        }