Перейти к содержимому

Как получить id канала discord py

  • автор:

[DISCORD.PY] Как узнать id и название канала и сервера, куда было отправлено сообщение при условии async def on_message(message)?

Здравствуйте, есть бот, который принимает все сообщения с серверов ,где он есть. Мне нужно сортировать эти сообщения. А для этого нужно знать , откуда и кем оно было отправлено. Не могли бы вы мне подсказать, как узнать на машинном уровне, в точности куда было отправлено ссобщение(ID и название сервера и канала)?

  • Вопрос задан более трёх лет назад
  • 9564 просмотра

2 комментария

Простой 2 комментария

Discord.py Как получить Id канала через упоминания [закрыт]

Закрыт. Этот вопрос необходимо уточнить или дополнить подробностями. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение.

Закрыт 2 года назад .
Как получить Id канала через упоминания
Отслеживать
задан 13 окт 2021 в 14:53

Пожалуйста, уточните вашу конкретную проблему или приведите более подробную информацию о том, что именно вам нужно. В текущем виде сложно понять, что именно вы спрашиваете.

13 окт 2021 в 14:56

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

В следующий раз, пожалуйста, постарайтесь конкретизировать Ваш вопрос.

Вот как я понял Вашу задачу: Вам необходимо получить ID канала из упоминания при использовании команды ( .команда #канал ).
Вот решение:

@bot.command() async def command(ctx, channel:discord.Channel): await ctx.send(f'ID канала: ') 

Отслеживать
ответ дан 13 окт 2021 в 21:57
860 4 4 серебряных знака 14 14 бронзовых знаков

  • python
  • discord
  • discord.py
  • discord-api
    Важное на Мете
Похожие

Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.11.15.1019

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

DISCORD.py как получить id канала по его названию? или другой способ отправлять сообщение в канал?

Я хочу сделать, чтобы боту при подключении можно было вручную настроить, в какие каналы он будет писать сообщения.
Например подтверждения регистрации он будет читать и писать только из registration, но как сделать так, чтобы можно было ему прописать допустим

!permission register-main_channel

т е как получить id канала зная название? или можно обращаться к каналу зная только название? например можно ли заменить в следующем случае id на name?

@bot.event async def on_member_join(member): channel = bot.get_channel(8152*******905) #здесь числовой id, можно ли заменить на название? await channel.send(embed=discord.Embed( description=f", приветствуем!"))
  • Вопрос задан более двух лет назад
  • 2835 просмотров

Общее

Общие вопросы, касающиеся использования библиотеки, относятся сюда.

Это содержание было взято непосредственно из документации и унаследованно от discord.py . Скорее всего, в будущем оно будет переписано.

Где я могу найти примеры использования?​

Пример кода можно найти в папке примеры.

Как мне установить статус «Играет в»?​

Именованный аргумент activity может быть передан в конструкторе commands.Bot или Bot.change_presence , учитывая ссылку Activity объект.

Конструктор может использоваться для статических активностей, в то время как Bot.change_presence может использоваться для обновления активности во время выполнения.

Настоятельно не рекомендуется использовать Bot.change_presence или вызовы API в on_ready , поскольку это событие может вызываться много раз во время выполнения, не только один раз. Существует высокая вероятность отключения, если присутствие будет изменено сразу после подключения.

Тип статуса можно задать с помощью ActivityType . В целях оптимизации памяти некоторые действия предлагаются в уменьшенных версиях:

Собрав обе эти части информации вместе, вы получите следующее:

bot = commands.Bot(..., activity=disnake.Game(name="игру"))  # Или просмотр: activity = disnake.Activity(  name="ютуб", type=disnake.ActivityType.watching, ) bot = commands.Bot(..., activity=activity) 

Как мне отправить сообщение в определенный канал?​

Вы должны получить канал напрямую, а затем вызвать соответствующий метод. Например:

channel = bot.get_channel(12324234183172) await channel.send("привет") 

Как мне отправить сообщение в ЛС?​

Вы должны получить объект User или Member и вызвать метод send() . Например:

user = bot.get_user(381870129706958858) await user.send("��") 

Если вы отвечаете на событие, например на on_message , у вас уже есть ссылка на объект User через Message.author :

await message.author.send("��") 

Как мне получить ID отправленного сообщения?​

Метод abc.Messageable.send возвращает ссылку на Message , которое было отправлено. К ID сообщения можно получить доступ через Message.id :

message = await channel.send("хмм…") message_id = message.id 

Как мне загрузить изображение?​

Чтобы загрузить что-либо в Discord, вы должны использовать объект File .

Объект File принимает 2 параметра, файлоподобный объект (или путь к файлу) и имя файла для передачи в Discord при загрузке.

Если вы хотите загрузить изображение, это так же просто, как:

await channel.send(file=disnake.File("my_file.png")) 

Если у вас есть файлоподобный объект, вы можете сделать следующее:

with open("my_file.png", "rb") as fp: await channel.send(file=disnake.File(fp, "new_filename.png")) 

Чтобы загрузить несколько файлов, вы можете использовать именованный аргумент files вместо file :

my_files = [  disnake.File("result.zip"),  disnake.File("teaser_graph.png"), ] await channel.send(files=my_files) 

Если вы хотите загрузить что-то с URL-адреса, вам придется использовать HTTP-запрос с использованием aiohttp , а затем передайте io.BytesIO экземпляр в File вот так:

import io import aiohttp  async with aiohttp.ClientSession() as session: async with session.get(my_url) as resp: if resp.status != 200: return await channel.send("Невозможно загрузить файл. ")  data = io.BytesIO(await resp.read()) await channel.send(file=disnake.File(data, "cool_image.png")) 

Как я могу добавить реакцию на сообщение?​

Вы можете использовать метод Message.add_reaction .

Если вы хотите использовать эмодзи в юникоде, вы должны передать допустимую кодовую точку юникода в строке. В вашем коде вы можете написать это несколькими различными способами:

emoji = "\N" # или '\U0001f44d' или '��' await message.add_reaction(emoji) 

Если вы хотите использовать эмодзи, которые приходят из сообщения, вы уже получаете их кодовые точки в содержимом, не делая ничего особенного. Вы не можете отправить ‘:thumbsup:’ стиль сокращений.

Для пользовательских эмодзи вы должны передать экземпляр Emoji . Вы также можете передать строку , но если вы можете использовать указанный смайлик, вы должны быть в состоянии использовать Bot.get_emoji , чтобы получить смайлик через ID или использовать utils.find или utils.get на Bot.emojis или Guild.emojis .

Имя и ID пользовательского смайлика можно найти в клиенте, добавив слэш к :custom_emoji: . Например, отправка сообщения \:python3: приведет к .

# Если у вас уже есть ID emoji = bot.get_emoji(310177266011340803) await message.add_reaction(emoji)  # Нет ID, выполните поиск emoji = disnake.utils.get(guild.emojis, name="LUL") if emoji: await message.add_reaction(emoji)  # Если у вас есть имя и ID пользовательского смайлика: emoji = "" await message.add_reaction(emoji) 

Как мне пропустить короутайн функции плеера «after»?​

Музыкальный проигрыватель библиотеки запускается в отдельном потоке, следовательно, он не выполняется внутри короутайна. Это не означает, что невозможно вызвать короутайн в параметре after . Для этого вы должны передать вызываемый объект, который включает в себя несколько аспектов.

Первое, о чем вы должны знать, — это то, что вызов короутайна не является потокобезопасной операцией. Поскольку технически мы находимся в другом потоке, мы должны проявлять осторожность при вызове потокобезопасных операций, чтобы не допустить сбоев. К счастью для нас, asyncio поставляется с asyncio.run_coroutine_threadsafe функция, которая позволяет нам вызывать короутайн из другого потока.

Однако эта функция возвращает Future , и чтобы действительно вызвать его, мы должны получить его результат. Собрав все это вместе, мы можем сделать следующее:

def my_after(error):  coro = some_channel.send("Песня закончена!")  fut = asyncio.run_coroutine_threadsafe(coro, bot.loop) try:  fut.result() except: # Произошла ошибка при отправке сообщения pass  voice.play(disnake.FFmpegPCMAudio(url), after=my_after) 

Как мне запустить что-то в фоновом режиме?​

Как мне получить конкретную модель?​

Есть несколько способов сделать это. Если у вас есть ID конкретной модели, вы можете использовать одну из следующих функций:

Следующее использует HTTP-запрос:

  • abc.Messageable.fetch_message
  • Bot.fetch_user
  • Bot.fetch_guilds
  • Bot.fetch_guild
  • Bot.fetch_emojis
  • Bot.fetch_emoji
  • Bot.fetch_member

Если вышеприведенные функции вам не помогают, то использование utils.find или utils.get может быть полезно для поиска конкретных моделей.

# Найдите сервер по названию guild = disnake.utils.get(bot.guilds, name="My Server")  # Обязательно проверьте, найден ли он if guild is not None: # Поиск канала по названию  channel = disnake.utils.get(guild.text_channels, name="cool-channel") 

Как мне сделать веб-запрос?​

Чтобы сделать запрос, вы должны использовать неблокирующую библиотеку. Эта библиотека уже использует и требует стороннюю библиотеку для выполнения запросов, aiohttp .

async with aiohttp.ClientSession() as session: async with session.get("http://aws.random.cat/meow") as r: if r.status == 200:  js = await r.json() 

Смотрите полную документацию по aiohttp для большей информации.

Как мне использовать локальный файл изображения для изображения в эмбеде?​

Настройка локального изображения для эмбеда может быть выполнена с помощью аргумента file в методе Embed.set_image . Он принимает File объект.

embed = disnake.Embed() embed.set_image(file=disnake.File("path/to/file.png")) await channel.send(embed=embed) 

Существует ли событие для создания записей журнала аудита?​

Поскольку Discord не отправляет эту информацию в шлюз, библиотека не может предоставить эту информацию. В настоящее время это ограничение Discord.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

https://kapelnicza.vyvod-iz-zapoya-v-stacionare-samara12.ru/