Exemple #1
0
        protected async Task HandleCommandResult(string action, bool isSuccess, IList <string> descParams = null,
                                                 IList <string> titleParams = null, IList <string> footerParams = null)
        {
            var payload = _embedPayloadFactory.CreateEmbedPayload(GetStruct(isSuccess), GetType(isSuccess), action, Context.User,
                                                                  descParams, titleParams, footerParams);
            var embed = _embedService.CreateBaseEmbed(payload);

            await SendDeletableEmbed(embed);
        }
Exemple #2
0
        private async Task MessageDeleted(Cacheable <IMessage, ulong> msg, ISocketMessageChannel msgChannel)
        {
            var deletedMsg = msg.Value;

            if (IsMsgNull(deletedMsg) || IsUserNull(deletedMsg.Author) ||
                IsUserBot(deletedMsg.Author) || IsMsgEmpty(deletedMsg))
            {
                return;
            }

            var channel = msgChannel as SocketGuildChannel;

            var logChannel = await TryGetLoggingChannel(channel.Guild.Id, EventType.MessageDeleted, deletedMsg.Author, channel.Guild);

            if (logChannel == null)
            {
                return;
            }

            var descParams = new List <string> {
                deletedMsg.Id.ToString(), deletedMsg.Author.FullName(), deletedMsg.Author.Id.ToString()
            };
            var fields = new List <(string, string, bool)> {
                { (_resourceService.GetResource("msg_deleted_field_title"), deletedMsg.Content, false) }
            };

            var payload = _embedPayloadFactory.CreateEmbedPayload(EmbedStruct.Log, EmbedPayloadType.MsgDeleted, "msg_deleted",
                                                                  deletedMsg.Author, descParams, null, null, fields);

            var embed = _embedService.CreateFieldEmbed(payload);
            await channel.Guild
            .GetTextChannel(logChannel.ChannelID)
            .SendEmbedAsync(embed);
        }
        public async Task LogException(Exception ex)
        {
            var toLog = ex.InnerException ?? ex;

            var descArgs = new List <string> {
                toLog.Message
            };
            var footerArgs = new List <string> {
                toLog.Source
            };
            var fields = new List <(string, string, bool)> {
                (_resources.GetResource("stacktrace_field_title"), toLog.StackTrace, false)
            };

            var payload = _embedPayloadFactory.CreateEmbedPayload(EmbedStruct.Exception, EmbedPayloadType.Error, "exception",
                                                                  null, descArgs, null, footerArgs, fields);

            var embed = _embedService.CreateFieldEmbed(payload);
            await _ownerDMChannel.SendEmbedAsync(embed);
        }
        private async void OnTimeElapsed(object source, ElapsedEventArgs e)
        {
            foreach (var guild in _client.Guilds)
            {
                var channel = await TryGettingChannel(guild);

                if (channel == null)
                {
                    await _ownerLogger.LogError("0007", "", guild.Name);

                    return;
                }

                var events = await TryGettingEvents(guild);

                if (events == null)
                {
                    await _ownerLogger.LogError("0006", "", guild.Name);

                    return;
                }

                var fields = new List <(string, string, bool)>();

                FillEventsField("started_event_field_title", fields, FindStartedEvents(events));
                FillEventsField("upcoming_short_event_field_title", fields, FindUpcomingEventsShort(events));
                FillEventsField("upcoming_long_field_title", fields, FindUpcomingEventsLong(events));

                string msg = "";
                if (FindStartedEvents(events).Any())
                {
                    var eventRole = await TryGettingEventRole(guild);

                    var guildRole = guild.GetRole(eventRole.RoleID);

                    if (guildRole != null)
                    {
                        msg = guildRole.Mention;
                    }
                }

                var payload = _embedPayloadFactory.CreateEmbedPayload(EmbedStruct.Success, EmbedPayloadType.Event, "event",
                                                                      null, null, null, null, fields);

                var embed = _embedService.CreateFieldEmbed(payload);
                await guild
                .GetTextChannel(channel.ChannelID)
                .SendEmbedMsgAsync(msg, embed);
            }
        }
        private async Task MessageReceivedHandler(SocketMessage msg)
        {
            if (msg.Author.IsBot || !_injhinuity.Ready) // Wait until bot connected and initialized
            {
                return;
            }

            if (!(msg is SocketUserMessage usrMsg))
            {
                return;
            }

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

            var channel = msg.Channel as ISocketMessageChannel;
            var guild   = (msg.Channel as SocketTextChannel)?.Guild;

            var context = new SocketCommandContext(_client, usrMsg);

            // Initialise error handler for exceptions to reuse in case of errors
            async void errorCodeHandler(ErrorCodeException ex)
            {
                var ticks = DateTimeOffset.Now.Ticks;

                if (_timeErrorCodeExceptionWasShown + ERROR_CODE_COOLDOWN <= ticks)
                {
                    _timeErrorCodeExceptionWasShown = ticks;

                    if (ex.ErrorCode != "0004")
                    {
                        await _ownerLogger.LogError(ex.ErrorCode, ex.Message);
                    }

                    var titleParams = new List <string> {
                        ex.ErrorCode
                    };
                    var footerParams = new List <string> {
                        ex.ErrorCode
                    };

                    var payload = _embedPayloadFactory.CreateEmbedPayload(EmbedStruct.ErrorCode, EmbedPayloadType.Error, ex.ErrorCode,
                                                                          context.Message.Author, null, titleParams, footerParams);
                    var embed = _embedService.CreateBaseEmbed(payload);

                    var message = await context.Channel.SendMessageAsync("", false, embed.Build());

                    await message.DeleteAfterLong();

                    LogException(ex);
                }
                else
                {
                    await usrMsg.AddReactionAsync(new Emoji("❌"));
                }
            }

            try
            {
                /*if (await _conversationHandler.TryHandlingConversationForUser(context, usrMsg.Content))
                 *  return;*/

                if (await _customCommandHandler.TryHandlingCustomCommand(context, usrMsg.Content))
                {
                    return;
                }

                /*_pollService.TryAddingNewVote(msg.Content, context);*/

                await TryRunCommand(guild, channel, usrMsg, context, errorCodeHandler);

                /*await _foolsService.CheckMessageLength(channel, (SocketUserMessage)msg, guild);*/
            }
            catch (ErrorCodeException ex) { errorCodeHandler(ex); }
            catch (HttpRequestException ex) { errorCodeHandler(new ErrorCodeException("0002", ex.Message, ex.InnerException)); }
            catch (Exception ex)
            {
                await _ownerLogger.LogException(new BotException(context, ex.TargetSite.GetType().Name, ex.Message, ex.StackTrace, ex.InnerException));

                LogException(ex);
            }
        }