Exemplo n.º 1
0
        public async Task GiphyGet([Remainder] string input = "")
        {
            var faceArgs = input.Split(' ');
            var face     = GifUtilities.DefaultFace;

            if (faceArgs[0].Contains("Face:") && faceArgs[0].Split(':').Length == 2)
            {
                face  = faceArgs[0].Split(':')[1];
                input = String.Join(" ", faceArgs.Skip(1));
            }

            string searchString = "http://api.giphy.com/v1/gifs/translate?api_key=" + GiphyKey + "&s=" + Uri.EscapeDataString(input);
            var    json         = new WebClient().DownloadString(searchString);
            JToken giffyToken   = JObject.Parse(json);
            string url          = giffyToken.SelectToken("data").SelectToken("url").ToString();
            string originalGif  = giffyToken.SelectToken("data").SelectToken("images").SelectToken("original").SelectToken("url").ToString();

            try
            {
                string gif = GifUtilities.DoFaceReplace(originalGif, face);
                await Context.Channel.SendFileAsync(gif);

                return;
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
            await ReplyAsync(url);
        }
Exemplo n.º 2
0
        public async Task HandleCommands(SocketMessage messageParam)
        {
            var message = messageParam as SocketUserMessage;

            var userName = message.Author.Username;

            if (message == null)
            {
                return;
            }

            int argPos = 0;

            var context = new CommandContext(client, message);


            #region command_or_at
            if (!(message.HasCharPrefix('!', ref argPos) || message.HasMentionPrefix(client.CurrentUser, ref argPos)) && !overRideDefaultAllowances(message))
            {
                return;
            }
            #endregion

            string channelFrom = message.Channel.Name;
            //move to config
            List <string> allowedChannels = new List <string>(new string[] { "bot-channel" });

            Tuple <ModuleUtilities.ImageLocations, string> imageWhere = CheckForImage(message);

            if (imageWhere.Item1 != ModuleUtilities.ImageLocations.None && false) //disable this for the time being it doesn't totally work and presents issues of its own
            {
                new Thread(async() =>
                {
                    var typingOnReplaceImage = context.Channel.EnterTypingState();
                    var gif = GifUtilities.DoFaceReplace(imageWhere.Item2, "lampreyme.png");
                    //lets do some dubious reflection
                    //PropertyInfo propInfo = typeof(SocketUserMessage).GetProperty("Attachments");
                    //FieldInfo contentField = propInfo.GetBackingField();
                    //contentField.SetValue(message, gif);
                    if (imageWhere.Item1 == ModuleUtilities.ImageLocations.Message)
                    {
                        await context.Channel.SendMessageAsync(gif);
                    }
                    else
                    {
                        await context.Channel.SendFileAsync(gif);
                    }
                    typingOnReplaceImage.Dispose();
                    return;

                    ;
                    //typingOnReplaceImage.Dispose();
                }).Start();
            }

            #region wrong_channel
            if (!allowedChannels.Exists(s => string.Equals(s, channelFrom, StringComparison.OrdinalIgnoreCase)) && !overRideDefaultAllowances(message))
            {
                var wrongContext = new CommandContext(client, message);
                await wrongContext.Channel.SendMessageAsync(("WRONG CHANNEL"));

                return;
            }
            #endregion

            #region intercept_text
            if (overRideDefaultAllowances(message) && !message.HasCharPrefix('!', ref argPos))
            {
                PropertyInfo propInfo     = typeof(SocketUserMessage).GetProperty("Content");
                FieldInfo    contentField = propInfo.GetBackingField();
                argPos++;
                Random rand = new Random();
                int    pick = rand.Next(0, 2);
                if (pick == 0)
                {
                    contentField.SetValue(message, "!scrustspeak 4 " + message.Content);
                }
                else
                {
                    contentField.SetValue(message, "!muddlespeak " + message.Content);
                }
            }
            #endregion


            var typing = context.Channel.EnterTypingState();
            new Thread(async() =>
            {
                var result = await commands.ExecuteAsync(context, argPos, services);
                typing.Dispose();
                if (!result.IsSuccess)
                {
                    await context.Channel.SendMessageAsync(result.ErrorReason);
                }
                typing.Dispose();
            }).Start();
            typing.Dispose();
        }