Ejemplo n.º 1
0
        public async Task DeclineMarriageAsync(EventContext e)
        {
            using (MikiContext context = new MikiContext())
            {
                MarriageRepository repository = new MarriageRepository(context);

                ArgObject selection   = e.Arguments.FirstOrDefault();
                int?      selectionId = null;

                if (selection != null)
                {
                    selectionId = selection.AsInt();
                }

                var marriages = await repository.GetProposalsReceived(e.Author.Id.ToDbLong());

                if (marriages.Count == 0)
                {
                    throw BotException.CreateCustom("error_proposals_empty");
                }

                marriages = marriages.OrderByDescending(x => x.Marriage.TimeOfMarriage).ToList();

                if (selectionId != null)
                {
                    var    m         = marriages[selectionId.Value - 1];
                    string otherName = (await Global.Client.Client.GetUserAsync(m.GetOther(e.Author.Id.ToDbLong()).FromDbLong())).Username;

                    new EmbedBuilder()
                    {
                        Title       = $"🔫 You shot down {otherName}!",
                        Description = $"Aww, don't worry {otherName}. There is plenty of fish in the sea!",
                        Color       = new Color(191, 105, 82)
                    }.ToEmbed().QueueToChannel(e.Channel);

                    m.Remove(context);
                    await context.SaveChangesAsync();
                }
                else
                {
                    var embed = new EmbedBuilder()
                    {
                        Title  = "💍 Proposals",
                        Footer = new EmbedFooter()
                        {
                            Text = $"Use {await e.Prefix.GetForGuildAsync(Global.RedisClient, e.Guild.Id)}declinemarriage <number> to decline",
                        },
                        Color = new Color(154, 170, 180)
                    };

                    await BuildMarriageEmbedAsync(embed, e.Author.Id.ToDbLong(), context, marriages);

                    embed.ToEmbed().QueueToChannel(e.Channel);
                }
            }
        }
Ejemplo n.º 2
0
        public async Task DivorceAsync(EventContext e)
        {
            using (MikiContext context = new MikiContext())
            {
                MarriageRepository repository = new MarriageRepository(context);

                ArgObject selection   = e.Arguments.FirstOrDefault();
                int?      selectionId = null;

                if (selection != null)
                {
                    selectionId = selection.AsInt();
                }

                var marriages = await repository.GetMarriagesAsync((long)e.Author.Id);

                if (marriages.Count == 0)
                {
                    throw BotException.CreateCustom("error_proposals_empty");
                }

                marriages = marriages.OrderByDescending(x => x.Marriage.TimeOfMarriage).ToList();

                if (selectionId != null)
                {
                    var m         = marriages[selectionId.Value - 1];
                    var otherUser = await Global.Client.Client.GetUserAsync(m.GetOther(e.Author.Id.ToDbLong()).FromDbLong());

                    EmbedBuilder embed = Utils.Embed;
                    embed.Title       = $"🔔 {e.Locale.GetString("miki_module_accounts_divorce_header")}";
                    embed.Description = e.Locale.GetString("miki_module_accounts_divorce_content", e.Author.Username, otherUser.Username);
                    embed.Color       = new Color(0.6f, 0.4f, 0.1f);
                    embed.ToEmbed().QueueToChannel(e.Channel);

                    m.Remove(context);
                    await context.SaveChangesAsync();
                }
                else
                {
                    var embed = new EmbedBuilder()
                    {
                        Title  = "💍 Marriages",
                        Footer = new EmbedFooter()
                        {
                            Text = $"Use {await e.Prefix.GetForGuildAsync(Global.RedisClient, e.Guild.Id)}divorce <number> to decline",
                        },
                        Color = new Color(154, 170, 180)
                    };

                    await BuildMarriageEmbedAsync(embed, e.Author.Id.ToDbLong(), context, marriages);

                    embed.ToEmbed().QueueToChannel(e.Channel);
                }
            }
        }
Ejemplo n.º 3
0
        private async Task HandlerError(BotException exception, BotEventArgs botEventArgs)
        {
            LoggerHolder.Instance.Error(exception.Message);

            if (_sendErrorLogToUser)
            {
                var errorLogMessage = new BotTextMessage(exception.Message);
                await errorLogMessage.SendAsync(_apiProvider, botEventArgs.SenderInfo);
            }
            else
            {
                var errorMessage = new BotTextMessage("Something went wrong.");
                await errorMessage.SendAsync(_apiProvider, botEventArgs.SenderInfo);
            }
        }
Ejemplo n.º 4
0
        public Task SendExceptionResponse(BotException botException)
        {
            var responseName          = botException.GetType().Name.Replace("Exception", string.Empty);
            var responseManagerMethod = typeof(ResponsesManager).GetMethod(responseName);

            if (responseManagerMethod == null)
            {
                Log.Error("{name} doesn't exists as a response", responseName);
                return(this.SendMessage($"{responseName} doesn't exists as a response")); // message typed into code, bcs it's called only when there is a problem with responses
            }
            return(this.SendResponse(x =>
            {
                var arg = new object[] { x };
                if (botException.Value != null)
                {
                    arg = arg.Append(botException.Value).ToArray();
                }
                return (string)responseManagerMethod.Invoke(null, arg);
            }));
        }
        public async Task LogBotException(BotException ex)
        {
            var toLog = ex.InnerException ?? ex;

            var descArgs = new List <string> {
                toLog.Message, ex.ModuleName
            };
            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, "module_exception",
                                                                  null, descArgs, null, footerArgs, fields);

            var embed = _embedService.CreateFieldEmbed(payload);
            await _ownerDMChannel.SendEmbedAsync(embed);
        }
Ejemplo n.º 6
0
        private void OnError(MessageEventArgs request, BotException ex)
        {
            if (ex.StatusCode == StatusCodes.InternalError)
            {
                logger.Error(ex, request.ToJson());
            }
            else
            {
                logger.Warn(ex, request.ToJson());
            }

            /// We assume that in the production version you do not need to send an error message to the chat
            if (settings.IsProd)
            {
                SendShortError(request);
            }
            else
            {
                SendFullError(request, ex);
            }
        }
Ejemplo n.º 7
0
        private async void BotOnMessageReceived(object sender, MessageEventArgs request)
        {
            logger.Trace($"Message received {request.Message.Text}");

            try {
                var context = await contextFactory.CreateContext(request);

                var userTextMessage = request.GetClearedTextMessage();
                var handler         = handlerFactory.CreateHandlerForCommand(userTextMessage);

                handler.Execute(context, request);
                logger.Trace($"Message processed  {request.Message.Text}");
                return;
            } catch (BotException botException) {
                OnError(request, botException);
            } catch (Exception exception) {
                var internalException = BotException.CreateInternalException(exception);
                OnError(request, internalException);
            }

            logger.Trace($"Message failed {request.Message.Text}");
        }
Ejemplo n.º 8
0
        private void SendFullError(MessageEventArgs request, BotException ex)
        {
            var sender = serviceFactory.SenderFactory.CreateSender(request);

            sender.Send($"Unhandled error: {ex.Message}", request);
        }
Ejemplo n.º 9
0
 public async static Task Exception(BotException exception)
 {
     await Mensagem(exception.Message, TipoLog.Erro);
 }