【问题标题】:Discord.py --> channel.mentionDiscord.py --> channel.mention
【发布时间】:2019-02-07 12:24:24
【问题描述】:

我正在尝试为不和谐服务器制作一个机器人,它只是侦听特定消息,删除它们,然后将用户引向不同的文本频道(在可点击的链接中提及它)

这是我现在拥有的:

import Discord
import asyncio


client = discord.Client()


@client.event
async def on_message(message):
    msg = '{0.author.mention}\nWrong text channel\nUse '.format(message)
    if message.content.startswith('!p'):
        await client.delete_message(message)
        await client.send_message(message.channel, msg)
    return


client.run('')

理想情况下,我还想用startswith() 搜索列表,而不仅仅是('!p') 并忽略来自特定文本频道的所有消息,但我也不知道该怎么做

【问题讨论】:

  • 嗨,欢迎来到 Stack Overflow!我已经为你所有的问题添加了答案。将来尝试将性质不同的问题作为单独的帖子发布。查看how to ask a good question。祝你好运!
  • 请不要通过破坏您的帖子为他人增加工作量。通过在 Stack Exchange (SE) 网络上发帖,您已在 CC BY-SA 3.0 license 下授予 SE 分发该内容的不可撤销权利(即无论您未来的选择如何)。根据 SE 政策,帖子的非破坏版本是分发的版本。因此,任何破坏行为都将被撤销。如果您想了解更多关于删除帖子的信息,请参阅:How does deleting work? ...

标签: python discord discord.py


【解决方案1】:

不知道您的问题是否已解决,但对于所有关注此线程的未来开发人员。让机器人提及频道的超级简单方法是这样的......

<#channelID>

如果频道 ID 是您希望提及的特定频道的不和谐 ID。

举个例子

await message.channel.send("Please go to <#channelID>")

老实说,我有点困惑,这个帖子上没有人提到过这一点,所以我觉得我错过了一些你们都已经知道的东西,哈哈。

【讨论】:

  • 你没有错过任何东西,这对我来说非常适合!
【解决方案2】:

当然,只需添加text_channel = client.get_channel('1234567890') 并使用text_channel.mention 引用它(其中1234567890 是您要链接到的频道的ID)

所以代码最终会看起来像这样

@client.event
async def on_message(message):
  text_channel = client.get_channel('1234567890')
  msg = '{0.author.mention}\nWrong text channel\nUse {1.mention}'.format(message,text_channel)
  if message.content.startswith('!p'):
      await client.delete_message(message)
      await client.send_message(message.channel, msg)
  return

关于你的第二个问题,你可以这样做

  arr = ['!p','!a','!b']
  for a in arr:
    if message.content.startswith(a):
      break
  else:
    return

并完全删除if message.content.startswith('!p'):

要忽略特定频道,只需在函数顶部执行if message.channel.id == "9876543210":9876543210 是您要忽略命令的频道的 ID)
通过这些更改,代码看起来像这样

@client.event
async def on_message(message):
  if message.channel.id == "9876543210":
    return
  arr = ['!p','!a','!b']
  for a in arr:
    if message.content.startswith(a):
      break
  else:
    return
  text_channel = client.get_channel('1234567890')
  msg = '{0.author.mention}\nWrong text channel\nUse {1.mention}'.format(message,text_channel)
  await client.delete_message(message)
  await client.send_message(message.channel, msg)
  return

【讨论】:

  • 这行得通,除了机器人不识别任何超过第二个匹配的消息,有时由于某种原因只识别第一个列表索引
  • 更新:频道 ID 现在是 INT,所以删除 ''
猜你喜欢
  • 2021-01-07
  • 2021-03-24
  • 2020-09-18
  • 2021-02-04
  • 2020-09-30
  • 2020-05-06
  • 2020-09-16
  • 2020-05-22
  • 1970-01-01
相关资源
最近更新 更多