如何在 python Discord 机器人中获取用户输入?

2024-01-05

我有一个 python discord 机器人,我需要它在命令后获取用户输入,我该怎么做?我是 python 和制作不和谐机器人的新手。这是我的代码:

import discord, datetime, time
from discord.ext import commands
from datetime import date, datetime

prefix = "!!"
client = commands.Bot(command_prefix=prefix, case_insensitive=True)

times_used = 0

@client.event
async def on_ready():
  print(f"I am ready to go - {client.user.name}")
  await client.change_presence(activity=discord.Activity(type=discord.ActivityType.watching, name=f"{client.command_prefix}python_help. This bot is made by drakeerv."))

@client.command(name="ping")
async def _ping(ctx):
  global times_used
  await ctx.send(f"Ping: {client.latency}")
  times_used = times_used + 1

@client.command(name="time")
async def _time(ctx):
  global times_used
  from datetime import date, datetime

  now = datetime.now()

  if (now.strftime("%H") <= "12"):
    am_pm = "AM"
  else:
    am_pm = "PM"

  datetime = now.strftime("%m/%d/%Y, %I:%M")

  await ctx.send("Current Time:" + ' '  + datetime + ' ' + am_pm)
  times_used = times_used + 1

@client.command(name="times_used")
async def _used(ctx):
  global times_used
  await ctx.send(f"Times used since last reboot:" + ' ' + str(times_used))
  times_used = times_used + 1

@client.command(name="command") #THIS LINE
async def _command(ctx):
  global times_used
  await ctx.send(f"y or n")
  times_used = times_used + 1

@client.command(name="python_help")
async def _python_help(ctx):
  global times_used
  msg = '\r\n'.join(["!!help: returns all of the commands and what they do.",
                     "!!time: returns the current time.",
                     "!!ping: returns the ping to the server."])
  await ctx.send(msg)
  times_used = times_used + 1



client.run("token")

我使用的是 python 版本 3.8.3。我已经看过其他帖子,但他们没有回答我的问题或给了我错误。任何帮助将不胜感激!


你会想要使用Client.wait_for():

@client.command(name="command")
async def _command(ctx):
    global times_used
    await ctx.send(f"y or n")

    # This will make sure that the response will only be registered if the following
    # conditions are met:
    def check(msg):
        return msg.author == ctx.author and msg.channel == ctx.channel and \
        msg.content.lower() in ["y", "n"]

    msg = await client.wait_for("message", check=check)
    if msg.content.lower() == "y":
        await ctx.send("You said yes!")
    else:
        await ctx.send("You said no!")

    times_used = times_used + 1

并且有超时:

import asyncio # To get the exception

@client.command(...)
async def _command(ctx):
    # code
    try:
        msg = await client.wait_for("message", check=check, timeout=30) # 30 seconds to reply
    except asyncio.TimeoutError:
        await ctx.send("Sorry, you didn't reply in time!")

