Как получить пользователя по id discord py

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

await ctx.send(id)
user9064615 27 окт ’18 в 20:38 2018-10-27 20:38
2018-10-27 20:38

3 ответа

Используйте конвертер, чтобы получить User объект:

Или получить id автора:

user6779307 27 окт ’18 в 21:07 2018-10-27 21:07
2018-10-27 21:07
user9064615 28 окт ’18 в 11:38 2018-10-28 11:38
2018-10-28 11:38

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

Список Участников, которые были упомянуты. Если сообщение находится в личном сообщении, то вместо этого в списке будет пользователь.

Когда вы проходите через ctx.message.mentions , каждый элемент является упомянутым членом с такими атрибутами, как идентификатор, имя, дискриминатор. Вот еще один пример цикла по упомянутому списку для обработки каждого участника, который был упомянут:

for user_mentioned in ctx.message.mentions: # Now we can use the .id attribute. print(f»‘s ID is «)

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

How to Make a Discord Bot with Python

  • для пользователя или команды, отправленной из мобильного приложения:
  • для псевдонима или команды, отправленной из настольного приложения:

Вот почему я предпочитаю получать идентификатор из атрибута участника/пользователя.

Источник: stackru.com

Discord.py: получить объект пользователя с идентификатором

У меня есть бот, который сохраняет только идентификатор пользователя (лучше так работает). Теперь я хочу получить объект пользователя из этого идентификатора.

Еще по теме:  Использование discord для видеоконференций

Я попробовал подписаться, но у меня ничего не вышло, возможно, я что-то сделал не так .

client = discord.Client client.get_user(id)
import discord class MyClient(discord.Client): ntd = name_table.get_all_records() #google sheets api: returns a list of dicts async def on_message(self, message): print(message.content[1]) if message.author == client.user: return if isinstance(message.channel, discord.channel.DMChannel): await self.handle_DM(message) if message.content[0] == «/»: if message.content.split(» «)[0].lower() == «/rank»: await self.rank_command(message) async def rank_command(self, message): if len(message.content.split(» «)) < 2: await message.channel.send( message.author.mention + «/rank takes 2 or 3 arguments.

Do ‘/rank ?’ for help.») try: if message.content.split(» «)[1] == «?»: await self.help(«rank», message) return except: pass try: if message.content.split(» «)[1] == «top»: await self.top_rank_command(message) return except: pass async def top_rank_command(message): print(«Top rank entered») _user = await client.fetch_user(372746847393021953) #my id: Cluebo#2312 print(_user) print(«Top rank end»)

How To Get USER INPUT In DISCORD.PY | Part 10: User Input

Выполнив это, он будет печатать только «Top rank entered» , но не user или «Top rank end» Однако я не получил сообщения об ошибке. На этом метод просто останавливается (бот работает на Heroku). Заранее спасибо!

benicamera 6 Сен 2020 в 23:33

2 ответа

Лучший ответ

Есть два способа получить пользователя по идентификатору:

  • Client.fetch_user(id) ( или Bot.fetch_user(id) ) → возвращает discord.User объект
  • Guild.fetch_member(id) → возвращает объект discord.Member

Вот несколько примеров (с использованием как Client , так и Bot ):

В этих примерах вам просто нужно написать !find [id] в discord, и он напечатает объект, который он получил в вашем терминале.

Mr_Spaar 7 Сен 2020 в 16:52

Client.fetch_user (id (int)) — это сопрограмма. Это означает, что мне нужно добавить await , поэтому он должен быть _user = await client.fetch_user(id) . Убедитесь, что идентификатор правильный, потому что может случиться так, что сценарий остановится без ошибок.

Еще по теме:  Как красиво оформить дискорд сервер

Источник: question-it.com

Discord.py: Как мне получить пользователя по UserID?

Да, как я уже сказал, я не могу использовать контекст, потому что он не будет выполняться пользователем, а также я попытался определить его как целое число, и это не сработало. — person DevSalty; 04.02.2021

Невозможно вызвать команду без контекста. Как тогда вы вызываете команду? — person Łukasz Kwieciński; 04.02.2021

Я вызываю его из task.loop каждые 10 секунд. — person DevSalty; 04.02.2021

И почему тогда это должна быть команда? Разве это не обычная сопрограмма? — person Łukasz Kwieciński; 04.02.2021

Я хочу, чтобы бот предоставил мне таблицу лидеров, но я регистрирую только идентификатор пользователя, и я не хочу, чтобы он отображался в таблице лидеров. — person DevSalty; 04.02.2021

Это не отвечает на мой вопрос — person Łukasz Kwieciński; 04.02.2021

У меня нет опыта работы с Discord.py, поэтому я действительно не знаю, почему я не мог им быть. Итак, что вы посоветуете? Если это может быть корутин. — person DevSalty; 04.02.2021

Поместите его как обычную асинхронную функцию и вызовите внутри цикла, нет необходимости делать это командой — person Łukasz Kwieciński; 04.02.2021

Что ж, я так и сделал, просто сделал так, чтобы было понятнее. — person DevSalty; 04.02.2021

Хорошо, я изменил в основном весь пост, вы можете понять, в чем проблема? — person DevSalty; 04.02.2021

Это сработало, большое спасибо за вашу помощь! c: — person DevSalty; 04.02.2021
Хорошо, рад помочь — person Łukasz Kwieciński; 04.02.2021
В зависимости от того, что вы пытаетесь сделать, вам, вероятно, не хватает намерений.

Учтите, что приведенный выше код возвращает пользовательский объект, не являющийся членом. Это различие важно, если ваша таблица лидеров связана с определенным сервером. Кроме того, у объекта пользователя нет таких атрибутов, как роли, псевдоним и т. Д. Если вы хотите получить эту информацию, вам нужно получить объект-член, используя ctx.guild.get_member вместо bot.get_user

Еще по теме:  Как сделать eval в discord py

Источник: digitrain.ru

Рейтинг
( Пока оценок нет )
Загрузка ...