如何为反应添加投票计数?
How do I add a vote count to reaction?
您好,我正在研究音乐齿轮,我正在弄清楚如何进行简单的跳过投票。
我想要实现的是,当 4 个成员对跳过反应做出反应时 if control == 'skip':
⏩ 它会跳过这首歌。
这是我正在使用的内容,可以让您更好地了解我在这里尝试做的事情。
async def buttons_controller(self, guild, current, source, channel, context):
vc = guild.voice_client
vctwo = context.voice_client
for react in self.buttons:
await current.add_reaction(str(react))
def check(r, u):
if not current:
return False
elif str(r) not in self.buttons.keys():
return False
elif u.id == self.bot.user.id or r.message.id != current.id:
return False
elif u not in vc.channel.members:
return False
elif u.bot:
return False
return True
while current:
if vc is None:
return False
react, user = await self.bot.wait_for('reaction_add', check=check)
control = self.buttons.get(str(react))
if control == 'rp':
if vc.is_paused():
vc.resume()
else:
vc.pause()
if control == 'skip':
total_votes = len(control)
if total_votes >= 3:
vc.stop()
await channel.send('Skip vote passed, skipping song...')
if control == 'stop':
mods = get(guild.roles, name="Mods")
for member in list(guild.members):
if mods in member.roles:
await context.invoke(self.bot.get_command("stop"))
return
else:
await channel.send('Only a mod can stop and clear the queue. Try skipping the song instead.', delete_after=5)
if control == 'vol_up':
player = self._cog.get_player(context)
vctwo.source.volume += 2.5
if control == 'vol_down':
player = self._cog.get_player(context)
vctwo.source.volume -= 2.5
if control == 'thumbnail':
await channel.send(embed=discord.Embed(color=0x17FD6E).set_image(url=source.thumbnail).set_footer(text=f"Requested By: {source.requester} | Video Thumbnail: {source.title}", icon_url=source.requester.avatar_url), delete_after=10)
if control == 'tutorial':
await channel.send(embed=discord.Embed(color=0x17FD6E).add_field(name="How to use the music controller?", value="⏯ - Pause\n⏭ - Skip\n➕ - Increase Volume\n➖ - Increase Volume\n - Get Thumbnail\n⏹ - Stop & Leave\nℹ - Queue\n❔ - Display help for music controls"), delete_after=10)
if control == 'queue':
await self._cog.queue_info(context)
try:
await current.remove_reaction(react, user)
except discord.HTTPException:
pass
我正在查看这部分代码 if control == 'skip':
反应时会跳过歌曲播放,或者如果没有歌曲排队则停止播放歌曲。
vc.stop()
这指示播放器停止,如果有另一首歌曲排队,它将播放下一首歌曲,否则如果没有更多歌曲排队则停止。
我试过这个功能,但对我不起作用。
if control == 'skip':
total_votes = len(control)
if total_votes >= 3:
vc.stop()
await channel.send('Skip vote passed, skipping song...')
如果有人能告诉我哪里出了问题,我将不胜感激。一个例子或一些关于这方面的输入会很棒。
您对总票数的检查检查了错误的变量并返回了一个常量值:
if control == 'skip':
total_votes = len(control)
if total_votes >= 3:
vc.stop()
await channel.send('Skip vote passed, skipping song...')
control
在此 if
中定义为 'skip'
(因为否则 control == 'skip'
不会计算为真)。因此,len(control)
为 4(字符串 'skip'
中的 4 个字符)。要检查该类型的实际反应数,您需要检查以下行中返回的 reaction object:
react, user = await self.bot.wait_for('reaction_add', check=check)
react
是反应对象,API 声明它拥有属性 count
表示反应已发送的次数。使用此方法,将行 total_votes = len(control)
替换为 total_votes = react.count
以获得已发送反应的实际次数。
您好,我正在研究音乐齿轮,我正在弄清楚如何进行简单的跳过投票。
我想要实现的是,当 4 个成员对跳过反应做出反应时 if control == 'skip':
⏩ 它会跳过这首歌。
这是我正在使用的内容,可以让您更好地了解我在这里尝试做的事情。
async def buttons_controller(self, guild, current, source, channel, context):
vc = guild.voice_client
vctwo = context.voice_client
for react in self.buttons:
await current.add_reaction(str(react))
def check(r, u):
if not current:
return False
elif str(r) not in self.buttons.keys():
return False
elif u.id == self.bot.user.id or r.message.id != current.id:
return False
elif u not in vc.channel.members:
return False
elif u.bot:
return False
return True
while current:
if vc is None:
return False
react, user = await self.bot.wait_for('reaction_add', check=check)
control = self.buttons.get(str(react))
if control == 'rp':
if vc.is_paused():
vc.resume()
else:
vc.pause()
if control == 'skip':
total_votes = len(control)
if total_votes >= 3:
vc.stop()
await channel.send('Skip vote passed, skipping song...')
if control == 'stop':
mods = get(guild.roles, name="Mods")
for member in list(guild.members):
if mods in member.roles:
await context.invoke(self.bot.get_command("stop"))
return
else:
await channel.send('Only a mod can stop and clear the queue. Try skipping the song instead.', delete_after=5)
if control == 'vol_up':
player = self._cog.get_player(context)
vctwo.source.volume += 2.5
if control == 'vol_down':
player = self._cog.get_player(context)
vctwo.source.volume -= 2.5
if control == 'thumbnail':
await channel.send(embed=discord.Embed(color=0x17FD6E).set_image(url=source.thumbnail).set_footer(text=f"Requested By: {source.requester} | Video Thumbnail: {source.title}", icon_url=source.requester.avatar_url), delete_after=10)
if control == 'tutorial':
await channel.send(embed=discord.Embed(color=0x17FD6E).add_field(name="How to use the music controller?", value="⏯ - Pause\n⏭ - Skip\n➕ - Increase Volume\n➖ - Increase Volume\n - Get Thumbnail\n⏹ - Stop & Leave\nℹ - Queue\n❔ - Display help for music controls"), delete_after=10)
if control == 'queue':
await self._cog.queue_info(context)
try:
await current.remove_reaction(react, user)
except discord.HTTPException:
pass
我正在查看这部分代码 if control == 'skip':
反应时会跳过歌曲播放,或者如果没有歌曲排队则停止播放歌曲。
vc.stop()
这指示播放器停止,如果有另一首歌曲排队,它将播放下一首歌曲,否则如果没有更多歌曲排队则停止。
我试过这个功能,但对我不起作用。
if control == 'skip':
total_votes = len(control)
if total_votes >= 3:
vc.stop()
await channel.send('Skip vote passed, skipping song...')
如果有人能告诉我哪里出了问题,我将不胜感激。一个例子或一些关于这方面的输入会很棒。
您对总票数的检查检查了错误的变量并返回了一个常量值:
if control == 'skip':
total_votes = len(control)
if total_votes >= 3:
vc.stop()
await channel.send('Skip vote passed, skipping song...')
control
在此 if
中定义为 'skip'
(因为否则 control == 'skip'
不会计算为真)。因此,len(control)
为 4(字符串 'skip'
中的 4 个字符)。要检查该类型的实际反应数,您需要检查以下行中返回的 reaction object:
react, user = await self.bot.wait_for('reaction_add', check=check)
react
是反应对象,API 声明它拥有属性 count
表示反应已发送的次数。使用此方法,将行 total_votes = len(control)
替换为 total_votes = react.count
以获得已发送反应的实际次数。