Example #1
0
File: YuiShard.cs Project: HKGx/Yui
        private async Task MessageCreated(MessageCreateEventArgs args)
        {
            await Task.Yield();

            if (args.Channel.IsPrivate)
            {
                return;
            }
            var tasks = new List <Task>();

            using (var db = new LiteDatabase("Data.db"))
            {
                var guilds = db.GetCollection <Guild>();
                var guild  = guilds.FindOne(x => x.Id == args.Guild.Id);
                if (guild.HandleUsers)
                {
                }
                if (guild.NightWatchEnabled)
                {
                    tasks.Add(NightWatch.NightWatchMessage(args));
                }
            }
            await Task.WhenAll(tasks);
        }
        protected string[] GetParameters(DiscordClient sender, MessageCreateEventArgs e)
        {
            string        c            = e.Message.Content;
            List <string> possibleArgs = new List <string>();

            Regex           regx    = new Regex(@"\b[\w']*\b", RegexOptions.IgnoreCase);
            MatchCollection matches = regx.Matches(c);

            foreach (var item in matches)
            {
                if (item.ToString() != "")
                {
                    possibleArgs.Add(item.ToString());
                }
            }
            possibleArgs.RemoveAt(0);

            foreach (var item in possibleArgs)
            {
                Console.WriteLine(item);
            }

            return(possibleArgs.ToArray());
        }
Example #3
0
        Task NewMessage(DiscordClient discordClient, MessageCreateEventArgs messageCreateArgs)
        {
            using (var scope = Services.CreateScope())
            {
                var dbContext = scope.ServiceProvider.GetRequiredService <CoreDatabaseContext>();

                if (messageCreateArgs.Guild != null && dbContext.GetGuildFor(messageCreateArgs.Guild.Id) is null)
                {
                    var discordGuild = messageCreateArgs.Guild;

                    Log.LogInformation("Registering guild: {GuildID}", discordGuild.Id);

                    dbContext.Add(new Guild(discordGuild.Name, discordGuild.Id.ToString()));
                    dbContext.SaveChanges();
                }

                var new_event = new DiscordMessageCreatedEvent(messageCreateArgs, dbContext);

                //_commandExecutor.ProcessMessage(new_event);
                _eventBus.PostEvent(new_event);
            }

            return(Task.CompletedTask);
        }
Example #4
0
        public static async Task SendPings(MessageCreateEventArgs e)
        {
            DiscordChannel channel = await Program.GetDiscordClient.GetChannelAsync(Settings.Default.ping_channel_id).ConfigureAwait(false); //get channel from channel id

            if (!string.IsNullOrWhiteSpace(e.Message.Content) && e.Message.ChannelId != Settings.Default.ping_channel_id)
            {
                string          message      = e.Message.Content.ToLower(CultureInfo.CreateSpecificCulture("en-GB"));
                HashSet <ulong> pinged_users = GetPingedUsers(message);
                string          mentions     = string.Empty;
                DiscordMember   member;

                foreach (ulong user in pinged_users) // loop and get mention strings
                {
                    if (user != e.Message.Author.Id)
                    {
                        member = e.Guild.Members.Where(mem => mem.Id.Equals(user)).FirstOrDefault();
                        if (member != null)
                        {
                            mentions += member.Mention + " ";
                        }
                    }
                }

                if (!string.IsNullOrWhiteSpace(mentions))
                {
                    string author_nickname = ((DiscordMember)e.Message.Author).DisplayName;
                    if (author_nickname == null)
                    {
                        author_nickname = e.Message.Author.Username;
                    }
                    StringBuilder stringBuilder = new StringBuilder();
                    stringBuilder.Append(mentions + "at " + e.Message.Channel.Mention + "\n" + "<" + author_nickname + "> " + e.Message.Content);
                    await Program.GetDiscordClient.SendMessageAsync(channel, stringBuilder.ToString()).ConfigureAwait(false);
                }
            }
        }
