- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
好吧,我的问题是,在第一组 console.log(streamXXXX)
中,其中 XXXX 是各种变量,当我读取它们的值时,它们都按应有的方式读取,而在第二组他们读作未定义。这是范围问题吗?也许是异步问题?我尝试在每次发出网络请求时添加等待,但似乎没有任何效果,最有趣的部分之一是没有错误?
无论如何,下面列出了我的代码,以及使用我创建的示例机器人在 Repl 中测试它的链接。下面是该程序运行所需的库列表。谢谢!
if (!message.member.voiceChannel) return message.channel.send(`You do realize you have to be in a voice channel to do that, right ${message.author.username}?`)
if (!message.member.voiceConnection) message.member.voiceChannel.join().then(async connection => {
let streamURL = args.slice(1).join(" ")
let streamTitle = "";
let streamThumb = "";
let streamAuth = "";
let streamAuthThumb = "";
if (streamURL.includes("https://www.youtube.com") || streamURL.includes("https://youtu.be/") && !streamURL.includes(' ')) {
youtube.getVideo(streamURL)
.then(async results => {
let {
body
} = await snekfetch.get(`https://www.googleapis.com/youtube/v3/channels?part=snippet&id=${results.channel.id}&fields=items%2Fsnippet%2Fthumbnails&key=${ytapikey}`).query({
limit: 800
})
streamTitle = results.title
streamThumb = results.thumbnails.medium.url
streamAuth = results.channel.title
streamAuthThumb = body.items[0].snippet.thumbnails.medium.url
console.log(streamURL)
console.log(streamTitle)
console.log(streamThumb)
console.log(streamAuth)
console.log(streamAuthThumb)
})
.catch(console.error)
} else if (!streamURL.includes("https://www.youtube.com") || !streamURL.includes("https://youtu.be/")) {
youtube.searchVideos(streamURL)
.then(async results => {
let {
body
} = await snekfetch.get(`https://www.googleapis.com/youtube/v3/channels?part=snippet&id=${results[0].channel.id}&fields=items%2Fsnippet%2Fthumbnails&key=${ytapikey}`).query({
limit: 800
})
streamURL = results[0].url
streamTitle = results[0].title
streamThumb = results[0].thumbnails.default.medium.url
streamAuth = results[0].channel.title
streamAuthThumb = body.items[0].snippet.thumbnails.medium.url
}).catch(console.error)
} else {
return message.reply("I can only play videos from YouTube (#NotSponsored).")
}
console.log(streamURL)
console.log(streamTitle)
console.log(streamThumb)
console.log(streamAuth)
console.log(streamAuthThumb)
const stream = ytdl(streamURL, {
filter: 'audioonly'
})
const dispatcher = connection.playStream(stream)
dispatcher.on("end", end => {
return
})
let musicEmbed = new Discord.RichEmbed()
.setAuthor(streamAuth, streamAuthThumb)
.setTitle(`Now Playing: ${streamTitle}`)
.setImage(streamThumb)
.setColor(embedRed)
.setFooter(`${streamAuth} - ${streamTitle} (${streamURL}`)
await message.channel.send(musicEmbed)
})
Link to test out the program on a sample bot I made
您需要测试的模块:
discord.js
simple-youtube-api
node-opus
ffmpeg
ffbinaries
ffmpeg-binaries
opusscript
snekfetch
node-fetch
ytdl-core
再次感谢!
最佳答案
您的输出未定义
的原因是由于promise的工作方式以及您构建代码的方式:
let streamTitle = "";
// 1. Promise created
youtube.getVideo(streamURL)
// 2. Promise still pending, skip for now
.then(async results => {
// 4. Promise fulfilled
console.log(results.title); // 5. Logged actual title
});
console.log(streamTitle); // 3. Logged ""
您已经有了针对 snekfetch
请求的正确方法,只需将其也应用到 YT 请求即可:
let streamTitle = "";
const results = await youtube.getVideo(streamURL);
streamTitle = results.title;
console.log(streamTitle); // Desired output
关于javascript - 无法在 DiscordJS 中通过不同作用域传递变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59864044/
这个问题在这里已经有了答案: None of my discord.js guildmember events are emitting, my user caches are basically e
我想让嵌入消息像普通的音乐机器人一样,带有链接的嵌入消息可以点击 我希望我的内容是描述,突出显示是附加到它的链接,就像图片一样。这是我的嵌入 这是我的代码 if (command === 'test'
我正在不和谐上制作一个机器人,将来我会添加更多命令,我只是不明白参数的使用以及如果有像“;说一般( channel )嗨伙计们,我是一条文本(要发送的文本)”这样的空格,它会如何工作。它只会向将军发送
我试图让 Discord 机器人在收到 !getdata 命令时创建一个基本上是用户映射的数据库(每个用户一行,ID、昵称、头像 URL 等列)。 我已经到了数据库成功获取数据的地步,在本例中是用户名
client.on('guildMemberAdd', guildMemberAdd => { console.log("Guild Member joined"); }); 我知道我有一些菜鸟错
我的 DiscordJS 机器人有一个命令,其中包含一组 Imgur 链接。我希望它随机选择一个链接并将其嵌入到 channel 的消息中。我想我很接近。我如何从数组中调用它? if (command
我正在为我所在的服务器创建一个 discord.js 机器人,但在尝试向用户(刚刚被踢出,通知他们)发送 DM 之后,该机器人根本不会发送它,它会吐出一个错误, "UnhandledPromiseRe
所以我使用 discord.js v11.2.1 来编辑消息,但我无法简单地弄清楚。我正在尝试从不同的 channel 编辑消息,并且我正在使用 TextChannel 到 fetchMessage(
我的主要目标是能够运行一个小命令,如 $yoink ,这将采用聊天中最后发送的表情符号并将其制作成我可以下载的图像。我已经有了这样的东西,但是,它只检测常规图像和嵌入图像(使用它来使我的机器人具有 J
我不知道如何使用 DiscordJs 对 :one: Emoji 使用react。 通常在 Emoji 前面放置一个转义符\会为您提供 Emoji 的 ID,但使用\发生 与 :one: 或 one
我只想单独获取计数值,而不必与循环进行卷积。我相信这非常简单,但我所有常用的方法都让我被图书馆拒绝。 // Get our server const guild = bot.guilds.get('3
好吧,我的问题是,在第一组 console.log(streamXXXX) 中,其中 XXXX 是各种变量,当我读取它们的值时,它们都按应有的方式读取,而在第二组他们读作未定义。这是范围问题吗?也许是
我目前正在为我的机器人使用 Discord.js 和 Node,它以设定的时间间隔发送附件。我遇到了一个问题,有时附件没有完全加载(它们无限期地加载,只有当我点击“打开原件”时,我才能看到图像的前几个
我正在为我们的文本聊天 channel 开发一个表情机器人。我有这样的工作。目标是如果用户输入如下内容: ~拥抱@user 机器人会清理消息,将其删除,然后向聊天室发送表情: |乔拥抱简。哇! 这是有
我的代码: const Discord = require("discord.js"); module.exports.run = async (bot, message, args) => {
我的代码运行良好,我只需要检查用户是否具有角色,它会记录所有用户及其 ID、鉴别器和用户名 exc。我只是无法获得角色。各位可以帮忙吗? client.on('ready', () => { co
我想更新已发布嵌入的字段: message.embeds[0].fields[0] = "New content"; 但是嵌入消息没有更新。 我已尝试更新消息: function doAfakeEdi
因此在 discordjs 指南中显示您可以在斜杠命令中添加选项。但是没有函数说明如何在交互中获取选中的选项。 这是来自 discordjs.guide 的示例: 但是没有说明如何在交互中调用他们或回
我想在成员加入服务器时添加一个角色,但它说我没有那个权限。如何为机器人添加所有意图/权限? 我将只留下代码的开头。 // Require the necessary discord.js classe
我正在使用 DiscordJs V12.3.1,我正在尝试返回对旧消息使用react的用户列表。 (在机器人启动之前创建的)。 在我当前的实现中,我通过 ID 获取消息,映射所有反应,然后获取 rea
我是一名优秀的程序员,十分优秀!