Exemplo n.º 1
0
        public async Task <string> Execute(CommandString cmd, MessageEventArgs messageEventArgs)
        {
            if (cmd.Parameters.Length < 1)
            {
                return(null);
            }
            var msg = messageEventArgs.Message;

            if (msg.Chat.Type != ChatType.Private)
            {
                return(null);
            }

            string name  = cmd.Parameters[0];
            string descr = name;

            if (cmd.Parameters.Length > 1)
            {
                descr = string.Join(' ', cmd.Parameters.Skip(1));
            }

            try
            {
                var topic = await db.CreateTopic(NamespacedId.Telegram(msg.From.Id), name, descr);

                return($"created {topic.Name}\n" +
                       $"readToken\n{topic.ReadToken}\n" +
                       $"writeToken\n{topic.WriteToken}\n" +
                       $"adminToken\n{topic.AdminToken}\n");
            }
            catch (MySqlException myDuplicate) when(myDuplicate.Number == 1062)
            {
                return($"topic {name} already exists");
            }
        }
Exemplo n.º 2
0
        public async Task <string> Execute(CommandString cmd, MessageEventArgs messageEventArgs)
        {
            if (cmd.Parameters.Length < 1)
            {
                return(null);
            }

            if (!await CommandHelper.CheckAdministrator(bot, messageEventArgs.Message))
            {
                return(null);
            }

            var msg  = messageEventArgs.Message;
            var chat = NamespacedId.Telegram(msg.Chat.Id);

            var topicName = cmd.Parameters[0];
            int affected  = await db.RemoveSubscription(topicName, chat);

            if (affected >= 1)
            {
                return($"unsubscribed from {topicName}");
            }
            else
            {
                return($"could not find subscription for {topicName}");
            }
        }
Exemplo n.º 3
0
        public async Task CreateTopic(
            CommandContext ctx,
            [Description("The unique name of the new topic.")]
            string name,
            [RemainingText, Description("The name displayed in service messages. Defaults to `name`")]
            string description = null)
        {
            if (description == null)
            {
                description = name;
            }

            _ = ctx.TriggerTypingAsync();

            try
            {
                var topic = await Db.CreateTopic(NamespacedId.Discord(ctx.User.Id), name, description);

                await ctx.RespondAsync($"created {topic.Name}\n" +
                                       $"readToken\n{topic.ReadToken}\n" +
                                       $"writeToken\n{topic.WriteToken}\n" +
                                       $"adminToken\n{topic.AdminToken}\n");
            }
            catch (MySqlException myDuplicate) when(myDuplicate.Number == 1062)
            {
                await ctx.RespondAsync($"topic {name} already exists");
            }
        }
Exemplo n.º 4
0
        public async Task Subscribe(
            CommandContext ctx,
            [Description("The read token of the token to subscribe to.")]
            string token
            )
        {
            _ = ctx.TriggerTypingAsync();

            var chat  = NamespacedId.Discord(ctx.Channel.Id);
            var topic = await Db.GetTopicForSub(token, chat);

            if (topic == null)
            {
                await ctx.RespondAsync("topic not found");
            }
            else if (topic.Chat.HasValue && topic.Chat.Value == chat)
            {
                await ctx.RespondAsync($"already subscribed to {topic.Name}");
            }
            else if (topic.ReadToken != token)
            {
                await ctx.RespondAsync("token mismatch");
            }
            else
            {
                await Db.CreateSubscription(topic.TopicId, chat);

                await ctx.RespondAsync($"subscribed to {topic.Name}");
            }
        }
Exemplo n.º 5
0
        public void LoadTexture(NamespacedId id)
        {
            if (LoadedTextures.ContainsKey(id))
            {
                Log.Info($"Texture {id} is already loaded. Reloading...");
                LoadedTextures[id].Dispose();
            }

            Log.Info($"Loading texture {id}...");

            try
            {
                var data = ImageLoader.Load(ResolveTexturePath(id));
                if (data == null)
                {
                    throw new Exception("Not found");
                }

                LoadedTextures[id] = Engine.Renderer.CreateTexture(
                    data.Value.Data,
                    data.Value.Width,
                    data.Value.Height);
            }
            catch (Exception e)
            {
                Log.Error($"Couldn't load texture {id}");
                Log.Error($"{e.GetType().Name}: {e.Message}");
                Log.Error($"{e.StackTrace}");
                LoadedTextures[id] = ErrorTexture;
#if DEBUG
                throw;
#endif
            }
        }
Exemplo n.º 6
0
        public async Task ListSubscriptions(CommandContext ctx)
        {
            _ = ctx.TriggerTypingAsync();

            var topics = await Db.GetTopicsForChat(NamespacedId.Discord(ctx.Channel.Id));

            await ctx.RespondAsync(topics.Any()
                                   ? "Topics:\n" + string.Join("\n", topics)
                                       : "No subscriptions active.");
        }
Exemplo n.º 7
0
 public Texture Get(NamespacedId id, bool loadIfUnloaded = true)
 {
     if (!LoadedTextures.ContainsKey(id))
     {
         if (!loadIfUnloaded)
         {
             return(ErrorTexture);
         }
         LoadTexture(id);
     }
     return(LoadedTextures[id]);
 }
Exemplo n.º 8
0
        public async Task <string> Execute(CommandString cmd, MessageEventArgs messageEventArgs)
        {
            if (!await CommandHelper.CheckAdministrator(bot, messageEventArgs.Message))
            {
                return(null);
            }

            var msg    = messageEventArgs.Message;
            var chatid = msg.Chat.Id;
            var topics = await db.GetTopicsForChat(NamespacedId.Telegram(chatid));

            return(topics.Any()
                ? "Topics:\n" + string.Join("\n", topics)
                : "No subscriptions active.");
        }
Exemplo n.º 9
0
        public async Task Unsubscribe(
            CommandContext ctx,
            [Description("The name of the topic to unsubscribe from.")]
            string name
            )
        {
            _ = ctx.TriggerTypingAsync();

            int affected = await Db.RemoveSubscription(name, NamespacedId.Discord(ctx.Channel.Id));

            if (affected >= 1)
            {
                await ctx.RespondAsync($"unsubscribed from {name}");
            }
            else
            {
                await ctx.RespondAsync($"could not find subscription for {name}");
            }
        }
Exemplo n.º 10
0
        public async Task <string> Execute(CommandString cmd, MessageEventArgs args)
        {
            if (cmd.Parameters.Length < 1)
            {
                return(null);
            }

            if (!await CommandHelper.CheckAdministrator(bot, args.Message))
            {
                return(null);
            }

            var chat  = NamespacedId.Telegram(args.Message.Chat.Id);
            var token = cmd.Parameters[0];

            var topic = await db.GetTopicForSub(token, chat);

            if (topic == null)
            {
                return("topic not found");
            }
            else if (topic.Chat == chat)
            {
                return($"already subscribed to {topic.Name}");
            }
            else if (topic.ReadToken != token)
            {
                return("token mismatch");
            }
            else
            {
                await db.CreateSubscription(topic.TopicId, chat);

                return($"subscribed to {topic.Name}");
            }
        }
Exemplo n.º 11
0
 public string ResolveTexturePath(NamespacedId id, string prefix = "")
 {
     return($"assets/{id.Namespace}/textures/{prefix}{id.Id}.png");
 }