我正在尝试为discord服务器制作一个机器人,它只是简单地监听特定的消息,删除它们,然后将用户引导到不同的文本频道(通过提及它在可点击的链接中)
这是我现在所拥有的:
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')来搜索列表&忽略来自特定文本通道的所有消息,但我也不确定该如何做
发布于 2018-09-02 08:38:18
当然,只需添加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发布于 2020-07-04 01:49:38
不知道你的问题是否解决了,但对于所有关注这个主题的未来开发人员来说。让机器人提到一个频道的一个非常简单的方法是这样的……
<#channelID>were通道ID是您想要提及的特定通道的不一致ID。
在一个例子中
await message.channel.send("Please go to <#channelID>")老实说,我有点困惑,因为这个帖子上没有人提到这一点,所以我觉得我遗漏了一些你们都已经知道的东西。
https://stackoverflow.com/questions/52132913
复制相似问题