Beispiel #1
0
        private async Task SendMissingParametersErrorResponse(Command command, string commandName, ISocketMessageChannel channel)
        {
            EmbedResponse.Builder builder = new EmbedResponse.Builder(EmbedResponseTemplate.Error);
            builder.AddMessage("Not enough parameters.", "You are missing some parameters.");
            ParameterInfo[] parameters = command.method.GetParameters();
            string          usage      = $"{TamaChan.Instance.botSettings.commandPrefix}{commandName}";

            for (int i = 0; i < parameters.Length; i++)
            {
                ParameterInfo pi = parameters[i];

                if (!pi.ParameterType.IsAssignableFrom(typeof(MessageContext)))
                {
                    ParameterInfo nextParameter = (i < parameters.Length - 1) ? parameters[i + 1] : null;
                    if (pi.IsOptionalParameter(nextParameter))
                    {
                        usage += $" ({pi.Name})";
                    }
                    else
                    {
                        usage += $" {pi.Name}";
                    }
                }
            }
            builder.AddMessage("Usage:", usage);
            builder.SetFooter($"Example: {command.Example}");

            await responseHandler.Respond(builder.Build(), channel);
        }
        private EmbedResponse GetSuccessResponse(APIResponse response)
        {
            if (response.query.pages[0].missing)
            {
                return(GetFailureResponse(response.query.pages[0].title));
            }
            else
            {
                EmbedResponse.Builder builder = new EmbedResponse.Builder(EmbedResponseTemplate.Success);

                int resultCount = response.query.pages.Length;
                resultCount = resultCount > MAX_RESULTS ? MAX_RESULTS : resultCount;
                builder.SetTitle($"Found {resultCount} article(s)");

                for (int i = 0; i < resultCount; i++)
                {
                    string articleName = response.query.pages[i].title;
                    APIResponse.Query.Redirect redirect = GetRedirectInfo(response.query, articleName);

                    string messageTitle = articleName;
                    if (redirect != null)
                    {
                        messageTitle += $" (from \"{redirect.from}\")";
                    }

                    builder.AddMessage(messageTitle, response.query.pages[0].fullurl);
                }

                return(builder.Build());
            }
        }
Beispiel #3
0
        public EmbedResponse PingCommand()
        {
            EmbedResponse.Builder builder = new EmbedResponse.Builder(EmbedResponseTemplate.Empty);
            builder.SetTitle("Awaiting...");
            EmbedResponse response = builder.Build();

            response.metadata       = ((DateTimeOffset)DateTime.Now).ToUnixTimeMilliseconds();
            response.onResponseSent = OnPongSent;
            return(response);
        }
Beispiel #4
0
        private EmbedResponse SetPlayingStatus(URL?streamingUrl, string playingStatus)
        {
            settings.activity.playingStatus = playingStatus;
            settings.activity.streamingUrl  = streamingUrl.HasValue ? streamingUrl.Value.uri.ToString() : null;
            Console.WriteLine(settings.activity.streamingUrl);
            settings.MarkDirty();
            Task.Run(() => UpdatePlayingStatus());

            EmbedResponse.Builder builder = new EmbedResponse.Builder(EmbedResponseTemplate.Success);
            builder.AddMessage("Playing status updated succesfully!", playingStatus);
            return(builder.Build());
        }
Beispiel #5
0
 public EmbedResponse EnableCommand(MessageContext context, bool enable)
 {
     if (context.serverId == null)
     {
         return(CreateNotAServerMessage());
     }
     SetEnabled((ulong)context.serverId, enable);
     EmbedResponse.Builder builder = new EmbedResponse.Builder(EmbedResponseTemplate.Info);
     builder.SetTitle("WordFilter");
     builder.AddMessage("WordFilter has been set to:", enable.ToString());
     return(builder.Build());
 }
Beispiel #6
0
        private EmbedResponse GetSuccessResponse(string query, Search results)
        {
            EmbedResponse.Builder builder = new EmbedResponse.Builder(EmbedResponseTemplate.Success);

            int resultCount = results.Items.Count > MAX_RESULTS ? MAX_RESULTS : results.Items.Count;

            builder.SetTitle($"Query \"{query}\" yielded {resultCount} results");

            for (int i = 0; i < resultCount; i++)
            {
                builder.AddMessage(results.Items[i].Title, results.Items[i].Link);
            }
            return(builder.Build());
        }
Beispiel #7
0
        private void OnPongSent(ResponseSentArgs responseSentArgs, Response response)
        {
            long oldTimestamp = (long)response.metadata;
            long newTimestamp = ((DateTimeOffset)DateTime.Now).ToUnixTimeMilliseconds();
            long difference   = newTimestamp - oldTimestamp;

            EmbedResponse.Builder builder = new EmbedResponse.Builder(EmbedResponseTemplate.Empty);
            builder.SetTitle($"Pong!\r\nMy latency is {difference}ms!");

            float latencySeverity = (difference / MAX_LATENCY);
            byte  r = (byte)(latencySeverity > MAX_LATENCY ? byte.MaxValue : (latencySeverity * byte.MaxValue));

            builder.SetColor(r, (byte)(byte.MaxValue - r), 0);

            responseSentArgs.Modify(builder.Build());
        }