Example #5
0
        private static async Task ClientOnMessageCreated(DiscordClient sender, MessageCreateEventArgs e)
        {
            await Task.Yield();

            var db = new NameBadgeContext();

            if (!db.NameBadges.Any(x => x.UserId == e.Author.Id && x.GuildId == e.Guild.Id))
            {
                return;
            }

            var badge = db.NameBadges.Single(x => x.UserId == e.Author.Id && x.GuildId == e.Guild.Id);

            if (!badge.IsHoisted)
            {
                await e.Guild.GetRole(badge.RoleId).ModifyAsync(hoist: true);

                badge.IsHoisted = true;
            }

            badge.LastInteraction = DateTime.UtcNow;

            await db.SaveChangesAsync();
        }
Example #6
0
    private static void InvokeAnalyzer(MessageCreateEventArgs e, DiscordGuildConfig dgc)
    {
        try
        {
            using DBContext c = new DBContext();

            string[] lines = e.Message.Content.Split('\n');

            string stageLine = lines.FirstOrDefault(l => l.StartsWith("Stage -", StringComparison.CurrentCultureIgnoreCase));

            if (!string.IsNullOrEmpty(stageLine))
            {
                int stageIndex = stageLine.IndexOf("-", StringComparison.CurrentCultureIgnoreCase);

                string stage  = stageLine.Remove(0, stageIndex + 1).TrimStart(' ').Trim(' ');
                string mpLink = lines.FirstOrDefault(l => l.StartsWith("MP link:", StringComparison.CurrentCultureIgnoreCase)).Split(' ')[2].Trim('>').Trim('<');

                if (!string.IsNullOrEmpty(mpLink))
                {
                    var history = OsuHistoryEndPoint.GetData.FromUrl(mpLink, null);

                    var warmupMaps = c.WarmupBeatmaps.Where(wb => wb.DiscordGuildId == dgc.GuildId);

                    var result = SkyBot.Analyzer.OsuAnalyzer.CreateStatistic(history, e.Guild, (int)(history.CurrentGameId ?? 0), dgc.AnalyzeWarmupMatches, stage, true, beatmapsToIgnore: warmupMaps.Select(wm => wm.BeatmapId).ToArray());
                    var embed  = SkyBot.Analyzer.OsuAnalyzer.GetMatchResultEmbed(result.MatchId);

                    e.Channel.SendMessageAsync(embed: embed);
                }
            }
        }
        catch (Exception ex)
        {
            Logger.Log(ex, LogLevel.Error);
            throw;
        }
    }
Example #7
0
        private Task Client_CommandHandler(DiscordClient client, MessageCreateEventArgs e)
        {
            var cmdPrefix = "";

            using (var fs = File.OpenRead("config.json"))
                using (var sr = new StreamReader(fs, new UTF8Encoding(false)))
                    cmdPrefix = JsonConvert.DeserializeObject <ConfigJson>(sr.ReadToEnd()).CommandPrefix;

            var cnext = client.GetCommandsNext();
            var msg   = e.Message;

            var cmdStart = msg.GetStringPrefixLength(cmdPrefix);

            if (cmdStart == -1)
            {
                return(Task.CompletedTask);
            }

            var prefix    = msg.Content.Substring(0, cmdStart);
            var cmdString = msg.Content.Substring(cmdStart);

            var command = cnext.FindCommand(cmdString, out var args);

            if (command == null)
            {
                return(Task.CompletedTask);
            }

            var ctx = cnext.CreateContext(msg, prefix, command, args);

            Task.Run(async() => await cnext.ExecuteCommandAsync(ctx));

            Console.WriteLine($"{BotEventId}, {e.Author.Username} successfully executed '{e.Message.Content}'");

            return(Task.CompletedTask);
        }
