2017-09-18 4 views
0

Je construis un ChatBot en utilisant C# et Visual Studio. Ce que je veux faire c'est après quelques requêtes sur le ChatBot, l'utilisateur ne peut plus utiliser le clavier, j'ai vu quelques sites qui expliquent comment le faire mais je n'ai pas bien compris, donc si quelqu'un peut m'aider.Bloquer le clavier d'entrée chatbot

L'idée est de mettre dans le bloc else quelque chose qui empêche l'utilisateur d'écrire dans ChatBot, donc s'il veut écrire les choses qu'il tape n'apparaitront pas à l'écran. Voici mon code:

private int NombreDeMessages; 
protected override async Task MessageReceived(IDialogContext context, IAwaitable<IMessageActivity> item) 
{ 
    var message = await item; 
    NombreDeMessages += 1; 
    string code = EndOfConversationCodes.CompletedSuccessfully; 
    CancellationToken cancellationToken = default(CancellationToken); 


    if (message.Text != null && NombreDeMessages < 3) 
    { 
     await base.MessageReceived(context, item); 
    } 
    else if (message.Text != null && NombreDeMessages == 3) 
    { 
     AdaptiveCard card = new AdaptiveCard(); 
     card.Body.Add(new TextBlock() 
     { 
      Text = "STOP FLOODING", 
      Weight = TextWeight.Bolder, 
      IsSubtle = true, 
      Wrap = true, 
      Size = TextSize.Large 
     }); 

     card.Body.Add(new TextBlock() 
     { 
      Text = "You have reach the limit of queries", 
      IsSubtle = false, 
      Wrap = true, 
      Size = TextSize.Normal 
     }); 

     card.Body.Add(new Image() 
     { 
      Url = "http://images.roadtrafficsigns.com/img/dp/lg/traffic-stop-sign.png", 

      HorizontalAlignment = AdaptiveCards.HorizontalAlignment.Center, 
      Size = ImageSize.Stretch 
     }); 

     Attachment attachment = new Attachment() 
     { 
      ContentType = AdaptiveCard.ContentType, 
      Content = card 
     }; 
     var flood = context.MakeMessage(); 
     flood.Attachments.Add(attachment); 

     await context.PostAsync(flood); 
    } 
    else 
    { 
     var reply = context.MakeMessage(); 

     reply.Type = ActivityTypes.EndOfConversation; 
     reply.AsEndOfConversationActivity().Code = code; 

     await context.PostAsync(reply, cancellationToken); 
    } 
} 

Oui Je veux bloquer l'entrée sur l'application Web, je n'ai pas une application C#. Mon code HTML est celui-ci:

<!DOCTYPE html> 
<html> 
<body style="width:100%;height:100%;"> 
    <script> 
(function() { 
     var div = document.createElement("div"); 
     document.getElementsByTagName('body')[0].appendChild(div); 
     div.outerHTML = "<div id='botDiv' style='height: 38px; position: fixed; bottom: 0; z-index: 1000; background-color: #fff'><div id='botTitleBar' style='height: 38px; width: 400px; position:fixed; cursor: pointer;'></div><iframe width='400' height='600' src='https://webchat.botframework.com/embed/supportbotv2?s=4mHD9MekOvU.cwA.8ZU.Pn31pCpv8kyq7UQCr3y4bM-99W4eHxUt-LlhBnCp9JY'></iframe></div>"; 

     document.querySelector('body').addEventListener('click', function (e) { 
      e.target.matches = e.target.matches || e.target.msMatchesSelector; 
      if (e.target.matches('#botTitleBar')) { 
       var botDiv = document.querySelector('#botDiv'); 
       botDiv.style.height = botDiv.style.height == '600px' ? '38px' : '600px'; 
      }; 
     }); 
    }());</script> 
</body> 
</html> 

Répondre

1

Quel est le problème avec la désactivation du contrôle où la saisie au clavier est prise? Par exemple:

this.textBox1.enabled = false 
+0

Le problème est que le ChatBot est intégré dans un site Web avec un lien iframe donc je pense que je ne peux pas atteindre la zone de texte où l'entrée du clavier est prise. Et pour tester mon code et mon ChatBot, j'utilise Bot Framework Channel Emulator. Donc je pense que ça ne marchera pas –

+0

Donc, vous voulez bloquer l'entrée sur l'application web ou avez-vous une application C# (winforms)? –

+0

Oui, je veux bloquer l'entrée sur l'application web, je n'ai pas d'application C#. Vous pouvez voir mon code HTML dans ma question. –