python - Discord.py 破坏静音命令
问题描述
我的静音命令完全坏了它没有添加静音角色,发送嵌入等。我不知道它有什么问题,因为它以前使用相同的确切代码工作。任何帮助或为什么它不起作用的原因?我已经检查了两次我对编码有点陌生,但这让我非常困惑。
@commands.command(name="mute")
async def mute(self, ctx, user: discord.Member = None, time: str = None):
if user is None:
em = discord.Embed(color = 0x3498db)
em.add_field(name = "Insufficient arguments" , value = "Try again! Format `;mute @user/id <time>`")
await ctx.send(embed = em)
elif ctx.author.top_role.position <= user.top_role.position and ctx.guild.owner.id != ctx.author.id:
em = discord.Embed(color = 0x3498db)
em.add_field(name = "An Error Occurred." , value = "I cannot mute this user because they have the same or an higher role than me.")
await ctx.send(embed = em)
else:
guild = ctx.guild
mute_role = None
for role in guild.roles:
if role.name.lower() == "muted":
mute_role = role
break
if mute_role in user.roles:
em = discord.Embed(color = 0x3498db)
em.add_field(name = "An Error Occurred!" , value = "User is already muted.")
await ctx.send(embed = em)
else:
if not mute_role:
em = discord.Embed(color = 0x3498db)
em.add_field(name = "Mute role not found." , value = "> Creating mute role.")
await ctx.send(embed = em)
mute_role = await create_mute_role(guild)
if time is None:
await user.add_roles(mute_role)
em = discord.Embed(color = 0x3498db)
em.add_field(name = f"Mute Successful!" , value = f"Target: {user.mention} \nModerator: {ctx.author}")
await ctx.send(embed = em)
else:
time_unit = None
parsed_time = None
if "s" in time:
time_unit = "seconds"
parsed_time = time[0:(len(time) - 1)]
elif "m" in time:
time_unit = "minutes"
parsed_time = time[0:(len(time) - 1)]
elif "h" in time:
time_unit = "hours"
parsed_time = time[0:(len(time) - 1)]
else:
time_unit = "minutes" # default to minutes if user doesn't provide a time unit
parsed_time = time[0:len(time)]
await user.add_roles(mute_role)
em = discord.Embed(color = 0x3498db)
em.add_field(name = f"Mute Successful!" , value = f"Target: {user.mention} \nTime: {pased_time} {time_unit} \nModerator: {ctx.author}")
await ctx.send(embed = em)
if time_unit == "seconds":
await asyncio.sleep(int(parsed_time))
elif time_unit == "minutes":
await asyncio.sleep(int(parsed_time) * 60)
elif time_unit == "hours":
await asyncio.sleep(int(parsed_time) * 3600)
await user.remove_roles(mute_role)
await ctx.send(f"User {user.mention} has been unmuted after {parsed_time} {time_unit}! They can speak now.")
解决方案
推荐阅读
- css - I want to spin wind turbine but its not rotating from center of the turbine pole
- javascript - jodit 添加按钮以在编辑器中插入 html
- c++ - 带有 std::map 对象的类和已删除的复制赋值和构造函数导致 C2280 带有 std::pair 的复制构造函数
- python - 如何在烧瓶应用程序中仅针对 Web 服务器运行启动代码,而不针对烧瓶命令?
- batch-file - 使用批处理的第一列中的值重命名 CSV 文件
- javascript - 为什么 JSON 输出中的某些字段缺少引号以及为什么输出中没有双引号
- fullcalendar - FullCalendar v4.4 在使用 eventRender 时在元素中给出未定义
- process - 在 Wayland 上,今天有没有办法获取当前关注的窗口标题和进程 ID?
- javascript - 如何添加自定义控件以在我的播放器中添加下一个/上一个曲目按钮 - JSON?
- python - 在不存在预先指定的条件的情况下插入 pandas 数据帧