A presence/activity set command?

左心房为你撑大大i 提交于 2019-12-13 23:09:12

问题


So, I was wondering if there could be a command I could write that allows me to set the bots presence and activity (ex. ~~set presence idle or ~~set activity watching "people typing ~~help") or something like that.

Unrelated question: How do I set commands to be used by me only?

I haven't found any example code for this, and i'm a beginner.


回答1:


You can use the is_owner check to ensure that you are the only person who can invoke a command.

To change the presence or status of the bot, use the change_presence method:

from discord.ext.commands import Bot, is_owner
from discord import Status, Activity, ActivityType

bot = Bot("~~")

def getEnum(enum):
    def getter(arg):
        return enum[arg]
    return getter

@bot.group(invoke_without_command=True)
@is_owner()
async def set(ctx):
    await ctx.send("You must provide a subcommand.")

@set.command()
async def presence(ctx, status: getEnum(Status)):
    await bot.change_presence(status=status)

@set.command(invoke_without_command=True)
async def activity(ctx, type: getEnum(ActivityType), *, description):
    await bot.change_presence(activity=Activity(type=type, name=description))

@set.error
async def set_error(ctx, error):
    if isinstance(error, BadArgument):
        await ctx.send(error.message)
        await ctx.send(error.args)

bot.run("token")

The above will fail silently if you try to provide an unrecognized name to Status or ActivityType, you could also try writing an error handler to provide some feedback.



来源:https://stackoverflow.com/questions/56516110/a-presence-activity-set-command

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!