这是一个QQ机器人,我作为一名初学者,敲了一个月,结果有bug。qqbot安装用
pip install qqbot
就可以。接下来是源码,求各位朋友帮我修一下!
from qqbot import QQBotSlot as qqbotslot, RunBot
# 管理员QQ号
admin_qq = '1124866658'
# 初始化群员信息字典
users = {}
# 定义积分系统相关指令
@qqbotslot
def on_sign_in(bot, contact, member, content):
# 获取群员信息
user = users.get(member.qq)
# 判断是否已经签到过
if user and user.get('signed_in'):
bot.SendTo(contact, f"{member.name}, 你已经签到过啦!")
else:
# 更新积分并标记已签到
if not user:
user = {'name': member.name, 'qq': member.qq, 'points': 114, 'blacklisted': False}
users[member.qq] = user
else:
user['points'] += 25
user['signed_in'] = True
bot.SendTo(contact, f"{member.name}, 恭喜你签到成功!获得25积分。")
@qqbotslot
def on_show_points(bot, contact, member, content):
# 获取群员信息
user = users.get(member.qq)
if not user:
bot.SendTo(contact, f"{member.name}, 你还没有积分哦。")
else:
bot.SendTo(contact, f"{member.name}, 你当前的积分是:{user['points']}。")
@qqbotslot
def on_show_leaderboard(bot, contact, member, content):
# 对用户列表按照积分从高到低排序
sorted_users = sorted(users.values(), key=lambda u: u['points'], reverse=True)[:10]
# 构造榜单消息
message = "积分榜单:\n"
for i, user in enumerate(sorted_users):
message += f"{i+1}. {user['name']} ({user['points']} 分)\n"
bot.SendTo(contact, message)
# 定义黑名单相关指令
@qqbotslot
def on_handle_message(bot, contact, member, content):
# 判断是否为管理员发送的消息
if member.qq != admin_qq:
return
if content.startswith('查询黑名单'):
blacklisted_users = [user['name'] for user in users.values() if user.get('blacklisted')]
if blacklisted_users:
bot.SendTo(member, f"当前在黑名单中的群员有:{','.join(blacklisted_users)}。")
else:
bot.SendTo(member, "没有人在黑名单中。")
elif content.startswith('解除'):
_, target_name, _ = content.split()
target_user = next((user for user in users.values() if user['name'] == target_name), None)
if not target_user:
bot.SendTo(member, f"找不到名为{target_name}的群员。")
else:
target_user['blacklisted'] = False
bot.SendTo(member, f"{target_name}已经被解除黑名单。")
@qqbotslot
def on_transfer_points(bot, contact, member, content):
# 解析指令参数
_, target_name, points_str = content.split()
points = int(points_str)
# 获取群员信息
source_user = users.get(member.qq)
target_user = next((user for user in users.values() if user['name'] == target_name), None)
# 判断是否有足够的积分进行转账
if not source_user or source_user['points'] < points:
bot.SendTo(contact, "你自己都没有还转给别人?")
elif not target_user:
bot.SendTo(contact, f"找不到名为{target_name}的群员。")
else:
# 执行转账操作
source_user['points'] -= points
target_user['points'] += points
bot.SendTo(contact, f"转送成功!你滴马内转给{target_name}辣!")
@qqbotslot
def on_handle_message(bot, message):
content = message.content
# 判断是否为群员骂人
if any(word in content for word in ['滚', '爬', '爪巴', '逼', '痹', '艹', '操', '囸', '日']):
# 获取群员信息并扣除积分
user = users.get(message.sendUin)
if user:
user['points'] = max(0, user['points'] - 10)
bot.SendTo(message.fromUin, "禁止骂人!已经扣了10马内了。")
if name == 'main':
bot = RunBot()
bot.Login(['-q', '1124866658']) # 填写你的QQ号码
bot.Run()
望采纳:
from qqbot import QQBotSlot as qqbotslot, RunBot
# 管理员QQ号
admin_qq = '1124866658'
# 初始化群员信息字典
users = {}
# 定义积分系统相关指令
@qqbotslot
def on_sign_in(bot, contact, member, content):
# 获取群员信息
user = users.get(member.qq)
# 判断是否已经签到过
if user and user.get('signed_in'):
bot.SendTo(contact, f"{member.name}, 你已经签到过啦!")
else:
# 更新积分并标记已签到
if not user:
user = {'name': member.name, 'qq': member.qq, 'points': 114, 'blacklisted': False}
users[member.qq] = user
else:
user['points'] += 25
user['signed_in'] = True
bot.SendTo(contact, f"{member.name}, 恭喜你签到成功!获得25积分。")
@qqbotslot
def on_show_points(bot, contact, member, content):
# 获取群员信息
user = users.get(member.qq)
if not user:
bot.SendTo(contact, f"{member.name}, 你还没有积分哦。")
else:
bot.SendTo(contact, f"{member.name}, 你当前的积分是:{user['points']}。")
@qqbotslot
def on_show_leaderboard(bot, contact, member, content):
# 对用户列表按照积分从高到低排序
sorted_users = sorted(users.values(), key=lambda u: u['points'], reverse=True)[:10]
# 构造榜单消息
message = "积分榜单:\n"
for i, user in enumerate(sorted_users):
message += f"{i+1}. {user['name']} ({user['points']} 分)\n"
bot.SendTo(contact, message)
# 定义黑名单相关指令
@qqbotslot
def on_handle_message(bot, contact, member, content):
# 判断是否为管理员发送的消息
if member.qq != admin_qq:
return
if content.startswith('查询黑名单'):
blacklisted_users = [user['name'] for user in users.values() if user.get('blacklisted')]
if blacklisted_users:
bot.SendTo(member, f"当前在黑名单中的群员有:{','.join(blacklisted_users)}。")
else:
bot.SendTo(member, "没有人在黑名单中。")
elif content.startswith('解除'):
_, target_name, _ = content.split()
target_user = next((user for user in users.values() if user['name'] == target_name), None)
if not target_user:
bot.SendTo(member, f"找不到名为{target_name}的群员。")
else:
target_user['blacklisted'] = False
bot.SendTo(member, f"{target_name}已经被解除黑名单。")
@qqbotslot
def on_transfer_points(bot, contact, member, content):
# 解析指令参数
_, target_name, points_str = content.split()
points = int(points_str)
# 获取群员信息
source_user = users.get(member.qq)
target_user = next((user for user in users.values() if user['name'] == target_name), None)
# 判断是否有足够的积分进行转账
if not source_user or source_user['points'] < points:
bot.SendTo(contact, "你自己都没有还转给别人?")
elif not target_user:
bot.SendTo(contact, f"找不到名为{target_name}的群员。")
elif source_user == target_user:
bot.SendTo(contact, "不能转账给自己!")
else:
# 执行转账操作
source_user['points'] -= points
target_user['points'] += points
bot.SendTo(contact, f"转送成功!你滴马内转给{target_name}辣!")
定义了两个名为on_handle_message
的函数,第二个会覆盖第一个,导致第一个函数无法被调用。应该将第二个函数重命名为其他名字