参考:

  • Client.wait_for() https://discordpy.readthedocs.io/en/latest/api.html#discord.Client.wait_for- 更多例子在这里
  • Message.author https://discordpy.readthedocs.io/en/latest/api.html#discord.Message.author
  • Message.channel https://discordpy.readthedocs.io/en/latest/api.html#discord.Message.channel
  • Message.content https://discordpy.readthedocs.io/en/latest/api.html#discord.Message.content
  • asyncio.TimeoutError https://docs.python.org/3/library/asyncio-exceptions.html#asyncio.TimeoutError
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 python Discord 机器人中获取用户输入? 的相关文章

  • 如何传递架构以从现有数据帧创建新数据帧?

    要将 schema 传递到 json 文件 我们这样做 from pyspark sql types import StructField StringType StructType IntegerType data schema Stru
  • matplotlib 图中点的标签

    所以这是一个关于已发布的解决方案的问题 我试图在我拥有的 matplotlib 散点图中的点上放置一些数据标签 我试图在这里模仿解决方案 是否有与 MATLAB 的 datacursormode 等效的 matplotlib https s
  • 我应该使用 Python 双端队列还是列表作为堆栈? [复制]

    这个问题在这里已经有答案了 我想要一个可以用作堆栈的 Python 对象 使用双端队列还是列表更好 元素数量较少还是数量较多有什么区别 您的情况可能会根据您的应用程序和具体用例而有所不同 但在一般情况下 列表非常适合堆栈 append is
  • 嵌套列表的重叠会产生不必要的间隙

    我有一个包含三个列表的嵌套 这些列表由 for 循环填充 并且填充由 if 条件控制 第一次迭代后 它可能类似于以下示例 a 1 2 0 0 0 0 0 0 4 5 0 0 0 0 0 0 6 7 根据条件 它们不重叠 在第二次迭代之后 新
  • 使用主题交换运行多个 Celery 任务

    我正在用 Celery 替换一些自制代码 但很难复制当前的行为 我期望的行为如下 创建新用户时 应向tasks与交换user created路由键 该消息应该触发两个 Celery 任务 即send user activate email
  • 在 Django Admin 中调整字段大小

    在管理上添加或编辑条目时 Django 倾向于填充水平空间 但在某些情况下 当编辑 8 个字符宽的日期字段或 6 或 8 个字符的 CharField 时 这确实是一种空间浪费 字符宽 然后编辑框最多可容纳 15 或 20 个字符 我如何告
  • Pycharm 在 os.path 连接上出现“未解析的引用”

    将pycharm升级到2018 1 并将python升级到3 6 5后 pycharm报告 未解析的引用 join 最新版本的 pycharm 不会显示以下行的任何警告 from os path import join expanduser
  • GUI(输入和输出矩阵)?

    我需要创建一个 GUI 将数据输入到矩阵或表格中并读取此表单数据 完美的解决方案是限制输入表单仅允许float 例如 A 1 02 0 25 0 30 0 515 0 41 1 13 0 15 1 555 0 25 0 14 1 21 2
  • Django 视图中的“请求”是什么

    在 Django 第一个应用程序的 Django 教程中 我们有 from django http import HttpResponse def index request return HttpResponse Hello world
  • pandas - 包含时间序列数据的堆积条形图

    我正在尝试使用时间序列数据在 pandas 中创建堆积条形图 DATE TYPE VOL 0 2010 01 01 Heavy 932 612903 1 2010 01 01 Light 370 612903 2 2010 01 01 Me
  • Python - 如何确定解析的 XML 元素的层次结构级别?

    我正在尝试使用 Python 解析 XML 文件中具有特定标记的元素并生成输出 excel 文档 该文档将包含元素并保留其层次结构 我的问题是我无法弄清楚每个元素 解析器在其上迭代 的嵌套深度 XML 示例摘录 3 个元素 它们可以任意嵌套
  • 将 Matlab 的 datenum 格式转换为 Python

    我刚刚开始从 Matlab 迁移到 Python 2 7 在读取 mat 文件时遇到一些问题 时间信息以 Matlab 的日期数字格式存储 对于那些不熟悉它的人 日期序列号将日历日期表示为自固定基准日期以来已经过去的天数 在 MATLAB
  • 找到一个数字所属的一组范围

    我有一个 200k 行的数字范围列表 例如开始位置 停止位置 该列表包括除了非重叠的重叠之外的所有类型的重叠 列表看起来像这样 3 5 10 30 15 25 5 15 25 35 我需要找到给定数字所属的范围 并对 100k 个数字重复该
  • Protobuf 如何编码 oneof 消息结构

    对于这个 python 程序 在编码时运行 protobuf 编码会给出以下输出 0a 10 08 7f8a 0104 08 02 10 0392 0104 08 02 10 03 18 01 我不明白的是为什么8a后面有一个01 为什么9
  • 在 Google App Engine 中,如何避免创建具有相同属性的重复实体?

    我正在尝试添加一个事务 以避免创建具有相同属性的两个实体 在我的应用程序中 每次看到新的 Google 用户登录时 我都会创建一个新的播放器 当新的 Google 用户在几毫秒内进行多个 json 调用时 我当前的实现偶尔会创建重复的播放器
  • Firebase Firestore:获取文档的生成 ID (Python)

    我可以创建一个新文档 带有自动生成的 ID 并存储对其的引用 如下所示 my data key value doc ref db collection u campaigns add my data 我可以像这样访问数据本身 print d
  • 根据 Pandas 中的列表选择数据框行的子集

    我有一个数据框df1并列出x In 22 import pandas as pd In 23 df1 pd DataFrame C range 5 B range 10 20 2 A list abcde In 24 df1 Out 24
  • 如何使用 PrimaryKeyRelatedField 更新多对多关系上的类别

    Django Rest 框架有一个主键相关字段 http www django rest framework org api guide relations primarykeyrelatedfield其中列出了我的 IDmany to m
  • python 对浮点数进行不正确的舍入

    gt gt gt a 0 3135 gt gt gt print 3f a 0 314 gt gt gt a 0 3125 gt gt gt print 3f a 0 312 gt gt gt 我期待 0 313 而不是 0 312 有没有
  • JSON:TypeError:Decimal('34.3')不是JSON可序列化的[重复]

    这个问题在这里已经有答案了 我正在运行一个 SQL 查询 它返回一个小数列表 当我尝试将其转换为 JSON 时 出现类型错误 查询 res db execute SELECT CAST SUM r SalesVolume 1000 0 AS

