每当新用户加入服务器(行会)时,我都希望向“欢迎”文本频道发送问候消息。
我面临的问题是,当我找到所需的频道时,我将收到类型为GuildChannel
的频道。
由于GuildChannel
没有send()
功能,因此无法发送消息。但是我找不到找到TextChannel
的方法,所以我被困在这里。
如何到达TextChannel
,以便能够使用send()
消息?在我目前正在使用的代码下方:
// Get the log channel (change to your liking)
const logChannel = guild.channels.find(123456);
if (!logChannel) return;
// A real basic message with the information we need.
logChannel.send('Hello there!'); // Property 'send' does not exist on type 'GuildChannel'
我正在使用discord.js的11.3.0版本
答案 0 :(得分:3)
感谢GitHub issue,我找到了解决问题的方法。
我需要使用Type Guard来缩小正确的类型。
我的代码现在是这样:
// Get the log channel
const logChannel = member.guild.channels.find(channel => channel.id == 123456);
if (!logChannel) return;
// Using a type guard to narrow down the correct type
if (!((logChannel): logChannel is TextChannel => logChannel.type === 'text')(logChannel)) return;
logChannel.send(`Hello there! ${member} joined the server.`);
答案 1 :(得分:0)
我这样做:
let channel = client.guilds.get('your-guild-id').channels.get('your-channel-id');
channel.send("it worked");
(客户端是不和谐的客户端)。如果将find
更改为get
并将频道ID放在一些单引号中,则您的代码应该可以正常工作。好吧,它对我有用。
答案 2 :(得分:0)
也许这可以帮助您?
代码:
client.on('guildMemberAdd', member => {
let channel = member.guild.channels.find('name', 'welcome');
let memberavatar = member.user.avatarURL
if (!channel) return;
let embed = new Discord.RichEmbed()
.setColor('RANDOM')
.setThumbnail(memberavatar)
.addField(':bust_in_silhouette: | name : ', `${member}`)
.addField(':microphone2: | Welcome!', `Welcome to the server, ${member}`)
.addField(':id: | User :', "**[" + `${member.id}` + "]**")
.addField(':family_mwgb: | Your are the member', `${member.guild.memberCount}`)
.addField("Name", `<@` + `${member.id}` + `>`, true)
.addField('Server', `${member.guild.name}`, true )
.setFooter(`**${member.guild.name}**`)
.setTimestamp()
channel.sendEmbed(embed);
});
答案 3 :(得分:0)
也许对于仍在寻找对我有用的答案的后来者来说
class User:
def __init__(self, first, last, pay):
self.first = first
self.last = last
self.pay = pay
def email(self):
return '{}.{}@company.com'.format(self.first, self.last)
def fullname(self):
return '{} {}'.format(self.first, self.last)
user1 = User
def add_user():
first = input('First name: ')
user1.first = first
last = input('Last name: ')
user1.last = last
pay = int(input('Pay: '))
user1.pay = pay
add_user()
print(user1.fullname(User))
答案 4 :(得分:0)
您可以在调用 send
之前使用 GuildChannel#isText()
方法键入 guard。
示例:
if (channel.isText()) {
await channel.send('...');
}
或者:
if (!channel.isText()) return;
await channel.send('...');