-5

I have a problem when I run my application bot. I can't leave the if statement. I think it's because I haven't done a return but I don't know how to structure it in a function like that, can someone help me?

     private async Task OpcionCostoCUV(IDialogContext context, IAwaitable<object> result)
    {
        var message = await result as Activity;

        if ((message.Text.Equals("1.- CUV Residencial")) || (message.Text.Equals("1.- cuv residencial")) || (message.Text.Equals("1.- CUV RESIDENCIAL")) || (message.Text.Equals("1"))
            || (message.Text.Equals("1.-")) || (message.Text.Equals("CUV residencial")) || (message.Text.Equals("cuv residencial")) || (message.Text.Equals("CUV RESIDENCIAL"))
            || (message.Text.Equals("2.- CUV de Interes Social")) || (message.Text.Equals("2.- cuv de interes Social")) || (message.Text.Equals("2.- CUV DE INTERES SOCIAL")) || (message.Text.Equals("2"))
            || (message.Text.Equals("2.-")) || (message.Text.Equals("CUV de Interes Social")) || (message.Text.Equals("cuv de interes Social")) || (message.Text.Equals("CUV DE INTERES SOCIAL"))
            || (message.Text.Equals("3.- CUV Media")) || (message.Text.Equals("3.- cuv media")) || (message.Text.Equals("3.- CUV MEDIA")) || (message.Text.Equals("3.-")) || (message.Text.Equals("3"))
            || (message.Text.Equals("CUV Media")) || (message.Text.Equals("cuv media")) || (message.Text.Equals("CUV MEDIA")))
        {
            if ((message.Text.Equals("1.- CUV Residencial")) || (message.Text.Equals("1.- cuv residencial")) || (message.Text.Equals("1.- CUV RESIDENCIAL")) || (message.Text.Equals("1"))
            || (message.Text.Equals("1.-")) || (message.Text.Equals("CUV residencial")) || (message.Text.Equals("cuv residencial")) || (message.Text.Equals("CUV RESIDENCIAL")))
            {
                await context.PostAsync("1");
            }
            else if ((message.Text.Equals("2.- CUV de Interes Social")) || (message.Text.Equals("2.- cuv de interes Social")) || (message.Text.Equals("2.- CUV DE INTERES SOCIAL")) || (message.Text.Equals("2"))
            || (message.Text.Equals("2.-")) || (message.Text.Equals("CUV de Interes Social")) || (message.Text.Equals("cuv de interes Social")) || (message.Text.Equals("CUV DE INTERES SOCIAL")))
            {
                await context.PostAsync("2");
            }
            else if ((message.Text.Equals("3.- CUV Media")) || (message.Text.Equals("3.- cuv media")) || (message.Text.Equals("3.- CUV MEDIA")) || (message.Text.Equals("3.-")) || (message.Text.Equals("3"))
            || (message.Text.Equals("CUV Media")) || (message.Text.Equals("cuv media")) || (message.Text.Equals("CUV MEDIA")))
            {
                await context.PostAsync("3");
            }

        }
        else
        {
            await context.PostAsync("Opcion no Valida");
            await context.PostAsync("Por favor, selecciona el numero de la opcion que deseas consultar.");
            await context.PostAsync(opcion1CUV + "\n" + "\n" + opcion2CUV + "\n" + "\n" + opcion3CUV);
        }


    }
Danoram
  • 8,132
  • 12
  • 51
  • 71
  • 3
    Don't tag other languages. And please read [ask] – klutt Oct 31 '19 at 21:54
  • If you declare a method with a return type (`Task` in this case), then you need a `return` statement in the method body (all code paths must return a value). You can change the return type to `void` if you don't want to return something. Otherwise, I don't think I understand the question. – Rufus L Oct 31 '19 at 21:59
  • Please explain "can't leave the if statement". If statements don't block, they just change the control flow. I recomend pausing in a debugger and understanding what exactly your application is waiting for. – Claudiu Guiman Oct 31 '19 at 22:00
  • Hi, this code is quite unreadable... but this is not a complete example. You're using Microsoft.Bot.Builder 3.0? If I look at the [IDialogContext Interface](https://learn.microsoft.com/en-us/dotnet/api/microsoft.bot.builder.dialogs.idialogcontext?view=botbuilder-dotnet-3.0&viewFallbackFrom=botbuilder-dotnet-stable), it seems `PostAsync` needs an IMessageActivity input... as in `var replyMessage = context.MakeMessage();`, `await context.PostAsync(replyMessage);`. I found some code [here](https://learn.microsoft.com/en-us/microsoftteams/platform/concepts/bots/bots-files) – JHBonarius Oct 31 '19 at 22:11

1 Answers1

1

You achieve your logic with only one level of ifs.

if
else if 
else if 
else 

Also, take the advantage of string's .ToLower()

Once you make these changes it may be easier to debug what the problem is.


Step 2

string t = message.Text.ToLower();
if (t.StartsWith("1") || t.Contains("CUV Residencial".ToLower()))
{
    await context.PostAsync("1");
}
else if (t.StartsWith("2") || t.Contains("CUV de Interes Social".ToLower()))
{
    await context.PostAsync("2");
}
else if (t.StartsWith("3") || t.Contains("CUV Media".ToLower()))
{
    await context.PostAsync("3");
}
else
{
    await context.PostAsync("Opcion no Valida");
    (...)
}

Step 1

string t = message.Text.ToLower();

        if ((t == "1.- CUV Residencial".ToLower()) || (t == "1".ToLower())
        || (t == "1.-".ToLower()) || (t == "CUV residencial".ToLower()))
        {
            await context.PostAsync("1");
        }
        else if ((t == "2.- CUV de Interes Social".ToLower()) || (t == "2".ToLower())
        || (t == "2.-".ToLower()) || (t == "CUV de Interes Social".ToLower()))
        {
            await context.PostAsync("2");
        }
        else if ((t == "3.- CUV Media".ToLower()) || (t == "3.-".ToLower()) || (t == "3".ToLower())
        || (t == "CUV Media".ToLower()))
        {
            await context.PostAsync("3");
        }
        else
        {
            await context.PostAsync("Opcion no Valida");
            (...)
        }
tymtam
  • 31,798
  • 8
  • 86
  • 126