javascript - Discord.js V12 如何从 args 中删除提到的用户?
问题描述
我正在尝试发出注册命令,用法是$signup <TeamName> @user
. 该命令应该给执行命令的用户和@user(提到的人)一个“参与者”角色,它会创建另一个具有 TeamName 的角色并将其提供给他们。报名人数上限为 32 支队伍(共 64 人)。我当前的命令是这样的,它没有创建角色“TeamName”的东西,因为我真的不知道该怎么做。
client.on('message', async message => {
if (message.content.startsWith(prefix + "signup")) {
if (message.channel.id == '730099836451422331') {
let teamMate = message.mentions.members.first()
const teamName = message.content.slice(prefix.length + 7).split(/ +/)
let testRole = message.guild.roles.cache.find(role => role.name == "Participant")
let testChannel = message.guild.channels.cache.find(channel => channel.name == "signup")
let guild = await message.guild.members.fetch();
let memberCount = testRole.members.size;
if(memberCount === 64) return message.channel.send("All spots have been filled. Thank you.")
if(!teamMate) return message.channel.send("Please mention your teammate! `$signup @user`")
if (message.member.roles.cache.some(role => role.name === 'Participant')) return message.channel.send("You already have the role.")
if (teamMate.roles.cache.some(role => role.name === 'Participant')) return message.channel.send("That teammate already has the role! Pick someone else!")
teamMate.roles.add(testRole)
message.member.roles.add(testRole)
message.guild.roles.create({data:{
name: teamName
}})
解决方案
现在你有那个->
let teamMate = message.mentions.members.first()
const teamName = message.content.slice(prefix.length + 7).split(/ +/)
你可以改变如果
const msgArr = message.content.split(' ');
const arg = msgArr.slice(number).filter(val => val !== '')
const teamName = arg.join(' ')
其中数字是您要删除的 args 数量,例如您有注册用户 teamname,因此您需要删除 2 个 args,您将获得其余内容作为团队的名称
推荐阅读
- r - 如何分隔从 Excel 电子表格导入的列以创建多个单独的列表
- php - 从收藏夹中删除产品时出错(我自己创建了愿望清单系统)
- google-app-engine - 如何在 gcp 上部署 angular-spring-postgres 应用程序?
- openapi - OpenAPI - 参数名称值可以包含“>”字符吗?
- excel - VBA switch 语句(或字典)根据第一个字符填充相邻单元格中的值
- html - 为多行文本设置底部边框距离(或阴影)
- python - 为什么我在重塑后得到“ValueError:x 和 y 必须具有相同的第一维,但具有形状”?
- python - 如何重塑一个numpy数据表?
- oracle - Delphi 和 Oracle - 无法访问过滤器中的字段“TRANSACTIONS”
- c# - USB 应用程序发送串行到文本