【发布时间】:2021-10-05 11:28:32
【问题描述】:
忽略 on_voice_state_update Traceback 中的异常(最近 最后调用):文件 "C:\Users\vitak\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\client.py", 第 343 行,在 _run_event await coro(*args, **kwargs) TypeError: on_voice_state_update() 接受 3 个位置参数,但给出了 4 个
如何解决这个问题?我已经尝试了2周。但我仍然无法理解函数接收的第四个参数
import discord
from discord.ext import commands
from pymongo import MongoClient
# from discord_components import DiscordComponents, Button, ButtonStyle
from datetime import datetime
import time
import os
client = commands.Bot(command_prefix = "!")
cluster = MongoClient("mongodb://127.0.0.1:27017")
colluser = cluster.chill.user
collclan = cluster.chill.clans
collshop = cluster.chill.shop
@client.event
async def on_ready():
# DiscordComponents(client)
print("Bot connected to the server")
# post2 = {
# }
for guild in client.guilds:
for member in guild.members:
post = {
"_id": member.id,
"name": member.mention,
"user": member.name,
"inventory": [],
"warms": 0,
"mute": 0,
"voice_activ": 0,
"localban": 0,
"register": member.created_at,
"onservfrom": member.joined_at,
"clan": 0,
"marry": 0,
"love": 0,
"childs": [],
"balance": 0,
"bank": 0,
"rep": 0,
"cdxp": 0,
"cnxp": 0,
"dxp": 0,
"nxp": 0,
"cdbal": 0,
"cdlvl": 1,
"cnlvl": 1,
"dlvl": 1,
"nlvl": 1
}
if colluser.count_documents({"_id": member.id}) == 0:
colluser.insert_one(post)
@client.event
async def on_guild_role_create(role):
print("new role created")
# print(f"{role.id}")
# print(f"{role.name}")
post = {
"_id": role.id,
"titel": "none",
"cp": [],
"exp": 0,
"lvl": 0,
"maxcp": 7,
"bank": 0
}
if collclan.count_documents({"role_id": role.id}) == 0:
collclan.insert_one(post)
@client.event
async def on_voice_state_update(member, before, after):
data = colluser.find_one({"_id": member.id})
day = data["dxp"]
dark = data["nxp"]
dl = data["dlvl"]
nl = data["nlvl"]
dexp = 500 + 100 * dl
nexp = 500 + 100 * nl
if before.channel is None and after.channel is not None:
print("1")
t1 = time.time()
colluser.update_one({"_id": member.id},
{"$set": {"voice_tim1": t1}})
elif before.channel is not None and after.channel is None:
dtn = datetime.today().strftime("%I:%M %p")
t1 = data["voice_tim1"]
voice_activ1 = data["voice_activ"]
balance = data["balance"]
t2 = time.time()
tim = t2-t1
print("0")
print(dtn)
colluser.update_one({"_id": member.id},
{"$set": {"voice_activ": voice_activ1 + tim}})
colluser.update_one({"_id": member.id},
{"$set": {"balance": balance + tim / 30}})
if any(("AM" in dtn) for AM in dtn):
print("time is AM")
colluser.update_one({"_id": member.id},
{"$set": {"dxp": day + tim / 4}})
if any(("PM" in dtn) for PM in dtn):
print("time is PM")
colluser.update_one({"_id": member.id},
{"$set": {"nxp": dark + tim / 4}})
if data["dxp"] >= 500 + 100 * dl:
colluser.update_one({"_id": member.id},
{"$set": {"dlvl": dl + 1}})
colluser.update_one({"_id": member.id},
{"$set": {"dxp": day - dexp}})
if data["nxp"] >= 500 + 100 * nl:
colluser.update_one({"_id": member.id},
{"$set": {"nlvl": nl + 1}})
colluser.update_one({"_id": member.id},
{"$set": {"nxp": dark - nexp}})
@client.event
async def on_member_join(member):
post = {
"_id": member.id,
"name": member.mention,
"user": member.name,
"inventory": [],
"warms": 0,
"mute": 0,
"voice_activ": 0,
"localban": 0,
"register": member.created_at,
"onservfrom": member.joined_at,
"clan": 0,
"marry": 0,
"love": 0,
"childs": [],
"balance": 0,
"bank": 0,
"xp": 0,
"dxp": 0,
"nxp": 0,
"cdbal": 0,
"lvl": 1,
"dlvl": 1,
"nlvl": 1
}
if colluser.count_documents({"_id": member.id}) == 0:
colluser.insert_one(post)
@client.event
async def on_command_error(ctx, error):
print(error)
if isinstance(error, commands.UserInputError):
await ctx.send(embed = discord.Embed(
description = f"Правильное использование команды: `{ctx.prefix}{ctx.command.name}` ({ctx.command.brief}): `{ctx.prefix}{ctx.command.usage}`"
))
@client.command()
@commands.is_owner()
async def load(ctx, extension):
client.load_extension(f"cogs.{extension}")
@client.command()
@commands.is_owner()
async def unload(ctx, extension):
client.unload_extension(f"cogs.{extension}")
@client.command()
@commands.is_owner()
async def reload(ctx, extension):
client.unload_extension(f"cogs.{extension}")
client.load_extension(f"cogs.{extension}")
for filename in os.listdir("./cogs"):
if filename.endswith(".py"):
client.load_extension(f"cogs.{filename[:-3]}")
client.run("TOKEN")
【问题讨论】:
-
你先把prototype改成
async def on_voice_state_update(*args):,然后print(*args)怎么样? -
MAGIC#7777
> -
对我来说这看起来像是三个论点。不知道该告诉你什么。
-
文档说只有 3 个参数。但由于某种原因,他得到了 4 个。他在我的计算机和服务器上都收到了它们。表示代码某处或smom函数调用有错误。
标签: python python-3.x discord discord.py bots