【问题标题】:How can I check if my "variable" is a valid "ID"如何检查我的“变量”是否是有效的“ID”
【发布时间】:2016-07-22 05:28:36
【问题描述】:

API: https://github.com/satom99/litcord

如何检查我的值是否有效?

local cmd, serverID, channelID, arg = string.match(message.content, '(%S+) (%d+) (%d+) (%S+.*)')    
local server = client.servers:get('id', serverID)

serverID 是变量,我需要检查 serverID 是否为有效 ID 否则我会得到一个错误,服务器是一个 nil 值。

我正在尝试几天来完成一个命令,这是其中的一部分。 如果您需要更多内容,请告诉我,我会链接给您。

完整代码:

client:on(
    'message',
    function(message)
      local userID = message.author.id
      local cmd, serverID, channelID, arg = string.match(message.content, '(%S+) (%d+) (%d+) (%S+.*)')
      local server = client.servers:get('id', serverID)
      local channel = server.channels:get('id', channelID)
      local cmd = cmd or message.content
      if (cmd == "!say") and message.parent.is_private then 
        if (userID == "187590758360940545") then

          if not server then
            return
          end

          if (server == servers) then

            if (channel == channels) then
              message.channel:sendMessage(arg)
            else
              message:reply("I don't know this channel.")
              return
            end

            message:reply("I don't know this server.")

          end

        else
          message:reply(":sob: Stop!!!!")
        end
      end
    end
)

以及如何让它在我想要的频道中写入函数 message.channel:sendMessage(arg) 这就像消息:回复 它会回复消息的来源。

【问题讨论】:

  • 您是否需要检查message.content 的格式是否正确,或者client.servers:get() 是否接受了您的serverID
  • Skype?我猜它的 client.servers:get() 如果我通过 Skype 与您联系并链接所有内容,我可以更好地解释它。它应该检查 serverID 是否被我的命令接受。
  • 这里的服务器是什么:if (server == servers)?以下行中的频道也是如此。顺便说一句,你不需要括号。
  • if not server then return end 这应该在您索引server 之前完成!不是 4 行之后 :-)
  • local server = client.servers:get('id', serverID) -- Unter dieser linie if not server then return end

标签: api lua libraries luvit


【解决方案1】:

让我们暂时忘记验证 serverID。

当然,您应该始终处理client.servers:get('id', serverID) 退回nil 的情况。

以某种方式简单地验证 serverID 并希望您能得到一个有效的服务器句柄是不可行的。

所以要么使用 Luas 错误处理功能https://www.lua.org/manual/5.3/manual.html#2.3

或者简单地用 if 语句检查server,这样你就不会使用server,如果它是nil

简化:

local server = client.servers:get('id', serverID)
if not server then
  print("No server with id '" .. serverID .. "' found.")
  return -- or do something clever here, show a message box or whatever...
end
-- server won't be nil from here

除非您确定没有其他方法可以返回 nil,否则您应该正确处理这种可能性。

【讨论】:

  • 和你的Skype :o? Dann füg einfach ein i hinzu nach meinem ersten jep und schon hast du mein skype name wenn du den anderen teil dann zusammen fügst。 Ich schreibe es so damit man es nicht so leicht herausfindet。
  • Der Sinn von Stackoverflow besteht darin Fragen so zu stellen, dass das Problem daraus ersichtlich wrd und Antworten zu liefern die jedem weiterhelfen der das gleiche Problem hat。 SO ist keine Skype-Vermittlung。 Bearbeite deine Frage 所以,dass das was du mir auf Skype erzählen willst drin steht。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-16
  • 1970-01-01
  • 1970-01-01
  • 2014-09-01
  • 2013-06-21
  • 1970-01-01
相关资源
最近更新 更多