public static ResponseTextMessage Handle(BotContext context, Message message)
        {
            ResponseTextMessage response = null;

            List <ITelegramCommand> commands = new List <ITelegramCommand>
            {
                new MyMerchantsCommand(context),
                new DeleteMerchantCommand(context),
                new NewMerchantCommand()
            };

            try
            {
                var command = commands.First(c => c.Name == message.Text.ToLowerInvariant());

                response = command.Execute(message);

                return(response);
            }
            catch (Exception)
            {
                //игнорирует сообщения несоответствующие формату команд /command
                return(response);
            }
        }
示例#2
0
 public static void UpdateDatabase()
 {
     Console.WriteLine("Checking database connection...");
     try
     {
         using var botContext = new BotContext();
         if (botContext.Database.CanConnect())
         {
             Console.WriteLine("Database connection is OK");
             Console.WriteLine("Migrating database...");
             try
             {
                 botContext.Database.Migrate();
                 Console.WriteLine("Database migration SUCCESS");
             }
             catch (Exception e)
             {
                 Console.WriteLine($"Database migration error\n {e}");
             }
         }
         else
         {
             Console.WriteLine("Database error");
         }
     }
     catch (Exception e)
     {
         Console.WriteLine($"Database error\n {e}");
     }
 }
示例#3
0
        public LastFm(BotContext botcontext)
        {
            var config = new ConfigurationBuilder().AddJsonFile("_config.json").Build();

            this._client  = new LastfmClient(config["tokens:lastfm_key"], config["tokens:lastfm_secret"]);
            this._context = botcontext;
        }
示例#4
0
 public void Boxfrage(IrcClient connection, string nick, bool check_db = true)
 {
     if (check_db && ConfigHelper.GetBoolean("BoxFrage", false))
     {
         return;
     }
     try
     {
         using (var context = new BotContext())
         {
             User u = context.GetUser(nick);
             UserKeyValueEntry entry = context.GetStorageOrCreate(u, "frag_asked");
             if (check_db)
             {
                 if (!ConfigHelper.GetBoolean("BoxFrage", false) || entry.Value == "true")
                 {
                     return;
                 }
                 Thread.Sleep(10000);
             }
             connection.SendMessage(SendType.Message, nick, $"Hallo {nick}, ich interessiere mich sehr für Fritz!Boxen, wenn du eine oder mehrere hast kannst du sie mir mit !boxadd deine box, mitteilen, falls du dies nicht bereits getan hast :).");
             connection.SendMessage(SendType.Message, nick, "Pro !boxadd bitte nur eine Box nennen (nur die Boxversion) z.b. !boxadd 7270v1 oder !boxadd 7170. Um die anderen im Channel nicht zu stören, sende es mir doch bitte per query/private Nachricht (z.b. /msg FritzBot !boxadd 7270)");
             entry.Value = "true";
             context.SaveChanges();
         }
     }
     catch (Exception ex)
     {
         Log.Error(ex, "Da ist etwas beim erfragen der Box schiefgelaufen");
     }
 }
示例#5
0
        private static async Task Client_MessageCreated(MessageCreateEventArgs message)
        {
            if (message.Author.IsBot)
            {
                return;
            }
            using (var botContext = new BotContext())
            {
                var Guild = await message.Guild(botContext);

                if (!message.Message.Content.StartsWith(Guild.Prefix))
                {
                    var User = await message.Author.User(Guild, botContext);

                    if (!User.LastExpMessage.HasValue || (DateTime.Now - User.LastExpMessage.Value).Minutes >= 1)
                    {
                        if (Guild.ShowLevelUp)
                        {
                            await User.AddExp(new Random().Next(1, 5), message.Channel, message.Author.Mention);
                        }
                        else
                        {
                            await User.AddExp(new Random().Next(1, 5));
                        }

                        User.LastExpMessage = DateTime.Now;

                        await botContext.SaveChangesAsync();
                    }
                }
            }
        }