Example #8
0
        private static Task OnDiscordClientOnMessageCreatedAsync(MessageCreateEventArgs e)
        {
            switch (e.Channel.Type)
            {
            case ChannelType.Private:
            {
                var message = MessageLog(e, "DM");     // If channel is private then make the message type DM
                File.AppendAllText(Path, message);     // writes the message to the file
            } break;

            case ChannelType.Text:
            {
                var message = MessageLog(e, $"{e.Guild.Name}"); // if channel is Text(Normal Channel) print the channel name
                File.AppendAllText(Path, message);              // writes the message to the file
            } break;

            default:
            {
                var message = MessageLog(e, $"{e.Channel.Type}"); // if channel is not private or text just print the channel type
                File.AppendAllText(Path, message);                // writes the message to the file
            } break;
            }
            return(Task.CompletedTask);
        }
        private async Task <bool> ScanForUrlShortenersAsync(MessageCreateEventArgs e)
        {
            var match = LinkfilterMatcherCollection.UrlShortenerRegex.Check(e.Message);

            if (!match.Success)
            {
                return(false);
            }

            try {
                await e.Message.DeleteAsync("_gf: URL shortener linkfilter");

                await this.LogLinkfilterMatchAsync(e, "URL shortener website matched");

                await(e.Author as DiscordMember).SendMessageAsync(
                    $"Your message:\n{Formatter.BlockCode(e.Message.Content)}was automatically removed from " +
                    $"{Formatter.Bold(e.Guild.Name)} because it is suspected to contain a link to a link shortener website: {Formatter.InlineCode(match.Matched)} (possible origin: {LinkfilterMatcherCollection.UrlShorteners[match.Matched]})" +
                    $"If you think this is a false detection, please report."
                    );
            } catch (UnauthorizedException) {
            }

            return(true);
        }
        public static async Task DiscordClient_MessageCreated(MessageCreateEventArgs e)
        {
            if (!await e.Author.GetDelayDeletingAsync())
            {
                return;
            }

            MatchCollection matches = Regex.Matches(e.Message.Content, DelayDeleteRegex);

            if (matches.Count == 1)
            {
                if (int.TryParse(matches[0].Value.Substring(1), out int seconds))
                {
                    if (!e.Channel.PermissionsFor(await e.Guild.GetMemberAsync(e.Client.CurrentUser.Id)).HasFlag(Permissions.ManageMessages))
                    {
                        await e.Message.CreateReactionAsync(DiscordEmoji.FromName(e.Client, ":no_entry_sign:"));

                        return;
                    }

                    await e.Message.CreateReactionAsync(DiscordEmoji.FromName(e.Client, ":wastebasket:"));

                    await Task.Delay(seconds * 1000);

                    await e.Message.DeleteAsync();
                }
                else
                {
                    await e.Message.CreateReactionAsync(DiscordEmoji.FromName(e.Client, ":x:"));
                }
            }
            else if (matches.Count > 1)
            {
                await e.Message.CreateReactionAsync(DiscordEmoji.FromName(e.Client, ":question:"));
            }
        }
