- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试使机器人基本上处于 sleep 模式的命令,这意味着让机器人停止响应命令(如果可能的话,或 on_messages)尝试使用 client.pause (Boolean)
但它没有给出错误我不知道它到底做了什么但是没有任何反应下面是我到目前为止的位置。
@client.command(pass_context=True)
async def sleep(ctx):
client.pause = True
@client.command(pass_context=True)
async def awake(ctx):
client.pause = False
最佳答案
您可以使用 on_message
来覆盖机器人自动调用命令,然后构建一些逻辑让您决定它不想再接受任何命令(又名 sleep )。但请确保您作为机器人所有者可以选择唤醒它,否则您是 SOL 并且需要重新启动。
像下面这样的东西应该可以工作。
我的代码中的假设是您正在使用返工和 f 字符串是可以接受的,但逻辑就在这里,几乎不需要更改,我认为它与 异步
版本。
bot.py
from discord.ext import commands
class MyBot(commands.bot):
def __init__(self, command_prefix = '!', description=None):
super().__init__(command_prefix, description)
#you could just say False here but if you
#want to start the bot asleep here's a decent way to do it.
self.asleep = kwargs.get('asleep', False)
async def is_owner(obj):
owner = self.application_info().owner
return obj.author == owner
async def on_message(self, message):
ctx = await self.get_context(message)
is_owner = client.is_owner(ctx):
if is_owner or not self.asleep:
self.invoke(ctx)
...
owner.py - 或您保存“仅限机器人所有者”命令的任何位置。
from discord.ext import commands
...
@commands.command()
async def sleep(self, ctx):
self.bot.asleep = True
await ctx.say(f"I am now asleep, I will only respond to {ctx.author}")
@commands.command()
async def awaken(self, ctx):
self.bot.asleep = False
await ctx.say("Ahhh, just woke up! Ready to take commands!")
...
启动器.py
import MyBot
...
bot = MyBot(...)
bot.load_extension("path/to/owner_py_file")
...
我是根据 RDanny 想出来的在调用命令之前,bot 将它的数据库分配给每个上下文。这是一个写得很好的机器人,所有者出于教育目的公开了源代码。
对于你的情况,我假设你只是使用类似 client = commands.bot(...)
的东西创建一个机器人,这又是一个漂亮的千篇一律,不允许你利用任何您可以从子类化 bot
中获得强大的功能,但您可以只实现以下内容并获得与上述相同的功能:
client = commands.bot(...)
client.asleep = False
然后对于您在问题中显示的命令:
@client.command(pass_context=True)
async def sleep(ctx):
client.sleep = True
@client.command(pass_context=True)
async def awake(ctx):
client.asleep = False
然后为 on_message
覆盖。 请引用: this answer帮助解释为什么这有效。 甚至是 docs .提示提示
async def _is_owner(obj):
owner = self.application_info().owner
return obj.author == owner
@client.event()
async def on_message(message):
ctx = await self.get_context(message)
is_owner = _is_owner(ctx):
if is_owner or not self.asleep:
client.invoke(ctx)
如果上述实现对您不起作用,那么您可以提供我在上面链接的答案中描述的方法:
@client.event
async def on_message(message):
is_owner = _is_owner(ctx):
if is_owner or not client.asleep:
await bot.process_commands(message)
请注意 我不知道你的模块是如何构建的,但如果这是在一个类中完成的,并且你定义了 _is_owner(...)
在该类中,您将需要使用 is_owner = self._is_owner(...)
尽管这可以在其他地方定义。
关于python - 如何让机器人休眠并停止响应命令(或 on_messages),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54832569/
这个问题在这里已经有了答案: What is the JavaScript version of sleep()? (91 个回答) 关闭 9 年前。 是的,我知道 - 这个问题有成千上万的答案。请
有没有办法使用 native NHibernate linq 提供程序执行以下查询? var result = (from e1 in Session.Query() join e2
上下文:我正在尝试将Grails项目从1.0.3升级到1.3.7,并且遇到了很多问题。我刚得到很多DuplicateMappingExceptions,因为该项目同时具有Hibernate XML文件
我有标准: ICriteria criteria = Session.CreateCriteria() .SetFetchMode("Entity1", FetchMo
我正在寻找一种重新启动线程的方法,无论是从该线程的上下文内部还是从线程外部,可能是从另一个进程中。 (这些选项中的任何一个都可以。)我知道使整个进程休眠的困难,而且我很确定线程也会遇到同样的困难。但是
C 中是否有任何函数可以检查计算机是否进入 sleep 、休眠 或锁定 并从这些状态唤醒? 在msdn它们为 C#、C++ 提供,但不为 C 提供。我的操作系统是windows7 如下是我用来检查启动
我对 NHibenate 有疑问。当我运行 queryover 时,出现错误“无法解析属性:User.Name of:MegaOnlineChat.Core.Entities.Message”。我做错
我知道这里被问过很多次,也回答过很多次,这不是应该如何完成的方式,但再一次:) 是否有可能以某种方式调用异步函数(例如计时器/ajax 调用),基本上是常见的异步任务并同步等待直到它结束而不会出现 1
我在persistence.xml中有以下内容 com.merc.model.log.EventLogging org.hibernate.ejb.HibernatePersiste
目前我的存储库有 2 个构造函数。当我从我的 mvc 网站调用这些时,我总是调用第一个构造函数,从而打开一个新 session 。我应该在 session 中通过吗?我该怎么做。 public
hibernate session to list conversion Compilation Error occured when java converted into scala..!!
下面的remove()方法导致“超出了GC开销限制”。从A或B或C中删除ABC中存在的关联时。请您告知错误在哪里吗? 注-ABC是A,B,C的映射表 stacktrace如下: Caused by:
昨天我在 webhosting.net 的 Jelastic v2.2.2 上获得了一个试用帐户,并配置了一个最少 0 个 cloudlets 的环境(最多 8 个,即全部动态,无保留)。然后我部署了
设置:Grails 2.5.6和Hibernate 4.3.10 我有一个带有字符串ID的表。事实是,它的值是数字字符串,当我传入诸如get()这样的值时,这似乎使"000000"变得混乱。 域类:
hibernate session to list conversion Compilation Error occured when java converted into scala..!!
我有一个用于 PDA 的应用程序,它有一个长时间运行的进程,我遇到了一个问题,即 PDA 将在该进程完成之前进入休眠状态。 我无法控制 PDA 上的电源设置,有谁知道我的应用程序阻止 PDA 进入休眠
我正在创建一个将安装在 LaunchAgents 文件夹中的守护程序。关于使其 sleep 的一些问题: 因为它是一个 LaunchAgent 项,所以可执行文件会在用户/系统 sleep 时自动 s
我想使用 AsyncTask 创建启动画面。具体来说,在 doInBackground() 方法中,我使用静态方法 Thread.sleep() 并在它创建一个将应用程序重定向到其他 Activity
在我的网站上,我有一个 JavaScript 函数,它执行 AJAX 调用来获取帐户信息,然后打开一个模式,您可以在其中查看和编辑信息。 AJAX 调用用于更改您选择的数据库中的详细信息,然后刷新原始
除非线程告诉我醒来,否则我想睡 X 时间。在下面的示例中,我想休眠 10 毫秒(1/100 秒)或直到 foo 有 2000 个项目。以先到者为准。我该怎么做呢?我编了函数 主线程: pthread_
我是一名优秀的程序员,十分优秀!