You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

discord.py如何设置默认命令?需合并presencas与带参presencascanal命令

实现方案

你可以通过给presencas命令设置可选参数的方式实现需求,无需保留两个独立命令,逻辑判断参数是否存在即可分别触发两种模式,同时可设置命令别名兼容原来的presencascanal触发习惯。

核心改动点

  • 给命令函数新增可选参数canal,设置默认值为None
  • 函数内判断参数是否为空,分别走全服务器/指定频道的逻辑
  • 给presencas命令设置别名presencascanal,兼容原有使用习惯

整合后完整代码

import typing
import datetime
import time
import csv
import discord
from discord.ext import commands

# 整合后的单命令实现
@bot.command(name='presencas', aliases=['presencascanal'])
@commands.has_role(admin_id)
async def presencas(ctx, canal: typing.Optional[discord.TextChannel] = None):
    current_date = str(datetime.now().date())
    current_time = time.strftime(r"%H:%M") + 'H'

    # 判断触发模式
    if canal is None:
        # 无参数:全服务器模式
        send_msg = f'Presenças no servidor no dia: {current_date} às {current_time}'
        file_name = f'presencas_{current_date}.csv'
        member_list = ctx.guild.members
    else:
        # 带参数:指定频道模式
        send_msg = f'Presenças no canal {canal.name} no dia {current_date} às {current_time}'
        file_name = f'presencas_canal_{canal.name}_{current_date}.csv'
        member_list = canal.members
    
    # 通用输出逻辑
    await ctx.send(send_msg)
    with open(file_name, 'w', newline='', encoding='utf-8') as file:
        writer = csv.writer(file, delimiter='"', quoting=csv.QUOTE_NONE)
        writer.writerow(['Nome, tag, timestamp'])
        for user in member_list:
            if user.status != discord.Status.offline:
                row_content = f'{user.name}, #{user.discriminator}, {current_date} {current_time}'
                writer.writerow([row_content])
    
    await ctx.send(file=discord.File(file_name))

使用说明

  • 无参数触发全服务器统计:presencas
  • 带参数触发指定频道统计:presencas 频道ID/频道名/@频道
  • 兼容原有触发方式:presencascanal 频道ID 仍然可以正常使用

注意:使用成员统计功能需要你在Discord开发者后台开启服务器成员意图(Server Members Intent)和在线状态意图(Presence Intent),同时代码中初始化bot时要声明对应意图:

intents = discord.Intents.default()
intents.members = True
intents.presences = True
bot = commands.Bot(command_prefix='你的命令前缀', intents=intents)

内容的提问来源于stack exchange,提问作者Bernardo Pereira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 18:36:03