Example #11
0
        public static async Task MessageFilterEventHandlerAsync(KioskAppShard shard, MessageCreateEventArgs e)
        {
            if (e.Author.IsBot || e.Channel.IsPrivate || string.IsNullOrWhiteSpace(e.Message?.Content))
            {
                return;
            }

            if (shard.SharedData.BlockedChannels.Contains(e.Channel.Id))
            {
                return;
            }

            CachedGuildConfig gcfg = shard.SharedData.GetGuildConfig(e.Guild.Id);

            if (gcfg.LinkfilterSettings.Enabled)
            {
                if (await shard.CNext.Services.GetService <LinkfilterService>().HandleNewMessageAsync(e, gcfg.LinkfilterSettings))
                {
                    return;
                }
            }

            if (!shard.SharedData.MessageContainsFilter(e.Guild.Id, e.Message.Content))
            {
                return;
            }

            if (!e.Channel.PermissionsFor(e.Guild.CurrentMember).HasFlag(Permissions.ManageMessages))
            {
                return;
            }

            await e.Message.DeleteAsync("_gf: Filter hit");

            await e.Channel.SendMessageAsync($"{e.Author.Mention} said: {FormatterExtensions.Spoiler(Formatter.BlockCode(Formatter.Strip(e.Message.Content)))}");
        }
        public static async Task OnMessageCreated(DiscordClient _, MessageCreateEventArgs args)
        {
            if (DefaultHandlerFilter.IsFluff(args.Message))
            {
                return;
            }

            /*
             * (╯°□°)╯︵ ┻━┻
             * (ノ ゜Д゜)ノ ︵ ┻━┻
             * (ノಠ益ಠ)ノ彡┻━┻
             * ‎(ノಥ益ಥ)ノ ┻━┻
             * (ノಥДಥ)ノ︵┻━┻・/
             * (ノ^_^)ノ┻━┻
             * (/¯◡ ‿ ◡)/¯ ~ ┻━┻
             *
             * this might look the same, but only because of the font choice
             *
             * ┻━┻
             * ┻━┻
             */
            try
            {
                var content = args.Message.Content;
                if (!(content.Contains("┻━┻") ||
                      content.Contains("┻━┻")))
                {
                    return;
                }

                var tableIdx = content.IndexOf("┻━┻");
                if (tableIdx < 0)
                {
                    tableIdx = content.IndexOf("┻━┻");
                }
                var faceIdx = content[..tableIdx].LastIndexOfAny(OpenParen);
Example #13
0
        private async Task EditCommand(MessageCreateEventArgs e, ParsedCommand cmd)
        {
            if (cmd.CommandParts.Length == 1)
            {
                await SendError(e, "What do you want me to edit?");

                return;
            }

            try
            {
                OperationParameters opParams = OperationParameters.Parse(cmd.CommandParts);
                bool success = await _ops.UpdateOperation(cmd.OperationId, opParams);

                if (!success)
                {
                    await SendOperationErrorMessage(e, cmd.OperationId);
                }
            }
            catch (OpBotInvalidValueException ex)
            {
                await SendError(e, $"That is an invalid edit command\n\n.{ex.Message}");
            }
        }
Example #14
0
        private async Task ClientOnMessageCreated(MessageCreateEventArgs e)
        {
            if (e.Author.IsBot)
            {
                return;
            }

            if (UsersEco.Users.Exists(u => u.Id == e.Author.Id))
            {
                var user = UsersEco.Users.Find(u => u.Id == e.Author.Id);
                if (user.Time > DateTime.Now)
                {
                    return;
                }

                AddCookieToUser(e.Author);
            }
            else
            {
                AddCookieToUser(e.Author);
            }

            await SaveEcoModule();
        }
Example #15
0
        private async Task CreateCommand(MessageCreateEventArgs e, ParsedCommand cmd)
        {
            try
            {
                OperationParameters opParams = OperationParameters.ParseWithDefault(cmd.CommandParts);

                Operation newOperation = new Operation()
                {
                    Size = opParams.Size,
                    Mode = opParams.Mode,
                    Date = DateHelper.GetDateForNextOccuranceOfDay(opParams.Day) + opParams.Time,
                    Side = opParams.Side,
                };
                newOperation.OperationName = opParams.OperationCode == "GF" ? GroupFinder.OperationOn(newOperation.Date) : opParams.OperationCode;

                DiscordMessage newOpMessage = await e.Channel.SendMessageAsync("Creating event...");

                newOperation.MessageId = newOpMessage.Id;

                string text = _ops.Add(newOperation).GetOperationMessageText();
                await newOpMessage.ModifyAsync(text);
                await PinMessage(e, newOpMessage);

                await _repository.SaveAsync(_ops);

                SendAlerts(e, newOperation);
            }
            catch (OperationException ex)
            {
                await SendError(e, ex.Message);
            }
            catch (OpBotInvalidValueException opEx)
            {
                await SendError(e, $"I don't understand part of that create command.\n\n{opEx.Message}\n\nSo meat bag, try again and get it right this time or you will be terminated as an undesirable {DiscordText.StuckOutTongue}.");
            }
        }
 public CompactResponse(ServerContext context, GuildSettings settings, MessageCreateEventArgs e) : base(context, settings, e)
 {
 }
 public MessageResponse(ServerContext context, GuildSettings settings, MessageCreateEventArgs e) : base(context, settings)
 {
     source   = e.Message;
     response = null;
 }
        public static async Task OnMessageCreated(MessageCreateEventArgs args)
        {
            if (args.Author.IsBot)
            {
                return;
            }

            if (string.IsNullOrEmpty(args.Message.Content) || args.Message.Content.StartsWith(Config.CommandPrefix))
            {
                return;
            }

            var lastBotMessages = await args.Channel.GetMessagesBeforeAsync(args.Message.Id, 20, DateTime.UtcNow.AddSeconds(-30)).ConfigureAwait(false);

            foreach (var msg in lastBotMessages)
            {
                if (BotShutupHandler.NeedToSilence(msg))
                {
                    return;
                }
            }

            lastBotMessages = await args.Channel.GetMessagesBeforeAsync(args.Message.Id, Config.ProductCodeLookupHistoryThrottle).ConfigureAwait(false);

            StringBuilder previousRepliesBuilder = null;

            foreach (var msg in lastBotMessages)
            {
                if (msg.Author.IsCurrent)
                {
                    previousRepliesBuilder = previousRepliesBuilder ?? new StringBuilder();
                    previousRepliesBuilder.AppendLine(msg.Content);
                    var embeds = msg.Embeds;
                    if (embeds?.Count > 0)
                    {
                        foreach (var embed in embeds)
                        {
                            previousRepliesBuilder.AppendLine(embed.Title).AppendLine(embed.Description);
                        }
                    }
                }
            }
            var previousReplies = previousRepliesBuilder?.ToString() ?? "";

            var codesToLookup = GetProductIds(args.Message.Content)
                                .Where(c => !previousReplies.Contains(c, StringComparison.InvariantCultureIgnoreCase))
                                .Take(args.Channel.IsPrivate ? 50 : 5)
                                .ToList();

            if (codesToLookup.Count == 0)
            {
                return;
            }

            await args.Channel.TriggerTypingAsync().ConfigureAwait(false);

            var results = new List <(string code, Task <DiscordEmbed> task)>(codesToLookup.Count);

            foreach (var code in codesToLookup)
            {
                results.Add((code, args.Client.LookupGameInfoAsync(code)));
            }
            var formattedResults = new List <DiscordEmbed>(results.Count);

            foreach (var result in results)
            {
                try
                {
                    formattedResults.Add(await result.task.ConfigureAwait(false));
                }
                catch (Exception e)
                {
                    Config.Log.Warn(e, $"Couldn't get product code info for {result.code}");
                }
            }

            // get only results with unique titles
            formattedResults = formattedResults.GroupBy(e => e.Title).Select(g => g.First()).ToList();
            DiscordEmoji sqvat = null;

            foreach (var result in formattedResults)
            {
                try
                {
                    if (!args.Channel.IsPrivate &&
                        args.Message.Author.Id == 197163728867688448 && (
                            result.Title.Contains("africa", StringComparison.InvariantCultureIgnoreCase) ||
                            result.Title.Contains("afrika", StringComparison.InvariantCultureIgnoreCase)
                            ))
                    {
                        sqvat = sqvat ?? DiscordEmoji.FromName(args.Client, ":sqvat:");
                        await args.Message.ReactWithAsync(args.Client, sqvat, "How about no (๑•ิཬ•ั๑)").ConfigureAwait(false);

                        continue;
                    }

                    await args.Channel.SendMessageAsync(embed : result).ConfigureAwait(false);
                }
                catch (Exception e)
                {
                    Config.Log.Warn(e, $"Couldn't post result for {result.Title}");
                }
            }
        }
Example #19
0
        public static async Task OnMessageCreated(DiscordClient c, MessageCreateEventArgs args)
        {
            if (DefaultHandlerFilter.IsFluff(args?.Message))
            {
                return;
            }

#if !DEBUG
            if (!(args.Channel.Id == Config.BotGeneralChannelId ||
                  args.Channel.Name.Equals("help", StringComparison.InvariantCultureIgnoreCase)))
            {
                return;
            }

            if (CooldownBuckets.TryGetValue(args.Channel.Id, out var lastCheck) &&
                DateTime.UtcNow - lastCheck < CooldownThreshold)
            {
                return;
            }

            if (args.Author.IsSmartlisted(c, args.Guild))
            {
                return;
            }
#endif

            var matches = GameNameStatusMention1.Matches(args.Message.Content);
            if (!matches.Any())
            {
                return;
            }

            var gameTitle = matches.Select(m => m.Groups["game_title_1"].Value)
                            .Concat(matches.Select(m => m.Groups["game_title_2"].Value))
                            .Concat(matches.Select(m => m.Groups["game_title_3"].Value))
                            .FirstOrDefault(t => !string.IsNullOrEmpty(t));
            if (string.IsNullOrEmpty(gameTitle) || gameTitle.Length < 2)
            {
                return;
            }

            gameTitle = CompatList.FixGameTitleSearch(gameTitle);
            if (gameTitle.Length < 4)
            {
                return;
            }

            if (ProductCodeLookup.ProductCode.IsMatch(args.Message.Content))
            {
                return;
            }

            var(_, info) = await LookupGameAsync(args.Channel, args.Message, gameTitle).ConfigureAwait(false);

            if (string.IsNullOrEmpty(info?.Status))
            {
                return;
            }

            gameTitle = info.Title?.StripMarks();
            if (string.IsNullOrEmpty(gameTitle))
            {
                return;
            }

            var botSpamChannel = await c.GetChannelAsync(Config.BotSpamId).ConfigureAwait(false);

            var    status = info.Status.ToLowerInvariant();
            string msg;
            if (status == "unknown")
            {
                msg = $"{args.Message.Author.Mention} {gameTitle} status is {status}";
            }
            else
            {
                if (status != "playable")
                {
                    status += " (not playable)";
                }
                msg = $"{args.Message.Author.Mention} {gameTitle} is {status}";
                if (!string.IsNullOrEmpty(info.Date))
                {
                    msg += $" since {info.ToUpdated()}";
                }
            }
            msg += $"\nfor more results please use compatibility list (<https://rpcs3.net/compatibility>) or `{Config.CommandPrefix}c` command in {botSpamChannel.Mention} (`!c {gameTitle.Sanitize()}`)";
            await args.Channel.SendMessageAsync(msg).ConfigureAwait(false);

            CooldownBuckets[args.Channel.Id] = DateTime.UtcNow;
        }
 public override bool CanExecute(MessageCreateEventArgs e)
 {
     return(!(e.Channel is DiscordDmChannel));
 }
Example #21
0
        public static async Task GrimToolsCalcHandler(MessageCreateEventArgs e)
        {
            if (e.Author.IsBot)
            {
                return;
            }

            var match = new Regex(@"(?<=(http://)?(www.)?grimtools.com/calc/)[a-zA-Z0-9]{8}(?!>)").Match(e.Message.Content);

            if (!match.Success)
            {
                return;
            }

            var url = $"http://www.grimtools.com/calc/{match.Value}";

            var calc = await GrimToolsCalc.GetGrimToolsCalcAsync(url);

            var masteryCombo = calc.GetMasteryCombination();

            var embed = new DiscordEmbedBuilder
            {
                Url          = url,
                ThumbnailUrl = masteryCombo.GetAttribute <MasteryInfoAttribute>().ImageUrl,

                Title = $"Level {calc.Data.Info.Level} " +
                        $"{Regex.Replace(masteryCombo.ToString(), @"(\B[A-Z])", " $1")}",

                Description = $"`Physique` {((calc.Data.Info.Physique - 50) / 8).ToString()}\n" +
                              $"`Cunning` {((calc.Data.Info.Cunning - 50) / 8).ToString()}\n" +
                              $"`Spirit` {((calc.Data.Info.Spirit - 50) / 8).ToString()}"
            };

            foreach (var mastery in calc.Data.Masteries.OrderByDescending(m => m.Value))
            {
                embed.AddField(mastery.Key.ToString(), mastery.Value.ToString(), true);
            }

            var sb           = new StringBuilder();
            var sortedSkills = calc.Data.Skills.OrderByDescending(s => s.Value).ToList();

            for (int i = 0; i < 10 && i < sortedSkills.Count; i++)
            {
                try
                {
                    var skillEmoji = EnumExtensions.GetValueFromDescription <SkillEmoji>(sortedSkills[i].Key);
                    sb.Append(DiscordEmoji.FromGuildEmote(Program.Client, (ulong)skillEmoji).ToString());
                }
                catch (ArgumentException)
                {
                    sortedSkills.RemoveAt(i);
                    i--;
                }
            }

            if (sb.Length > 0)
            {
                embed.AddField("Top Skill(s)", sb.ToString());
            }

            embed.WithFooter($"Game version: {calc.GameVersion}");

            embed.WithColor(new DiscordColor(masteryCombo.GetAttribute <MasteryInfoAttribute>().Color));

            await e.Message.RespondAsync("", false, embed.Build());
        }
Example #22
0
 public static async Task OnMessage(MessageCreateEventArgs e)
 {
     await Task.FromResult(0); // Пока типа пусто
 }
Example #23
0
 public abstract Task OnAccepted(MessageCreateEventArgs e);
Example #24
0
 public abstract Task <bool> IsAccepted(MessageCreateEventArgs e);
Example #25
0
 public override async Task <bool> IsAccepted(MessageCreateEventArgs e)
 {
     return(e.Message.Content.ToLower().StartsWith(prefix));
 }
 public MessageValueProvider(object value)
 {
     this.value = value as MessageCreateEventArgs;
 }
Example #27
0
 private async Task <Task> Client_MessageCreatedAsync(MessageCreateEventArgs e)
 {
     return(await AsyncMessageEvent(e));
 }
        public async Task HandleMessageAsync(DiscordClient client, MessageCreateEventArgs args)
        {
            try
            {
                if (args.Message.Author.Username == _configuration.BotUsername || args.Message.Content.StartsWith(_configuration.CommandPrefix))
                {
                    return;
                }

                //Analize all the possible emojis in the message
                foreach (Match match in _regex.Matches(args.Message.Content))
                {
                    //The emojis have the format <:emoji_name:emoji_id>, so I strip the emoji_name
                    string[] parts = match.Value.Split(':');
                    string   emoji = $":{parts[1]}:";

                    try
                    {
                        var emojiObj = DiscordEmoji.FromName(client, emoji);
                    }
                    catch (ArgumentException)
                    {
                        _logger.LogInformation($"{args.Message.Author.Username} wrote an emoji not present on this server: {emoji}. Ignoring...");
                        continue;
                    }

                    _logger.LogInformation($"{args.Message.Author.Username} wrote {emoji}");

                    //Add all the possible emojis to the database
                    await _database.InsertEmojiAsync(new LogEmoji
                    {
                        EmojiId          = emoji,
                        Username         = args.Message.Author.Username,
                        MessageTimestamp = TimeZoneInfo.ConvertTimeFromUtc(args.Message.Timestamp.UtcDateTime, TZConvert.GetTimeZoneInfo("Romance Standard Time")),
                        IsReaction       = false
                    });
                }

                string message = args.Message.Content.Replace("?", "").Replace("!", "").Replace(".", "").Replace("¡", "").Replace("¿", "").Replace("\"", "").Replace("'", "").Replace(")", "").TrimEnd().ToLowerInvariant();
                if (message.EndsWith("gado") && !message.EndsWith("colgado"))
                {
                    await args.Message.RespondAsync($"{args.Message.Author.Mention} el que tengo aquí colgado");
                }
                else if (message.EndsWith("gada") && !message.EndsWith("colgada"))
                {
                    await args.Message.RespondAsync($"{args.Message.Author.Mention} la que tengo aquí colgada");
                }
                else if (message.EndsWith("gados") && !message.EndsWith("colgados"))
                {
                    await args.Message.RespondAsync($"{args.Message.Author.Mention} los que tengo aquí colgados");
                }
                else if (message.EndsWith("gadas") && !message.EndsWith("colgadas"))
                {
                    await args.Message.RespondAsync($"{args.Message.Author.Mention} las que tengo aquí colgadas");
                }
                else if (message.EndsWith(" concurso"))
                {
                    await args.Message.RespondAsync($"{args.Message.Author.Mention} el de levantar mi polla a pulso");
                }

                double randomValue = _random.NextDouble();
                if (randomValue < 0.00001)
                {
                    var messageObj = await args.Message.RespondAsync($"{args.Message.Author.Mention} hijo de puta");

                    await Task.Delay(1000);

                    await messageObj.ModifyAsync($"{args.Message.Author.Mention} ~~hijo de puta~~ perdón");
                }
            }
            catch (Exception e)
            {
                await args.Message.RespondAsync(e.Message);
            }
        }
Example #29
0
        public static async Task onMsgCreated(MessageCreateEventArgs args)
        {
            if (!autoEmbedderEnabled)
            {
                return;
            }
            if (args.Author != MainWindow.userClient.CurrentUser)
            {
                return;
            }

            DiscordMessage msg = args.Message;

            if (msg.Content == null)
            {
                return;
            }
            if (msg.Content.Length < 1)
            {
                return;
            }

            DiscordEmbedBuilder embedBuilder = new DiscordEmbedBuilder();

            embedBuilder.Title       = $"Сообщение в {DateTime.Now.ToString()} от {(msg.Channel.IsPrivate ? msg.Author.Username : (((DiscordMember)msg.Author).Nickname!=null ? ((DiscordMember)msg.Author).Nickname : msg.Author.Username))}";
            embedBuilder.Description = msg.Content;
            if (msg.Attachments != null && msg.Attachments.Count > 0)
            {
                DiscordAttachment img = msg.Attachments[0];
                if (img.FileName.EndsWith(".jpg", true, CultureInfo.InvariantCulture) ||
                    img.FileName.EndsWith(".png", true, CultureInfo.InvariantCulture) ||
                    img.FileName.EndsWith(".bmp", true, CultureInfo.InvariantCulture))
                {
                    string url = img.Url;
                    embedBuilder.ImageUrl = url;
                }
                else
                {
                    string url = img.Url;
                    embedBuilder.Url = url;
                }
            }

            Random       random = new Random();
            DiscordColor randColor;

            switch (random.Next(0, 7))
            {
            case 0: randColor = DiscordColor.Red; break;

            case 1: randColor = DiscordColor.Green; break;

            case 2: randColor = DiscordColor.Blue; break;

            case 3: randColor = DiscordColor.Yellow; break;

            case 4: randColor = DiscordColor.Cyan; break;

            case 5: randColor = DiscordColor.Violet; break;

            case 6: randColor = DiscordColor.Azure; break;

            case 7: randColor = DiscordColor.Blurple; break;

            default: randColor = new DiscordColor(); break;
            }
            embedBuilder.Color        = randColor;
            embedBuilder.ThumbnailUrl = msg.Author.AvatarUrl;

            if (autoEmbedderMode == 0)
            {
                await msg.ModifyAsync(content : "", embed : embedBuilder.Build());
            }
            else
            {
                await msg.Channel.SendMessageAsync(embed : embedBuilder.Build());

                await msg.Channel.DeleteMessageAsync(msg);
            }
        }
        public async Task <bool> HasRequiredPropertyAsync(MessageCreateEventArgs e, List <string> propertyMatches)
        {
            var userData = await GetUserData(e.Author.Username);

            return(propertyMatches.All(rp => userData.derivedProperties.Any(dp => dp.name == rp)));
        }
Example #31
0
 private void PushConnectOnMessageCreating(object aSender, MessageCreateEventArgs anArgs)
 {
     var lDevice = anArgs.Device as WindowsPhonePushDeviceInfo;
     if (lDevice != null)
     {
         var lMessage = new MPNSToastMessage();
         lMessage.Text1 = anArgs.MessageData.Title;
         lMessage.Text2 = anArgs.MessageData.Text;
         lMessage.NotificationURI = lDevice.NotificationURI.ToString();
         anArgs.Message = lMessage;
     }
 }