示例#6
0
        public string RunWithTimeout(IRunner runner, BotContext context, TimeSpan timeout)
        {
            try
            {
                var result = string.Empty;

                var t = new Task(() => { result = runner.RunCommand(context); });
                t.Start();
                t.Wait(timeout);

                if (t.Status == TaskStatus.RanToCompletion)
                {
                    return(result);
                }

                if (t.Status == TaskStatus.WaitingToRun || t.Status == TaskStatus.Running)
                {
                    _logger.Error($"Timeout on bot {context.BotName}, intent {context.Intent}");
                    return("Unfortunately your request is taking longer than expected to fulfill. Please try to submit it again.");
                }

                return("Unfortunately I don't have the faintest clue what happened with your request. Please contact your administrator about this.");
            }
            catch (AggregateException e)
            {
                _logger.Error(e.InnerExceptions[0], $"Task failed, bot {context.BotName}, intent {context.Intent}");
                return("Unfortunately an internal error stopped me from fulfilling your request. Please contact your administrator about this.");
            }
        }
 // Token: 0x06000033 RID: 51 RVA: 0x00006018 File Offset: 0x00004218
 public FormEditUser(BotContext context, User user)
 {
     this.InitializeComponent();
     this.Context        = context;
     this.User           = user;
     this.formSkin1.Text = "Юзер: " + user.GetFullName();
 }
示例#8
0
        /// <summary>
        /// Verarbeitet einen Nickname wechsel
        /// </summary>
        /// <seealso cref="OnNickChange"/>
        private void _connection_OnNickChange(object sender, NickChangeEventArgs e)
        {
            Log.Information("{OldNickname} heißt jetzt {NewNickname}", e.OldNickname, e.NewNickname);
            using (var context = new BotContext())
            {
                User?oldNick = context.TryGetUser(e.OldNickname);
                User?newNick = context.TryGetUser(e.NewNickname);
                if (oldNick != null && newNick == null)
                {
                    oldNick.LastUsedName = new Nickname {
                        Name = e.NewNickname, User = oldNick
                    };
                    context.SaveChanges();
                }
                //else if (oldNick == null && newNick != null)
                //{
                //    newNick.Names.Add(e.OldNickname);
                //    newNick.LastUsedName = e.NewNickname;
                //    context.SaveChanges();
                //}
            }

            ThreadPool.QueueUserWorkItem(x =>
            {
                OnNickChange?.Invoke(this, e);
            });
        }
