Spotify Messenger Bot

没有更多的la脚派对。

您是否去过一场音乐很烂的聚会? 我们都去过那里。 一个人控制音乐,他们不会通过您的AUX。

也许您和您的朋友想玩弄陌生人,或者谁是DJ-ing真的在杀人。 我发现这个问题太多次了,所以我决定对此做些事情。

技术概述

我建立了一个机器人,该机器人可以让多个人通过Facebook Messenger控制音乐。 我选择Spotify + Facebook是因为它们的API和广泛的用途。 我没有使用Messenger API构建Messenger机器人,因为这需要人们向Facebook页面发送消息。 这不能工作有两个原因:

  1. 每个漫游器对于用户帐户都必须是唯一的
  2. 无法将页面添加到群聊中

自从我在该项目中使用Node.js以来,我唾手可得了各种节点模块。 我使用的两个节点模块包括Facebook Chat API和Spotify Web API。 他们俩都处理身份验证,并且Spotify Web API执行了搜索。

现在,为了播放歌曲,我使用了称为Shpotify的东西,这是Spotify的命令行界面。 本质上,我将Facebook Messenger变成了终端。

深入研究代码

播放歌曲非常简单。 您可以向机器人发送消息“播放”,它将使用Spotify API进行搜索,并播放第一个结果。

该代码正在执行的是从用户消息中获取第一个搜索结果并获得歌曲的唯一URI。 然后,它运行命令spotify play uri 然后Shpotify从那里开始播放歌曲。

很简单,对不对? 当我尝试排队播放歌曲时,它变得很有趣。 我决定将所有排队歌曲的URI保留在数组中,并追加新歌曲并弹出旧歌曲。 但是,播放下一首歌曲时出现了一个问题。

我想我可以设置一个功能来每秒运行一次spotify status

这将提供有关歌曲名称,艺术家姓名,专辑以及最重要的是歌曲时间状态的信息。 例如,时间状态可以是2:36/3:04

我首先检查时间是否足够,知道何时播放下一首歌曲。 如果命令spotify status返回时间状态为3:04/3:04则表明歌曲已结束。 这是有道理的,但有时会稍有延迟。 如果状态检查甚至落后一秒钟,则歌曲将在时间状态完成之前结束。 当没有歌曲播放时, spotify status默认为“已暂停”。 因此,为了解决延迟问题,我只是检查了这首歌是否已暂停播放下一首歌。

一切都很好,但不幸的是,它引入了另一个暂停和播放音乐的错误。 发生的事情是当用户暂停时,它将播放下一首歌曲,因为我正在检查当前歌曲是否已暂停。 我通过设置暂停和播放的间隔超时来处理此问题,以便维护队列数组,并且用户可以暂停而不跳到下一首歌曲。

结果和我会做的不同

我打算实现的功能已经实现。 我想构建一个可以播放和排队歌曲的Spotify机器人,它确实做到了这一点。 虽然,在实际的群聊中测试自动程序时,我需要添加最新功能。 我对每个消息都做出了回应,这在本地开发中并不是一个问题,但是在一个小组中确实可以。 即使没有将其作为Spotify命令定向,该漫游器也会响应每条消息。 为了解决这个问题,我做到了,因此您必须在致电bot之前键入“ @spotify”,因此消息如下所示: @spotify play

如果要再次执行此操作,我将研究可以运行Spotify命令的不同方式。 Shpotify很棒,但我发现它有些局限。 例如,Shpotify仅在Mac上可用,因此尽管任何用户都可以向漫游器发送消息,但主机必须使用Mac。

前进并得出结论

我希望对该项目进行一些改进,包括培训wit.ai或api.ai等NLP以处理各种类型的用户输入。 这样一来,代码就不再是一堆“ if”语句,而更像是一个智能机器人。

我还想实现更多功能。 这包括播放列表播放,智能搜索甚至创建播放列表。 这可能会很棘手,但是使用Spotify API都可以实现。

现在,您终于可以播放整周一直在收听的歌曲。 或者,您可以向主持人展示什么是真正的音乐。 不管它是什么,我希望这个机器人将在您的所有同伴聚会中证明是有用的。

这是一个演示: