Lua 中的微笑机器人:匹配文本

Posted

技术标签:

【中文标题】Lua 中的微笑机器人:匹配文本【英文标题】:Smiles bot in Lua: matching text 【发布时间】:2022-01-17 22:27:40 【问题描述】:

这是我的机器人,在游戏聊天中复制表情符号。

它复制的微笑保存在名为“表情”的表格中。如果有人写“:)”,机器人会写“:)”等等

循环内的代码是这样的:如果有人写,例如,>:)”,你必须复制脚本“>:)”,而不仅仅是“:)”

CreateFrameRegisterEventSetScriptSendChatMessage 是游戏内置的 Lua API

local emoticons =  
    ":)", "(:", ":))", ">:)", "0:)", ":D", ":]", ":)))", "=]", "?_?", "+.+", ":P", ":3", "^^", "roar", ":V", "D:", ":C", ".D", ".)", "o_o", 
    "^-^", ":PPP", ":DDD", ":D:D:D", ":DDDD", ":D:D:D:D", ":DDDDD", ":d", ":L", "<O>_<O>", "o/", "+_+", "?_?", "*0*", ":", ";)", ":))))", "o.o", "<.<''", ":|", 
    ":-)", "^^^^", ":D:D:D:D:D:D", ":D :D :D", "^^^", ":c", ";]", ":9", ">:|", ">.<", ";3", ";P", "T_T", ":3c", ":)))))", 
    "^^^^^" 

local f = CreateFrame("Frame")
f:RegisterEvent("CHAT_MSG_GUILD")
f:SetScript("OnEvent", function(self, event, text, playerName, _, channelName, playerName2, _, _, channelIndex)
    local msg
    local n = 0 
        for x, key in ipairs(emoticons) do
            local l = string.len(emoticons[x])
                if (string.sub(text, -l) == emoticons[x]) then
                    if (l > n) then
                        msg = emoticons[x]
                        n = l
                    end
                end
        end
    if (msg) and (playerName ~= UnitName("player")) then
        if (event == "CHAT_MSG_GUILD") then SendChatMessage(msg, "GUILD", nil, channelIndex) end
    end
end)
    

有什么办法可以改善吗?例如,如果有人写

“^^^^^^”

机器人复制

“^^^^^”

这将与存储在表中的“^”少一个相同

我的目标是,如果有人写,例如“^^^^^^”,并且没有在表格中注册,脚本将不会响应

【问题讨论】:

还有为什么你有 ":D :D :D" ?简单地回应三个单曲似乎没有区别:D。这无缘无故地使事情复杂化 如何处理消息中的多个表情符号?你似乎回应了最后一场比赛 【参考方案1】:

你最好学习如何使用string.gmatch

例如,假设您在表情表中只存储了一个':D' 实例。您可以遍历匹配项并以实物回应。这是一个小例子:

local text = ':D:D:D'
local count = 0
for w in string.gmatch(text, ':D') do
   count = count + 1
end
if count > 0 then
    local response = ''
    for i = 1, count do
        response = response .. ':D'
    end
    print(response) -- prints ':D:D:D'
end

这并不能处理所有情况,但希望它可以帮助您入门 :D

【讨论】:

以上是关于Lua 中的微笑机器人:匹配文本的主要内容,如果未能解决你的问题,请参考以下文章

匹配 csv 文件中的文本,用于 X 首行和最后 X 个结果,并在 lua 中获取值

vivo 敏感词匹配系统的设计与实践

第六章第一节Lua编程基础

Jimp 错误:未找到匹配的构造函数重载

Android | 教你如何用三十分钟在安卓上开发一个微笑抓拍神器

Android | 教你如何用三十分钟在安卓上开发一个微笑抓拍神器