示例#9
0
 public void Run(IrcMessage theMessage)
 {
     if (theMessage.CommandArgs.Count > 1)
     {
         using (var context = new BotContext())
         {
             if (theMessage.ServerConnetion.IrcClient.IsMe(theMessage.CommandArgs[0]))
             {
                 theMessage.Answer("Wieso sollte ich mich selbst an etwas erinnern ;) ?");
                 return;
             }
             if (context.TryGetUser(theMessage.CommandArgs[0]) is { } u)
             {
                 ReminderEntry r = new ReminderEntry();
                 r.Created = DateTime.Now;
                 r.Creator = context.GetUser(theMessage.Nickname);
                 r.Message = theMessage.CommandArgs.Skip(1).Join(" ");
                 r.User    = u;
                 context.ReminderEntries.Add(r);
                 context.SaveChanges();
                 theMessage.Answer("Okay ich werde es sobald wie möglich zustellen");
             }
             else
             {
                 theMessage.Answer("Den Benutzer habe ich aber noch nie gesehen");
             }
         }
        public override async Task ExecuteCommandAsync(BotContext context, XanBotMember executingMember, DiscordMessage originalMessage, string[] args, string allArgs)
        {
            if (executingMember != null && executingMember.PermissionLevel < 254)
            {
                throw new ArchonCommandException(this, "Cannot execute this command at current permission level. This command requires backend console access (permission level 254+)");
            }

            if (args.Length != 1)
            {
                throw new ArchonCommandException(this, "Expected one arg `<enabled>`.");
            }

            if (bool.TryParse(args[0], out bool enable))
            {
                XanBotLogger.ShowDebugMessagesAnyway = enable;
                if (XanBotCoreSystem.IsDebugMode)
                {
                    await ResponseUtil.RespondToAsync(originalMessage, "Forcefully " + (enable ? "ENABLING" : "DISABLING") + " debug-logging to the bot's console. **NOTE:** This will have no effect since the bot is currently running in debug mode.");

                    return;
                }
                await ResponseUtil.RespondToAsync(originalMessage, "Forcefully " + (enable ? "ENABLING" : "DISABLING") + " debug-logging to the bot's console.");
            }
            else
            {
                throw new ArchonCommandException(this, $"Failed to cast `{args[0]}` into boolean (true/false).");
            }
        }
示例#11
0
 /// <summary>
 /// Erstellt eine neue Instanz des ServerManagers und lädt die ServerConnetions aus der Datenbank
 /// </summary>
 static ServerManager()
 {
     using (var context = new BotContext())
     {
         _servers = context.Servers.Include(x => x.Channels).AsEnumerable().Select(x => new ServerConnection(x)).ToList();
     }
 }
示例#12
0
        public override async Task ExecuteCommandAsync(BotContext context, XanBotMember executingMember, DiscordMessage originalMessage, string[] args, string allArgs)
        {
            if (args.Length != 2)
            {
                throw new CommandException(this, "Invalid argument count! Expected a user ID and a permission level.");
            }
            else
            {
                XanBotMember member = await UserGetter.GetMemberFromDataIDStrictAsync(context.Server, args[0]);

                byte permLvl = byte.Parse(args[1]);
                if (member == null)
                {
                    throw new CommandException(this, "The specified member could not be found. Are you searching by user ID?");
                }
                if (executingMember == member)
                {
                    throw new CommandException(this, "You cannot alter your own permission level.");
                }
                if (executingMember.PermissionLevel <= permLvl)
                {
                    throw new CommandException(this, string.Format("You cannot set the permission level of user `{0}` to a permission level equal to or higher than your own.", member.FullName));
                }
                if (executingMember.PermissionLevel <= member.PermissionLevel)
                {
                    // Trying to edit the permission level of someone higher than or equal to themselves.
                    throw new CommandException(this, "You cannot edit the permission level of someone at a rank greater than or equal to your own.");
                }
                member.PermissionLevel = permLvl;
                await ResponseUtil.RespondToAsync(originalMessage, string.Format("Set the permission level of user `{0}` to `{1}`", member.FullName, permLvl.ToString()));
            }
        }
        public async Task <IActionResult> Post(
            [FromRoute] string botUsername,
            [FromBody] Update update,
            [FromServices] IDictionary <string, BotSession> sessions,
            [FromServices] ILogger logger)
        {
            BotContext context = null;
            BotSession session = null;

            try
            {
                if (update == null)
                {
                    throw new ArgumentException("update is null!");
                }
                sessions.TryGetValue(botUsername, out session);
                if (session == null)
                {
                    throw new ArgumentException("session is null, bot token is not registered!");
                }
                context = new BotContext(null, session, update);
                await session.Router.Route(context);
            }
            catch (Exception ex)
            {
                logger.Log(ex, context?.RouteData);
            }
            return(Ok()); // Suppress Errors ...
        }
示例#14
0
        private void RemoveSubscription(IrcMessage theMessage)
        {
            if (theMessage.CommandArgs.Count < 3)
            {
                theMessage.Answer("Die Funktion benötigt 3 Parameter: !subscribe remove <PluginName> <SubscriptionProvider>");
                return;
            }
            PluginInfo plugin = PluginManager.Plugins.SingleOrDefault(x => x.IsNamed(theMessage.CommandArgs[1]));

            if (plugin == null)
            {
                theMessage.Answer("Ein solches Plugin konnte ich nicht ausfindig machen");
                return;
            }
            SubscriptionProvider provider = PluginManager.Plugins.SingleOrDefault(x => x.IsNamed(theMessage.CommandArgs[2])).As <SubscriptionProvider>();

            if (provider == null)
            {
                theMessage.Answer("Es gibt keinen solchen SubscriptionProvider");
                return;
            }
            using (var context = new BotContext())
            {
                Subscription sub = context.Subscriptions.FirstOrDefault(x => x.User == context.GetUser(theMessage.Nickname) && x.Provider == provider.PluginID && x.Plugin == plugin.ID);
                if (sub != null)
                {
                    context.Subscriptions.Remove(sub);
                    theMessage.Answer("Subscription entfernt");
                }
                else
                {
                    theMessage.Answer("Ich konnte keine Zutreffende Subscription finden die ich hätte entfernen können");
                }
            }
        }
示例#15
0
文件: auth.cs 项目: freddyyi/FritzBot
 public void Run(IrcMessage theMessage)
 {
     using (var context = new BotContext())
     {
         User user = context.GetUser(theMessage.Nickname);
         if (user.Authenticated)
         {
             theMessage.Answer("Du bist bereits authentifiziert");
             return;
         }
         if (!theMessage.IsPrivate)
         {
             theMessage.Answer("Ohje das solltest du besser im Query tuen");
             return;
         }
         if (user.CheckPassword(theMessage.CommandLine))
         {
             user.Authentication = DateTime.Now;
             context.SaveChanges();
             theMessage.SendPrivateMessage("Du bist jetzt authentifiziert");
         }
         else
         {
             theMessage.SendPrivateMessage("Das Passwort war falsch");
         }
         theMessage.Hidden = true;
     }
 }
示例#16
0
        public async Task <int> Add(IEnumerable <string> columns, IEnumerable <object> values)
        {
            var sql = new StringBuilder($"insert into public.\"{table}\" (");

            foreach (var column in columns)
            {
                sql.Append($"\"{column}\",");
            }
            sql.Remove(sql.Length - 1, 1);
            sql.Append(") values (");
            valuesDict = new Dictionary <string, object>();
            var valuesArr = values.ToArray();

            for (var i = 0; i < valuesArr.Length; i++)
            {
                sql.Append($"@val{i},");
                valuesDict.Add($"val{i}", valuesArr[i]);
            }
            sql.Remove(sql.Length - 1, 1);
            sql.Append(")");

            int result;

            using (var conn = BotContext.OpenConnection())
            {
                result = await conn.ExecuteAsync(sql.ToString(), valuesDict);
            }

            valuesDict = null;
            return(result);
        }
示例#17
0
        public async Task Leaderboard(CommandContext ctx)
        {
            var emojis = new Dictionary <int, string>
            {
                [1]  = ":first_place:",
                [2]  = ":second_place:",
                [3]  = ":third_place:",
                [4]  = ":four:",
                [5]  = ":five:",
                [6]  = ":six:",
                [7]  = ":seven:",
                [8]  = ":eight:",
                [9]  = ":nine:",
                [10] = ":keycap_ten:"
            };

            var botContext = new BotContext();

            var i     = 1;
            var users = botContext.Users.Where(u => u.Guild.GuildId == ctx.Guild.Id).OrderByDescending(u => u.Exp).Take(10).ToList();

            await new ModernEmbedBuilder
            {
                Title       = ":trophy: " + await ctx.Lang("leaderboard.title"),
                Description = (await users.SelectAsync(async u => $"**{emojis[i++]} {(await ctx.Guild.GetMemberAsync(u.DiscordUser)).Name(true)}** - level: {u.GetLevel()} ({u.Exp}/{KuvuUser.ConvertLevelToExp(u.GetLevel() + 1)} exp)")).Join("\n"),
                Url         = $"https://kuvubot.xyz/leaderboard/{ctx.Guild.Id}"
            }.AddGeneratedForFooter(ctx).Send(ctx.Message.Channel);
        }
示例#18
0
        public override void SendNotification(User user, string message)
        {
            string?userToken = null;

            using (var context = new BotContext())
            {
                userToken = context.GetStorage(user, "pushover_token")?.Value;
            }
            if (String.IsNullOrEmpty(userToken))
            {
                return;
            }
            Dictionary <string, string> Parameter = new Dictionary <string, string>()
            {
                { "token", "b6p6augH1KDpxcRxyo4I35Yxl9XP5x" },
                { "user", userToken },
                { "message", message }
            };

            Toolbox.GetWeb("https://api.pushover.net/1/messages.xml", Parameter);
            //XDocument antwort = XDocument.Parse(toolbox.GetWeb("https://api.pushover.net/1/messages.xml", Parameter));
            //<hash>
            //  <status type="integer">1</status>
            //</hash>
        }
        public static IList <DateTime> GetDateTimes(this BotContext context)
        {
            IList <DateTime> times = new List <DateTime>();
            // Get DateTime model for English
            var model   = DateTimeRecognizer.GetInstance().GetDateTimeModel(((Activity)context.Request).Locale ?? "en-us");
            var results = model.Parse(((Activity)context.Request).Text);

            // Check there are valid results
            if (results.Any() && results.First().TypeName.StartsWith("datetimeV2"))
            {
                // The DateTime model can return several resolution types (https://github.com/Microsoft/Recognizers-Text/blob/master/.NET/Microsoft.Recognizers.Text.DateTime/Constants.cs#L7-L14)
                // We only care for those with a date, date and time, or date time period:
                // date, daterange, datetime, datetimerange

                return(results.Where(result =>
                {
                    var subType = result.TypeName.Split('.').Last();
                    return (subType.Contains("date") || subType.Contains("time")) && !subType.Contains("range");
                })
                       .Select(result =>
                {
                    var resolutionValues = (IList <Dictionary <string, string> >)result.Resolution["values"];
                    return resolutionValues.Select(v => DateTime.Parse(v["value"]));
                }).SelectMany(l => l).ToList());
            }
            return(times);
        }
示例#20
0
        public void Run(IrcMessage theMessage)
        {
            switch (theMessage.CommandArgs[0])
            {
            case "box-recheck":
                using (var context = new BotContext())
                {
                    throw new NotImplementedException();
                    //db.Query<BoxEntry>().ForEach(x => { x.ReAssociateBoxes(); db.SaveOrUpdate(x); });
                }

            //theMessage.Answer("Done");
            //return;
            case "boxdb":
                BoxDB(theMessage);
                return;

            case "config":
                Config(theMessage);
                return;

            default:
                theMessage.Answer("Das habe ich nicht verstanden: Unterbefehle: box-recheck, boxdb (add, remove, regex, list), config");
                return;
            }
        }
示例#21
0
        public PrivateChatService(DiscordSocketClient client, BotContext botContext)
        {
            _botContext = botContext;
            _client     = client;

            client.UserVoiceStateUpdated += UserVoiceStateUpdated;
        }
        public async Task Intents_ValidateFilterOrder()
        {
            IntentRecognizerMiddleware m = new IntentRecognizerMiddleware();
            string shouldRun             = null;

            /*
             *  Filters are required to run in reverse order. This code validates that by registering 3 filters and
             *  running a simple state machine across them.
             */
            m.OnFilter(async(context, intentList) =>
            {
                Assert.IsTrue(shouldRun == "third", "1st filter did not run last");
                shouldRun = "done";
            });

            m.OnFilter(async(context, intentList) =>
            {
                Assert.IsTrue(shouldRun == "second", "2nd filter did not run second");
                shouldRun = "third";
            });

            m.OnFilter(async(context, intentList) =>
            {
                Assert.IsTrue(shouldRun == "first", "last filter did not run first");
                shouldRun = "second";
            });

            BotContext bc = TestUtilities.CreateEmptyContext();

            shouldRun = "first";

            var resultingIntents = await m.Recognize(bc);

            Assert.IsTrue(shouldRun == "done", "Final filter did not run");
        }
 private IQueryable <UserAnswer> GetAnswered(BotContext context)
 {
     return(context.UserAnswers
            .Include(x => x.Answer)
            .Include(x => x.Answer.Category)
            .Where(x => x.User.UserStatus == UserStatus.Answered));
 }
        public async Task Intents_RegognizeTwoIntents()
        {
            string targetName1 = Guid.NewGuid().ToString();
            string targetName2 = Guid.NewGuid().ToString();

            IntentRecognizerMiddleware m = new IntentRecognizerMiddleware();

            m.OnRecognize(async(context) =>
            {
                return(new List <Intent>
                {
                    new Intent()
                    {
                        Name = targetName1
                    },
                    new Intent()
                    {
                        Name = targetName2
                    }
                });
            });

            BotContext bc = TestUtilities.CreateEmptyContext();
            var        resultingIntents = await m.Recognize(bc);

            Assert.IsTrue(resultingIntents.Count == 2, "Expected exactly 2 intents");
            Assert.IsTrue(resultingIntents[0].Name == targetName1, $"Unexpected Intent Name. Expected {targetName1}");
            Assert.IsTrue(resultingIntents[1].Name == targetName2, $"Unexpected Intent Name. Expected {targetName2}");
        }
示例#25
0
 public InfoService(BotContext botContext, CommandService commandService, IServiceProvider serviceProvider, InteractivityService interactivityService)
 {
     _botContext           = botContext;
     _commandService       = commandService;
     _serviceProvider      = serviceProvider;
     _interactivityService = interactivityService;
 }
示例#26
0
 /// <summary>
 /// Creates a new <see cref="UnitOfWork"/>
 /// </summary>
 /// <param name="context">The DbContext that will be used.</param>
 /// <param name="serverRepository">The ServerRepository that will be used.</param>
 /// <param name="userRepository">The UserRepository that will be used.</param>
 /// <param name="requestRepository">The RequestRepository that will be used.</param>
 public UnitOfWork(BotContext context, IServerRepository serverRepository, IUserRepository userRepository, IRequestRepository requestRepository)
 {
     _context = context;
     Servers  = serverRepository;
     Users    = userRepository;
     Requests = requestRepository;
 }
示例#27
0
 public Items(BotContext context, Element parent = null) : base(context)
 {
     _parent        = parent;
     LikeBtn        = new ItemsElements.LikeBtn(context, parent);
     PostCollection = new ItemsElements.PostCollection <ItemsElements.PostItem>(context, parent);
     Item1          = new ItemsElements.Item1(context, parent);
     Item2          = new ItemsElements.Item2(context, parent);
 }
示例#28
0
 public Moscow(BotContext context, Element parent = null) : base(context)
 {
     _parent        = parent;
     PostCollection = new WallElements.PostCollection <WallElements.PostItem>(context, this);
     TestCollection = new MoscowElements.TestCollection <MoscowElements.TestItem>(context, this);
     One            = new MoscowElements.One(context, this);
     Two            = new MoscowElements.Two(context, this);
 }
示例#29
0
 public Parent1(BotContext context, Element parent = null) : base(context)
 {
     _parent        = parent;
     Child1         = new Parent1Elements.Child1(context, this);
     Child2         = new Parent1Elements.Child2(context);
     Child3         = new Parent1Elements.Child3(context, this);
     PostCollection = new Parent1Elements.PostCollection <Parent1Elements.PostItem>(context);
 }
示例#30
0
 public void Run(IrcMessage theMessage)
 {
     using (var context = new BotContext())
     {
         string boxen = context.BoxEntries.Select(x => x.Box.ShortName ?? x.Text).Where(x => x != null).Distinct().Join(", ");
         theMessage.Answer("Folgende Boxen wurden bei mir registriert: " + boxen);
     }
 }
示例#31
0
        public void Start()
        {
            Servants = GetServantList();

            Calls.Clear();
            Counter = 0;
            foreach (var servant in Servants)
            {
                var botCtx = new BotContext(new FillServantEarning(), servant);
                Calls.Add(botCtx);
                ThreadPool.QueueUserWorkItem(BotCall, botCtx);
            }

            TerminateSignal.WaitOne();

            OnTerminated();
        }
 public TaskService()
 {
     _botContext=new BotContext();
 }
示例#33
0
 public BotEventArgs(BotContext botInfo)
 {
     BotInfo = botInfo;
 }
示例#34
0
 private void OnBotStarted(BotContext ctx)
 {
     if (BotStarted != null)
             BotStarted(this, new BotEventArgs(ctx));
 }