android - Discord bot 在 ios 与 android 和桌面上的功能不同
问题描述
我有一个机器人可以在我的个人 Android 手机/移动设备上的 Discord 和 Discord 桌面应用程序上完美运行……但在 iPhone/IOS 上执行的完全相同的步骤不起作用。我几乎没有关于 IOS 与 Android 或 Windows 有何不同的背景,因为我从未拥有过 Apple 产品......
首先,这与查询转义值有关。有人输入了一个值(我正在制作的 TCG 机器人的卡名),例如“Drago's Fury”。' 在桌面和 android 上被转义,卡片标题放在双引号中,而不是在 IOS 版本上放在单引号中。因此,当将该卡的名称与卡的主列表进行比较时,无法找到它。
这是我如何通过循环获得所有卡名匹配的主列表...
var sql = `SELECT * FROM ??`
var inserts = ['cardsmaster']
con.query(sql, inserts, (error, rows, fields) => {
let cardsList = []
for (var i in rows) {
cardsList.push(rows[i].name)
}
当询问用户要添加哪些卡片时,将运行以下代码。收到回复并通过循环运行以匹配主列表...
async function addToDeckQuestion(){
const agree = "✅"
const disagree = "❌"
let msg = await message.author.send(`Would you like to add cards to ${userdeckname}? Please react with one of the following...`)
await msg.react(agree)
await msg.react(disagree)
const filter = (reaction, user) => {
return ['✅', '❌'].includes(reaction.emoji.name) && user.id === message.author.id;
};
const reply = await msg.awaitReactions(filter, { max: 1 })
.catch(console.error);
const addtodeck = reply.first()
return addtodeck
}
let addtodeck = await addToDeckQuestion();
if (addtodeck.emoji.name == agree){
message.author.send("You have agreed to add cards to this new deck.")
async function cardExists() {
let msg = await message.author.send(`Please provide the cardnames that you would like to add to '${userdeckname}'.\n\n**NOTE:** Please separate each card with a comma and space, like so "Pact of Darkness, Aquos Slam, Karmic Balance"`)
const filter = m => m.author.id === message.author.id
const reply = await msg.channel.awaitMessages(filter, { max: 1 })
.catch(console.error);
let cardsToAdd = await reply.first()
let usercardnamearray = await cardsToAdd.content.split(", ")
let matchedcards = []
let unmatchedcards = []
for (let i = 0; i < usercardnamearray.length; i++) {
usercardnamearray[i] = usercardnamearray[i].replace(/'/gi, "\'");
let found = cardsList.indexOf(`${usercardnamearray[i]}`)
console.log(found)
if (found >= 0) {
matchedcards.push(usercardnamearray[i])
} else if (found == -1){
unmatchedcards.push(usercardnamearray[i])
}
}
console.log('Finished!')
return await [matchedcards, unmatchedcards]
}
let cards = await cardExists();
let matchedcards = await cards[0]
let unmatchedcards = await cards[1]
if (unmatchedcards.length >= 1){
message.author.send(await `The card **${unmatchedcards.join(", ")}** could **NOT** be added. Please check your spelling, capitalization and enter just these card names again!`)
}
因此,例如,Android 桌面上的用户将按照此图像中描述的步骤进行操作
下面的图像来自控制台记录上面代码中的“找到”变量。
这是命令在桌面和 Android 上控制台登录的方式:
这就是命令在 IOS 上的控制台登录方式:
我希望这两个版本都能以相同的方式对 javascript 做出反应,但是这方面的某些东西不能很好地与 IOS 配合使用。我注意到的唯一区别是 Drago's Fury 在桌面和 Android 中被放在双引号中,但在 IOS 上没有。我不确定如何解决这个问题,所以我的 IOS 用户不会完全被排除在使用机器人之外。
关于为什么相同的信息在 IOS 中的解释与其他任何东西不同的任何想法?在此先感谢您的帮助!
解决方案
推荐阅读
- wpf - WPF 中的 Web 浏览器控件是否足以支持现代浏览器功能?
- charts - Power BI 中的自定义 x 轴值
- javascript - xmlhttprequest.open() 不应重新加载页面或直接到请求的 URL
- javascript - Reactjs - 路由期间道具不改变
- c - 如何检测用户是否使用逗号(以所需格式)插入数据?
- react-native - 使用 SwitchNavigator 导航时的动画
- java - 谷歌的 Firebase UI 身份验证失败并显示消息(代码:10 消息:10)
- mongodb - 在提供的多个日期范围之间获取 mongo 结果
- r - ggplot() 图形输出链接断开 ./static/post/
- android - 任务 ':app:mergeDebugResources' 的 Jenkins 执行失败,找不到文件