Synbot Plugin Tutorial - interface to Syn Bot Software

Step 9 : Adding new SIML Tags to the language

One of the main strength of Syn Bot Framework is the ability to code in C # custom adapters to handle new SIML Tags.

In SIML files you need to precise in the SIML tag that external adapters will be used

[Siml xmlns:x="http://syn.co.in/2014/siml#external" xmlns:Think="http://syn.co.in/2014/siml#think"]

In SIML , if we define an adapters with name newtag - tag Syntax will be [x:newtag][/x:newtag>]

Synbot plugin include reference to a UserSIMLadaptator.dll than you can code to create classes for handling custom new tags

You need just to download and unzip the Visual studio Solution here : UserSIMLadaptators.zip

Then to mofify in Visual Studio adding your code and generate then to go to the BIN\DEBUG folder of the project and to copy the files UserSIMLadaptators.dll , UserSIMLadaptators.dll.config and UserSIMLadaptators.pdb in the synbot plugin directory C:\Users\Public\Documents\EZ-Builder\Plugins(GUID of Synbot Plugin)

Here example of coding for the TextopAdapter adaptator processing SIML tag [x:Textop][/x:Textop>]

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
using Syn.Bot.Siml;
using Syn.Bot.Siml.Interfaces;
using Syn.Bot.Siml.Events;
using System.Diagnostics;
using System.Collections;

namespace UserSIMLadaptators
{
    public class Simladaptators
    {
        public static bool traceEZlog = false;
        private static Simladaptators instance;
        static Simladaptators()
        {
            instance = new Simladaptators();

        }
        public static Simladaptators adaptators
        {
            get { return instance; }
        }
        private Simladaptators() { }
        public void Add(string x, ref List listadapters)
        {
            // Add here to the list all new adapters you want to integrate method name as string 
            listadapters.Add("Textop");
            return;
        }
        public static string Textop(Context parameter)
        {
            string function = string.Empty; string result = false.ToString(); string inputtext = string.Empty; string delimitor = string.Empty;
            string charat = string.Empty; string length = string.Empty; string value = string.Empty; int textlength = 0;
            int numat = 0; int numlength = 0;
            if (parameter.Element.Value != null) inputtext = parameter.Element.Value;
            if (parameter.Element.Value == null || parameter.Element.Value == string.Empty) return string.Empty;
            textlength = inputtext.Length;
            if (parameter.Element.Attribute("Function") != null) function = parameter.Element.Attribute("Function").Value.ToLower();
            if (parameter.Element.Attribute("Delimitor") != null) delimitor = parameter.Element.Attribute("Delimitor").Value.ToLower();
            if (function == string.Empty) function = "substring";
            if (function == "split" && delimitor == string.Empty) return string.Empty;
            if (parameter.Element.Attribute("At") != null)
            {
                charat = parameter.Element.Attribute("At").Value.ToLower();
                if (!Int32.TryParse(charat, out numat)) numat = 0;
                else
                {
                    if (numat > textlength) numat = 0;
                }
            }
            if (parameter.Element.Attribute("Length") != null)
            {
                length = parameter.Element.Attribute("Length").Value.ToLower();
                if (!Int32.TryParse(charat, out numlength)) numlength = 0;
            }
            if (parameter.Element.Attribute("Value") != null) value = parameter.Element.Attribute("Value").Value;
            if (function == "replace" && value == string.Empty) return inputtext;
            if (function == "replace" || function == "substring")
            {
                if (numat == 0) return string.Empty;
            }
            var paruser = parameter.User;
            EZ_Builder.EZBManager.Log("USER {0}:{1}", "split", paruser);
            switch (function)
            {
                case "substring":
                    {
                        if (numlength == 0) return inputtext.Substring(numat - 1);
                        if (numat + numlength > textlength + 1) return inputtext.Substring(numat - 1);
                        return inputtext.Substring(numat - 1, numlength);
                    }
                case "replace":
                    {
                        if (numlength == 0) numlength = value.Length;
                        StringBuilder sb = new StringBuilder(inputtext);
                        StringBuilder sbvalue = new StringBuilder(value);
                        int j = 0;
                        for (int i = 1; i < numlength + 1; i++)
                        {
                            sb[numat + i - 2] = sbvalue[j];
                            j++;
                        }
                        return sb.ToString();
                    }
                case "split":
                    {
                        string[] ressplit = null;
                        ressplit = inputtext.Split(delimitor.ToCharArray());
                        for (int i = 1; i < ressplit.Length + 1; i++)
                        {
                            // Store results in SIML Var
                            parameter.User.Vars["ressplit_" + i.ToString()].Value = ressplit[i - 1];
                        }
                        return ressplit.Length.ToString();
                    }
                default:
                    {
                        return string.Empty;
                    }
            }
        }
     }
 }

You can easily in the adapter code get or set Synbot variables

for Var variables - parameter.User.Vars["variable name"].Value For User variables - parameter.User.Settings["variable name"].Value For Bot variables - parameter.Bot.Settings["variable name"].Value


ARC Pro

Upgrade to ARC Pro

Unlock the true power of automation and robotics by becoming a proud subscriber of Synthiam ARC Pro.