随机推荐

  • 使用参数将表单提交到操作,Asp.Net.Core Mvc

    我正在尝试通过 ajax 在 asp net core 中提交排序下拉表单 操作还有其他参数 我也想执行这些参数 但表单不提交其他参数 我认为主要问题是剃须刀的形状部分 这是我行动的一部分 public IActionResult Prod
  • 可以在没有 UIWebView 的情况下运行 javascript 吗?

    是否可以运行一些 javascript 代码 也许有一个NSString作为输入 而不使用UIWebView 我想在单独的线程中运行此代码 因此 UIWebView 是不可能的 并且我真的不想渲染任何内容 只需返回结果即可 我没有尝试过 但
  • 如何从 OpenGL ES 中渲染的纹理读取像素

    我正在尝试从即时生成的纹理 RTT 渲染到纹理 中读取像素 我通过实施 Apple 建议的方法来拍摄此快照here http developer apple com library ios qa qa1704 index html 这对于呈
  • Java推断类型化HashSet的错误类型[重复]

    这个问题在这里已经有答案了 可能的重复 调用 TreeSet contains Long valueOf someLongValue 时出现 ClassCastException https stackoverflow com questi
  • Django settings.py 错误:不支持按文件名导入

    我在虚拟环境中运行 Django 使用 virtualenv 并且尝试添加自定义开发环境设置文件以在开发时简化应用程序配置 我的计划是用两行代码来完成此操作 if os environ get DEVELOPMENT None from l
  • 为什么 php rename() 会损坏我的文件?

    我正在使用 plupload 将多个文件上传到我的服务器 使用这个 有一个参数 url upload php upload php 在收到文件时捕获文件 如果文件被分块 可能会重新组合它们 收到完整文件后 它会将响应发送回原始页面 并显示绿
  • 如何测试你的Linux是否支持SSE2

    其实我有2个问题 SSE2兼容性是CPU问题还是编译器问题 如何检查您的CPU或编译器是否支持SSE2 我正在使用 GCC 版本 gcc GCC 4 5 1 当我尝试编译代码时 它给了我这个错误 gcc O3 msse2 fno stric
  • 谷歌浏览器扩展 :: console.log() 来自后台页面?

    如果我打电话console log something 从弹出页面或包含的任何脚本都可以正常工作 但是 由于后台页面不是直接从弹出页面运行 因此它不包含在控制台中 有什么方法可以让我得到console log 在后台页面中显示在弹出页面的控
  • 使用Java从多行字符串中删除空行

    我有一个多行字符串 其他行之间有一些空行 看起来像 def msg AAAAAA BBBBBB CCCCCC DDDDDD EEEEEE TEST FFFFF GGGGGG 我尝试了一些正则表达式 msg msg replaceAll n
  • 对文本文件中的每一行进行排序

    我有一个文本文件 其中每行包含一些单词 例如 stackoverflow coding programming tag question badges 我必须对每一行进行排序并保留行的顺序 例如 对于上面的例子 输出应该是 coding p
  • Azure 门户应用程序设置:“无法加载设置”(ReadOnlyDisabledSubscription)

    在 Azure 门户中 我选择我的 Web 应用程序 然后选择 应用程序设置 它显示以下内容 应用程序设置和连接字符串的错误消息 无法加载设置 我该如何解决 附加信息 与我具有相同权限的另一个用户在访问同一应用程序设置页面时也遇到了此问题
  • 允许弹性项目保持固定宽度并在容器内水平滚动[重复]

    这个问题在这里已经有答案了 我有一位家长正在使用display flex 目前它有四个子卡 卡 但可能有更多 所有的孩子都需要大但相等的宽度 例如 每个孩子都需要一个40 宽度 如果发生这种情况 屏幕上只能容纳一定数量的孩子 我需要能够做到
  • 在 $group 的 mongodb 聚合框架中使用 $regex

    考虑以下示例 db article aggregate group id author docsPerAuthor sum 1 viewsPerAuthor sum pageViews 这按作者字段分组并计算两个字段 我有 author F
  • ServletContext.getRequestDispatcher() 与 ServletRequest.getRequestDispatcher()

    why getRequestDispatcher 字符串路径 的 ServletRequest 接口不能 扩展到当前 servlet 之外 语境 where as getRequestDispatcher 字符串路径 的 ServletCo
  • WinForm 绑定场景中的数据上下文生命周期

    这个问题困扰了我有一段时间了 但我不是专家 这有点长 我有一个带有 Outlook 风格 UI 的 WinForms 应用程序 也就是说 左侧窗格上有一个栏 允许您选择一个 WinForms 控件 屏幕 例如客户屏幕 右侧窗格上将出现一个客
  • 如何将文件名与路径分开? basename() 与 preg_split() 和 array_pop()

    Why use basename 在 PHP 脚本中 如果这个函数实际执行的操作可以写成两行 subFolders preg split ui path explode on or name array pop subFolder extr
  • C# 帮助使用 StreamReader 读取外文字符

    我使用下面的代码来读取包含外来字符的文本文件 该文件采用 ANSI 编码 在记事本中看起来很好 下面的代码不起作用 当读取文件值并在数据网格中显示字符时 字符显示为正方形 其他地方是否还有其他问题 StreamReader reader n
  • 正则表达式仅按最后一个空格字符分割字符串

    希望这应该是一个快速而简单的方法 使用 PHP 我试图将一个字符串拆分为一个数组 但仅通过最后一个空格实例 到目前为止我已经 str hello this is a space arr preg split s str print r ar
  • 在 .NET Winforms 应用程序中创建图像按钮

    我正在尝试在 Visual Studio 2010 的 NET 4 0 Winforms 应用程序中创建一个按钮 该按钮只是一个图像 我有一个无边框的窗口 并有一个背景图像来构成该应用程序的自定义皮肤 对于窗口右上角的关闭 最小化按钮 我想
  • 如何在 python Discord 机器人中获取用户输入?

    我有一个 python discord 机器人 我需要它在命令后获取用户输入 我该怎么做 我是 python 和制作不和谐机器人的新手 这是我的代码 import discord datetime time from discord ext