Discord.py -> channel.mention - PullRequest
       7

Discord.py -> channel.mention

0 голосов
/ 02 сентября 2018

Я пытаюсь создать бота для сервера разногласий, который просто прослушивает определенные сообщения, удаляет их, а затем направляет пользователя к другому текстовому каналу (по ссылке, на которую можно кликнуть, упоминая его)

Вот что у меня сейчас:

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') и игнорировать все сообщения из определенного текстового канала, но я не уверен, как это сделать либо

1 Ответ

0 голосов
/ 02 сентября 2018

Конечно, просто добавьте text_channel = client.get_channel('1234567890') и укажите его упоминание с text_channel.mention (где 1234567890 - идентификатор канала, на который вы хотите перейти)

Таким образом, код будет выглядеть примерно так

@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 - это идентификатор канала, с которого вы хотите игнорировать команды)
С этими изменениями код выглядит так

@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
...