python - Spotify discord.py api 的 if & else 有问题
问题描述
对于代码的最后一点elif isinstance(activity == None, Spotify)
&await ctx.send(f'{user.name} is not listening to anything :shrug:')
运行时没有错误代码,但是如果我的 spotify 没有播放它在我输入命令时不会打印它
完整代码如下:
@commands.command()
async def spot(self, ctx, user: discord.Member = None):
if user == None:
user = ctx.author
pass
if user.activities:
for activity in user.activities:
if isinstance(activity, Spotify):
embed = discord.Embed(
title=f"{user.name}'s Spotify",
description="Currently listening to {}".format(activity.title),
color=user.color)
embed.set_thumbnail(url=activity.album_cover_url)
embed.add_field(name="Artist",
value=activity.artist,
inline=False)
embed.add_field(name="Album",
value=activity.album,
inline=False)
m1, s1 = divmod(int(activity.duration.seconds), 60)
song_length = f'{m1}:{s1}'
embed.add_field(name="Song Duration",
value=song_length,
inline=True)
embed.add_field(name="Track Link",
value=f"[{activity.title}](https://open.spotify.com/track/{activity.track_id})",
inline=True)
embed.set_footer(text=f'Requested by : {ctx.author}',
icon_url=ctx.author.avatar_url)
await ctx.send(embed=embed)
elif isinstance(activity == None, Spotify):
await ctx.send(f'{user.name} is not listening to anything :shrug:')
解决方案
我复制了您的代码并为自己尝试了。更改线路elif isinstance(activity == None, Spotify):
为else:
我修复它。
但是我注意到您的代码中有一个错误,它会检查用户的每个活动,并且对于每个活动都会发送一条消息。因此,当您收听 Spotify 时,它会说您正在收听而不是同时收听。因此,我重新编写了您的代码,因此它首先检查是否存在 Spotify 活动,然后根据该活动发送消息。
这是重新编写的代码:
@commands.command()
async def spot(self, ctx, user: discord.Member=None):
user = user if user else ctx.author
activity = None
for act in user.activities:
if isinstance(act, Spotify):
activity = act
break
if activity:
embed = discord.Embed(
title=f"{user.name}'s Spotify",
description="Currently listening to {}".format(activity.title),
color=user.color
)
embed.set_thumbnail(url=activity.album_cover_url)
embed.add_field(
name="Artist",
value=activity.artist,
inline=False
)
embed.add_field(
name="Album",
value=activity.album,
inline=False
)
m1, s1 = divmod(int(activity.duration.seconds), 60)
song_length = f'{m1}:{s1}'
embed.add_field(
name="Song Duration",
value=song_length,
inline=True
)
embed.add_field(
name="Track Link",
value=f"[{activity.title}](https://open.spotify.com/track/{activity.track_id})",
inline=True
)
embed.set_footer(text=f'Requested by : {ctx.author}', icon_url=ctx.author.avatar_url)
await ctx.send(embed=embed)
else:
await ctx.send(f'{user.name} is not listening to anything :shrug:')
推荐阅读
- prestashop - 如何在管理产品页面中添加自定义输入字段
- nuget - Nuget 推送命令 不断询问 MS 凭据
- docker - 如何在 Dockerfile 中使用本地文件或远程(有条件地)检索它?
- django - 如何在列表视图中获取两个查询集
- java - 扫描文件并收集匹配模式的完整单词
- javascript - 用于排除一些与起始字符串匹配的子文件夹的正则表达式
- html - 为什么我的页脚也有来自另一个容器的链接?
- c++ - 无法使用 INADDR_ANY 通过 WiFi 接收单播数据包
- javascript - jQuery层在底部附加标签而不是围绕它的项目
- python-3.x - 积分函数