Пример #1
0
        private void _contextManager_VoteInitiated(ArkServerContext serverContext, VoteInitiatedEventArgs args)
        {
            if (args == null || args.Item == null)
            {
                return;
            }

            var handler = GetVoteHandler(args.Item);

            if (handler == null)
            {
                return;
            }

            //reminder, one minute before expiry
            var reminderAt = args.Item.Finished.AddMinutes(-1);

            if (DateTime.Now < reminderAt)
            {
                _scheduledTasksManager.AddTimedTask(new TimedTask
                {
                    When     = reminderAt,
                    Tag      = "vote_" + args.Item.Id,
                    Callback = new Func <Task>(async() =>
                    {
                        var result = handler.VoteIsAboutToExpire();
                        if (result == null)
                        {
                            return;
                        }

                        if (result.MessageRcon != null)
                        {
                            await serverContext.Steam.SendRconCommand($"serverchat {result.MessageRcon.ReplaceRconSpecialChars()}");
                        }
                        if (result.MessageAnnouncement != null && !string.IsNullOrWhiteSpace(_config.Discord.AnnouncementChannel))
                        {
                            await _discordManager.SendTextMessageToChannelNameOnAllServers(_config.Discord.AnnouncementChannel, result.MessageAnnouncement);
                        }
                    })
                });
            }

            //on elapsed
            _scheduledTasksManager.AddTimedTask(new TimedTask
            {
                When     = args.Item.Finished,
                Tag      = "vote_" + args.Item.Id,
                Callback = new Func <Task>(async() =>
                {
                    using (var db = _databaseContextFactory.Create())
                    {
                        var vote = db.Votes.FirstOrDefault(x => x.Id == args.Item.Id);

                        await VoteFinished(serverContext, db, vote);
                    }
                })
            });
        }
Пример #2
0
 private void Context_VoteInitiated(ArkServerContext sender, VoteInitiatedEventArgs e)
 {
     VoteInitiated?.Invoke(sender, e);
 }