关于(可能)基本问题的抱歉,但我试图拆分一个字符串,并将字符串的一部分设为public,所以我可以稍后在另一个类的表单中调用它。
这是一个简单的Skype聊天机器人,它会读取发送给我的消息进行处理。但是,我试图这样做,如果有人发出一个带有两个单词的命令 - 例如!命令名 - 将执行!命令命令,稍后在表单中,我将使用拆分字符串的第二部分来处理它。这是我正在尝试的 -
分割和阅读信息 -
public void skype_MessageStatus(ChatMessage msg, TChatMessageStatus status)
{
if (msg.Body.IndexOf(trigger) == 0 && TChatMessageStatus.cmsReceived == status)
{
string command = msg.Body.Remove(0, trigger.Length).ToLower();
var splitted = command.Split(' ');
string command1 = splitted[0];
string name = splitted[1];
msg.Chat.SendMessage(nick + ProcessCommand(command1));
}
}
这个聊天机器人中还有其他几个命令,所以有一个包含不同结果的开关 - 至于!命令,我有 -
case "command":
result = command();
break;
最后 -
private string command()
{
WebRequest.Create("API I have" + name);
new WebClient().DownloadString("API I have" + name);
}
我希望能够在这里使用'name',来自拆分消息。谢谢,感谢任何帮助。
答案 0 :(得分:0)
首先,定义要用于解析入站邮件的模式。看起来你有多个命令可能有不同的参数,但所有命令都采用以下形式:
![Command String] [Command Parameters]
所以你需要一个代表它的类:
public class ChatCommand
{
private string _command;
public string Command { get { return _command; } }
private string _parameters;
public string Parameters { get { return _parameters; } }
public ChatCommand(string command, string parameters) {
_command = command;
_parameters = parameters;
}
}
从那里,您需要调整发布的方法,使其如下所示。请注意,我们现在告诉split在有2个字符串要返回时停止拆分(基本上只拆分第一个空格)。
public void skype_MessageStatus(ChatMessage msg, TChatMessageStatus status)
{
if (msg.Body.IndexOf(trigger) == 0 && TChatMessageStatus.cmsReceived == status)
{
string command = msg.Body.Remove(0, trigger.Length).ToLower();
var splitted = command.Split(new [] { ' ' }, 2);
var command1 = new ChatCommand(splitted[0], splitted[1])
msg.Chat.SendMessage(nick + ProcessCommand(command1));
}
}
我们将参数保留在一个字符串中而不是将它们拆分的原因是因为这使您可以灵活地以不同方式格式化不同命令的参数。例如,您可能希望有一个命令来发送图片,第二个参数是一个URL,或者它可能是JSON数据或二进制文件数据。
现在您的ProcessCommand函数看起来像这样:
public void ProcessCommand(ChatCommand command) {
switch(command.Command) {
case "command":
//I am code specific to that command and I should know what is contained in the Parameters property of the command
Console.WriteLine("Name is " + command.Parameters);
break;
}
}
然后你就完成了!您可以使用您想要的任何参数添加更多命令。