Beispiel #8
0
        public EmbedResponse AboutCommand()
        {
            string[] aboutText = settings.aboutText;

            EmbedResponse.Builder builder;
            if (aboutText == null || aboutText.Length == 0)
            {
                builder = new EmbedResponse.Builder(EmbedResponseTemplate.Warning);
                builder.AddMessage("About TamaChanBot", "No about text was set.");
                return(builder.Build());
            }
            else
            {
                string joinedText = string.Join("\r\n", aboutText);

                builder = new EmbedResponse.Builder(EmbedResponseTemplate.Info);
                builder.AddMessage($"About TamaChanBot", joinedText);
                return(builder.Build());
            }
        }
Beispiel #9
0
        public async Task OnMessageReceived(MessageReceivedArgs messageReceivedArgs)
        {
            if (messageReceivedArgs.userId.Equals(BotID))
            {
                string[] splitContent = messageReceivedArgs.content.Split(' ');
                if (splitContent.Length == 2 && splitContent[0] == "Pong")
                {
                    long oldTimestamp = long.Parse(splitContent[1]);
                    long newTimestamp = ((DateTimeOffset)DateTime.Now).ToUnixTimeMilliseconds();
                    long difference   = newTimestamp - oldTimestamp;

                    MessageContext context        = messageReceivedArgs.CreateMessageContext();
                    DeleteResponse deleteResponse = new DeleteResponse(context);
                    await SendResponse(deleteResponse, context);

                    EmbedResponse.Builder builder = new EmbedResponse.Builder(EmbedResponseTemplate.Info);
                    builder.AddMessage("Pong!", $"My latency is {difference}ms.");
                    await SendResponse(builder.Build(), context);
                }
            }
        }
Beispiel #10
0
        public EmbedResponse RemoveWordCommand(MessageContext context, string word)
        {
            if (context.serverId == null)
            {
                return(CreateNotAServerMessage());
            }

            EmbedResponse.Builder builder;
            if (RemoveWord(context.serverId, word))
            {
                builder = new EmbedResponse.Builder(EmbedResponseTemplate.Success);
                builder.AddMessage("Removed word from WordFilter:", word);
            }
            else
            {
                builder = new EmbedResponse.Builder(EmbedResponseTemplate.Failure);
                builder.AddMessage($"Could not remove \"{word}\" from WordFilter.", "The word is not on the list to begin with.");
            }
            builder.SetTitle("WordFilter");
            return(builder.Build());
        }
Beispiel #11
0
        public EmbedResponse AddWordCommand(MessageContext context, string word)
        {
            if (context.serverId == null)
            {
                return(CreateNotAServerMessage());
            }

            EmbedResponse.Builder builder;
            if (AddWord(context.serverId, word))
            {
                builder = new EmbedResponse.Builder(EmbedResponseTemplate.Success);
                builder.AddMessage("Added word to WordFilter:", word);
            }
            else
            {
                builder = new EmbedResponse.Builder(EmbedResponseTemplate.Failure);
                builder.AddMessage($"Could not add \"{word}\" to WordFilter.", "The word is already being filtered.");
            }
            builder.SetTitle("WordFilter");
            return(builder.Build());
        }
Beispiel #12
0
        private EmbedResponse GetSuccessResponse(string query, SearchResult result)
        {
            EmbedResponse.Builder builder = new EmbedResponse.Builder(EmbedResponseTemplate.Success);

            builder.SetTitle(result.Snippet.Title);

            string description = result.Snippet.Description;

            if (string.IsNullOrWhiteSpace(description))
            {
                description = NO_DESCRIPTION;
            }

            builder.AddMessage(result.Snippet.ChannelTitle, description);
            builder.SetThumbnailURL(result.Snippet.Thumbnails.Default__.Url);

            switch (result.Id.Kind)
            {
            case VIDEO_KIND:
                builder.SetURL(string.Format(VIDEO_URL_FORMAT, result.Id.VideoId));
                break;

            case CHANNEL_KIND:
                builder.SetURL(string.Format(CHANNEL_URL_FORMAT, result.Id.ChannelId));
                break;

            case PLAYLIST_KIND:
                builder.SetURL(string.Format(PLAYLIST_URL_FORMAT, result.Id.PlaylistId));
                break;
            }

            CoreModule.Logger.LogInfo($"Title: {result.Snippet.Title}\r\n" +
                                      $"Channel: {result.Snippet.ChannelTitle}\r\n" +
                                      $"Desc: {result.Snippet.Description}\r\n" +
                                      $"Thumb url: {result.Snippet.Thumbnails.Default__.Url}\r\n" +
                                      $"URL: {string.Format(PLAYLIST_URL_FORMAT, result.Id.PlaylistId)}");
            return(builder.Build());
        }
Beispiel #13
0
 private EmbedResponse CreateNotAServerMessage()
 {
     EmbedResponse.Builder builder = new EmbedResponse.Builder(EmbedResponseTemplate.Error);
     builder.AddMessage("Not a server!", "WordFilter commands can only be used on a server!");
     return(builder.Build());
 }
Beispiel #14
0
 private async Task SendErrorResponse(string errorTitle, string errorMessage, ISocketMessageChannel channel)
 {
     EmbedResponse.Builder builder = new EmbedResponse.Builder(EmbedResponseTemplate.Error);
     builder.AddMessage(errorTitle, errorMessage);
     await responseHandler.Respond(builder.Build(), channel);
 }
Beispiel #15
0
 private EmbedResponse GetFailureResponse(string failedQuery)
 {
     EmbedResponse.Builder builder = new EmbedResponse.Builder(EmbedResponseTemplate.Failure);
     builder.AddMessage("No results found.", $"The query \"{failedQuery}\" yielded no results.");
     return(builder.Build());
 }