如何在discord.py中创建可检测密码强度的Discord命令
密码强度检测命令实现方案
1. 先明确密码强度判定规则
建议提前定好可自定义的评分逻辑,通用参考维度如下:
- 长度维度:小于8位直接判定为极弱,8-12位得1分,12位及以上得2分
- 字符类型维度:包含小写字母、大写字母、数字、特殊符号各得1分
- 排除规则:匹配到常见弱密码库(如123456、password等)直接判定为极弱,存在连续4位以上相同字符扣1分
- 最终分级:0分为极弱,1-2分为弱,3-4分为中等,5-6分为强
2. 实现核心检测工具函数
使用Python内置re正则库即可实现,无需额外依赖,和discord逻辑解耦方便后续调整:
import re from typing import Tuple, List # 可自行扩充常见弱密码库 COMMON_PASSWORDS = {"123456", "password", "123456789", "12345678", "qwerty", "1234567", "111111", "123123", "abc123"} def check_password_strength(password: str) -> Tuple[str, int, List[str]]: score = 0 feedback = [] # 优先排查常见弱密码 if password.lower() in COMMON_PASSWORDS: feedback.append("当前密码属于公开的常见弱密码,非常不安全") return ("极弱", 0, feedback) # 长度校验 pwd_len = len(password) if pwd_len < 8: feedback.append("密码长度需至少8位") return ("极弱", 0, feedback) elif 8 <= pwd_len < 12: score += 1 feedback.append("建议长度提升到12位以上获得更高安全等级") else: score += 2 # 字符类型校验 if re.search(r"[a-z]", password): score += 1 else: feedback.append("建议加入小写字母提升强度") if re.search(r"[A-Z]", password): score += 1 else: feedback.append("建议加入大写字母提升强度") if re.search(r"[0-9]", password): score += 1 else: feedback.append("建议加入数字提升强度") if re.search(r"[!@#$%^&*()_+\-=\[\]{};':\"\\|,.<>\/?]", password): score += 1 else: feedback.append("建议加入特殊符号提升强度") # 连续重复字符校验 if re.search(r"(.)\1{3,}", password): score -= 1 feedback.append("避免使用连续4位以上的相同字符") # 最终等级判定 if score <= 2: level = "弱" elif 3 <= score <= 4: level = "中等" else: level = "强" return (level, score, feedback)
3. 对接discord.py rewrite命令逻辑
注意用户输入的密码属于敏感信息,不要在公频道返回,优先通过私信发送结果,同时自动删除用户公屏发送的密码消息避免泄露:
import discord from discord.ext import commands # 按需开启权限,不要全开不必要的权限 intents = discord.Intents.default() intents.message_content = True intents.dm_messages = True bot = commands.Bot(command_prefix="!", intents=intents) # 可自行修改命令前缀 @bot.command(name="checkpwd", help="检测密码强度,结果将通过私信发送,使用示例:!checkpwd 你的密码") async def check_password(ctx, *, password: str): # 立刻删除用户发送的包含密码的公屏消息 await ctx.message.delete() level, score, feedback = check_password_strength(password) # 构造返回内容 reply_msg = f"## 密码强度检测结果\n强度等级:{level}\n得分:{score}/6\n\n改进建议:\n" for tip in feedback: reply_msg += f"- {tip}\n" # 发送私信 try: await ctx.author.send(reply_msg) await ctx.send(f"{ctx.author.mention} 检测结果已发送到你的私信,请查收", delete_after=5) except discord.Forbidden: await ctx.send(f"{ctx.author.mention} 无法向你发送私信,请开启服务器成员私信权限后重试", delete_after=5)
4. 注意事项
- 需在Discord开发者后台开启对应的
message content intent和私信权限,否则命令无法正常触发 - 不要在任何日志中打印用户输入的密码,避免敏感信息泄露
- 可根据需求扩展检测逻辑,比如增加是否包含用户名、生日等个人信息的判定规则
内容的提问来源于stack exchange,提问作者Leonardo V Koury
相关产品推荐
相关产品推荐

