使用discord bot封禁用户时如何保留被封禁用户的历史消息?
Discord自研Bot封禁用户时保留其历史消息的解决方案
问题背景
使用自研Discord Bot执行封禁用户操作时,系统会自动删除被封禁用户的所有近期消息,需求是找到保留这些消息的实现方法。
原有封禁命令代码
@bot.command() @commands.has_permissions(administrator=True) async def ban(ctx, user: discord.User, *, reason = None): ban = await ctx.reply(embed = discord.Embed(description = f'{loading_emoji} Banning {user.mention} from `server1` and `server2`...', color = 0x00BF23), mention_author=True) s1 = await bot.fetch_guild(server1) s2 = await bot.fetch_guild(server2) await s1.ban(user, reason = reason) await s2.ban(user, reason = reason) await asyncio.sleep(0.9) await ban.edit(embed = discord.Embed(title = 'Success!', description = f'{shield_emoji} Banned {user.mention} from `server1` and `server2`!', timestamp = datetime.utcnow(), color = 0x00BF23), mention_author=True)
解决方案
Discord Python库中,guild.ban()方法默认会删除被封禁用户的近期消息,要保留消息只需要给该方法添加delete_message_days=0参数即可,参数值为0代表不删除任何历史消息。
需要将代码中两处调用ban方法的位置都补充该参数:
- 原server1封禁代码:
await s1.ban(user, reason = reason)
修改后为:await s1.ban(user, reason = reason, delete_message_days=0) - 原server2封禁代码:
await s2.ban(user, reason = reason)
修改后为:await s2.ban(user, reason = reason, delete_message_days=0)
修改后完整代码
@bot.command() @commands.has_permissions(administrator=True) async def ban(ctx, user: discord.User, *, reason = None): ban = await ctx.reply(embed = discord.Embed(description = f'{loading_emoji} Banning {user.mention} from `server1` and `server2`...', color = 0x00BF23), mention_author=True) s1 = await bot.fetch_guild(server1) s2 = await bot.fetch_guild(server2) # 添加delete_message_days=0参数保留用户所有历史消息 await s1.ban(user, reason = reason, delete_message_days=0) await s2.ban(user, reason = reason, delete_message_days=0) await asyncio.sleep(0.9) await ban.edit(embed = discord.Embed(title = 'Success!', description = f'{shield_emoji} Banned {user.mention} from `server1` and `server2`!', timestamp = datetime.utcnow(), color = 0x00BF23), mention_author=True)
内容的提问来源于stack exchange,提问作者Roberto G.
相关产品推荐
相关产品推荐

