因此,我正在尝试发出警告命令,但似乎没有任何效果。我已经尝试了几个月,我已经做了我能想到的一切。
首先,我使用JSON,但是代码无法执行。 其次,我尝试制作某种警报系统,但这并不可靠。 第三,我尝试使用字典,但是我不知道如何添加变量。
这是我当前的代码
async def warn(ctx, member: discord.Member):
def warn(warn, user):
warn[user] = warn[user] + 1
return warn
warn = {}
warn = warn(warn, member)
await ctx.send(f"Warned")
任何帮助将不胜感激。预先感谢!
答案 0 :(得分:0)
我有工作代码:
async def update_data(users, user):
if not f'{user.id}' in users:
users[f'{user.id}'] = {}
users[f'{user.id}']['warns'] = 0
async def add_warns(users, user, warns):
users[f'{user.id}']['warns'] += warns
@client.command()
async def warn(ctx, user: discord.Member):
with open('warns.json', 'r') as f:
users = json.load(f)
await update_data(users, user)
await add_warns(users, user, 1)
with open('warns.json', 'w') as f:
json.dump(users, f, sort_keys=True, ensure_ascii=False, indent=4)
await ctx.send(f'Warned {user}')
该代码应该可以工作(导入json),它将对.json文件进行排序。
编辑1: 我做了一个未警告的代码,它的工作原理就像一个超级按钮(它删除了用户ID并发出警告,因此它比仅保留0节省了更多空间)
@client.command()
async def remove_warn(ctx, user: discord.Member, amount: int=None):
with open('warns.json', 'r') as f:
users = json.load(f)
amount = amount or 1
await update_data(users, user)
await add_warns(users, user, -amount)
if users[f'{user.id}']['warns'] <= 0:
with open('warns.json', 'w') as f:
del users[f'{user.id}']['warns']
del users[f'{user.id}']
f.write(json.dumps(users, indent=4))
return
else:
with open('warns.json', 'w') as f:
json.dump(users, f, sort_keys=True, ensure_ascii=False, indent=4)
await ctx.send(f'Removed {amount} warn for {user}')
return
编辑2: 做了一个有效的警告检查器。
@client.command()
async def warns(ctx, user: discord.Member=None):
user = user or ctx.author
try:
with open('warns.json', 'r') as f:
users = json.load(f)
warns = users[f'{user.id}']['warns']
await ctx.send(f'{user} has {warns} warnings')
except:
await ctx.send(f"{user} doesn't have any warnings.")
答案 1 :(得分:0)
不能完全确定您要实现的目标,但是这里有一个示例,当用户在行会的任何频道中说出“错误”字眼时,都会向用户发出警告。他们说了不止一次之后,他们收到一条消息,说这是您的最后警告。如果他们在柜台上超过3,则可以轻松添加一个底牌{member}。希望这会有所帮助。
@client.event
async def on_message(message):
counter = 0
member = client.get_user(message.author.id)
channel = client.get_channel(message.channel.id)
async for message in channel.history():
if message.content == 'badword' and message.author == member:
counter = counter + 1
if counter == 1:
await channel.send(f'{member} you have been warned.')
elif counter == 2:
await channel.send(f'{member} this is your last warning.')
return
编辑:我一直在等待发布此内容,直到我得到一个可行的示例,其中包括从服务器踢用户,但根据发布的内容和文档无法使其正常工作。由于我认为这不是您的目标,因此我打算将其发布,希望对您有所帮助。