我正在制作一个不和谐机器人来跟踪在语音频道上花费的时间,但我想知道我是如何做到的,它不计算在某个频道上的成员的时间,比如afk频道。
这是我现在正在使用的事件
@client.event
async def on_voice_state_update(before, after):
"""Monitor status updates for voice channels"""
s = session()
# prefer nickname in server to actual discord username
member_name = before.nick if before.nick else before.name
try:
member = s.query(Member).filter(Member.id == before.id).one()
# update member names on each channel join
member.name = member_name
except NoResultFound:
member = Member(
id=before.id,
name=member_name,
last_join=datetime.datetime.now(),
total_time=datetime.timedelta(0),
in_chat=False
)
s.add(member)
if after.voice.voice_channel is None:
if member.in_chat:
member.in_chat = False
member.update_total_time()
try:
channel_name = before.voice.voice_channel.name
except AttributeError:
channel_name = "Unknown"
print("{} left voice channel {}. Total time: {}".format(
member.name,
channel_name,
member.total_time
))
else:
if member.in_chat:
if after.voice.is_afk or after.voice.self_deaf or after.voice.deaf:
member.in_chat = False
member.update_total_time()
else:
member.in_chat = True
member.last_join = datetime.datetime.now()
try:
channel_name = after.voice.voice_channel.name
except AttributeError:
channel_name = "Private"
print("{} joined voice channel {}. Total time: {}".format(
member.name,
channel_name,
member.total_time
))
s.commit()
sys.stdout.flush()
如果我正确理解了您的代码,您将能够检查他们刚刚加入的语音频道是否具有特定ID,即AFK频道的ID:
@client.event
async def on_voice_state_update(before, after):
"""Monitor status updates for voice channels"""
# replace 112233445566778899 with the channel's id you want to ignore
if after.voice.voice_channel.id != 112233445566778899:
s = session()
# rest of your code
如果要根据多个ID检查ID,可以将其与列表进行比较:
@client.event
async def on_voice_state_update(before, after):
"""Monitor status updates for voice channels"""
# starting code
NULL_CHANNELS = [112233445566778899, 998877665544332211]
if after.voice.voice_channel.id in NULL_CHANNELS:
s = session()
# rest of your code
参考资料:
语音频道。id
项目中经常会生成一些Git系统不需要追踪(track)的文件。典型的是在编译生成过程中 产生的文件或是编程器生成的临时备份文件。当然,你不追踪(track)这些文件,可以 平时不用"git add"去把它们加到索引中。 但是这样会很快变成一件烦人的事,你发现 项目中到处有未追踪(untracked)的文件; 这样也使"git add ." 和"git commit -a" 变得实际上没有用处,同时
问题内容: 我收到此错误,因为其中一位用户在他的帖子中添加了 错误:[$ sanitize:badparse]清理程序无法解析以下html块:<3 我写的代码 我想他要采取仅标签和标签 那可能吗? 谢谢! 问题答案: 您可以创建过滤器,以清理HTML。 我在其中使用了strip_tags函数 http://phpjs.org/functions/strip_tags/ 控制器: 视图: http:
问题内容: 如何使装饰器忽略有关缓存键的某些函数参数? 例如,我有一个看起来像这样的函数: 如果我像这样应用装饰器,它将包含在缓存键中。结果,如果我尝试使用相同但不同的函数调用该函数,它将再次执行,这是我想避免的。我只想考虑论点。 问题答案: 使用cachetools可以编写:
问题内容: 我使用matplotib的Axes API绘制了一些数字。我画的线之一代表理论上的预期线。它没有原始y和x限制的含义。我想要的是让matlplotlib在自动缩放限制时忽略它。我以前要做的是检查当前极限,然后绘制并重置极限。问题在于,当我绘制第三张图时,将与理论线一起重新计算极限值,这实际上扩展了图。 问题答案: 显而易见的方法是手动将限制设置为所需的值。(例如) 如果您不想手动查找限
我想知道是否可以使用此方法忽略字段,因为我有一个要忽略的字段列表,在同一个类中,那么我该如何做呢? 我正在使用 谢谢
我有我的OAuth服务器和客户端,它是由Oauth2授权的。 现在,如果我需要呼叫我的服务,我需要: > 使用以下API从服务器生成访问令牌: < code > localhost:9191/oauth/token?grant _ type =密码 其给出如下响应: 现在我正在传递访问令牌,以运行客户端服务,如下所示: 我需要跳过控制器的身份验证。我该怎么做?有人能帮忙吗 我的WebSecurit