Как узнать время голосовой активности в дискорде
Перейти к содержимому

Как узнать время голосовой активности в дискорде

  • автор:

Как узнать время у пользователя Discord?

Я тестирую бота в Discord и пытаюсь получить текущее время в часах у пользователя, в каком часовом поясе он находиться не известно. Естественно datetime.now() и datetime.now(pytz.timezone(‘Europe/Moscow’)) у пользователя дают одинаковый результат, потому что он показывает время моего запущенного клиента. Как я могу получить время пользователя?

Отслеживать
задан 24 июл 2021 в 12:55
Поляков Роман Поляков Роман
785 4 4 серебряных знака 16 16 бронзовых знаков

Если вы посмотрите документацию, то заметите, что User не хранит никакой информации о часовом поясе или локальном времени, а значит получить эту информацию адекватным путем не получится

27 июл 2021 в 22:09

1 ответ 1

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

Похожий вопрос уже задавали на английском stackoverflow, насколько я знаю, с того момента ничего не изменилось.

Встраивание Discord имеет timestamp поле, которое можно установить для datetime объекта. К сожалению, невозможно определить часовой пояс пользователя через API, предоставляемым Discord.

Вы можете просмотреть документацию по классу встроенных данных discord.py.

Отслеживать
ответ дан 27 июл 2021 в 22:25
304 1 1 серебряный знак 8 8 бронзовых знаков
Ещё есть message.created_at, но как я понял он просто выдает время по UTC?
28 июл 2021 в 9:26
@ПоляковРоман, да, по UTC
28 июл 2021 в 10:04

embed.set_timestamp установит таймстамп встраиванию, но никак не поможет помочь получить часовой пояс пользователя. discord.User не хранит никакой информации о часовом поясе или локальном времени, и получить её, к сожалению, никак нельзя.

Как считать время проведенное в голосовом канале? | discord.py

У меня есть код, который реагирует на вход в голосовой, и выход из него. При входе пишется «1», при выходе «0». Как мне его изменить, чтобы он еще и считал время проведенное в голосовом канале.

@bot.event async def on_voice_state_update(member, before, after): if before.channel is None and after.channel is not None: print('1') elif before.channel is not None and after.channel is None: print('0') 

Отслеживать
задан 21 дек 2020 в 11:50
187 1 1 серебряный знак 9 9 бронзовых знаков

2 ответа 2

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

считал время проведенное в голосовом канале

А в чём пробела-то ? Засепкаем время при входе, аналогично — при выходе. И берём их разницу:

import time if before.channel is None and after.channel is not None: print('1') t1 = time.time() elif before.channel is not None and after.channel is None: t2 = time.time() print('0') print(t2-t1) 

Отслеживать
ответ дан 21 дек 2020 в 12:02
13.5k 1 1 золотой знак 14 14 серебряных знаков 31 31 бронзовый знак

Выдает ошибку при выходе из голосового канала: 1 0 Ignoring exception in on_voice_state_update Traceback (most recent call last): File «C:\Users\**\AppData\Local\Programs\Python\Python37\lib\site-packages\discord\client.py», line 333, in _run_event await coro(*args, **kwargs) File «main.py», line 163, in on_voice_state_update print(t2-t1) UnboundLocalError: local variable ‘t1’ referenced before assignment

21 дек 2020 в 12:05
функция реагирует либо только на вход, либо только на выход
21 дек 2020 в 12:08

@VOLK -«before assignment» — Ну значит, у Вас событие «Окончание» наступило раньше события «Начало». Надо понимать — это начальное состояние? Да просто перед if сделайте присвоение t1 = time.time() и первое значение длительности сеанса всегда будет равно 0.

21 дек 2020 в 12:10

@VOLK — «функция реагирует либо только на вход, либо только на выход» — Ну это к измерению времени не имеет никакого отношения. Проблема где-то в другом месте.

21 дек 2020 в 12:12
Отметил Ваш ответ правильным, хотя ответил сам. Вы мне подали идею можно сказать)
21 дек 2020 в 12:43

import time @bot.event async def on_ready(): print('Bot Connected') global tdict tdict = <> await bot.change_presence(activity = discord.Game('r!help')) @bot.event async def on_voice_state_update(member, before, after): author = member.id if before.channel is None and after.channel is not None: print('1') t1 = time.time() tdict[author] = t1 elif before.channel is not None and after.channel is None and author in tdict: t2 = time.time() print('0') print(t2-tdict[author]) 

Отслеживать
ответ дан 21 дек 2020 в 12:40
187 1 1 серебряный знак 9 9 бронзовых знаков

  • python
  • discord
  • discord.py
    Важное на Мете
Связанные
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

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

Как посмотреть время, когда человек был в Discord

Discord является игровым мессенджером, с помощью которого пользователи взаимодействуют друг с другом. Функционал приложения довольно простой и поддерживается не только ПК, но и мобильными устройствами. Общаясь, игроки поддерживают особые отношения в сети. Кто-то начинает дружить или уже привел с собой друга, кто-то держится особняком, разрабатывая особые стратегии игры. Поведение пользователей различается, но по разным причинам многие из них интересуются вопросом: как посмотреть, когда человек был в Дискорде. О наличии этой функции, а также возможностях Discord и пойдет речь в данной статье.

как посмотреть когда человек был в дискорде

Статусы Discord и их обозначение в мессенджере

Как и большинство мессенджеров, Дискорд может автоматически настраивать статусы активности игроков. Также сами пользователи имеют возможность менять значение своих статусов.

Дискорд поддерживает четыре типа активности:

  • Онлайн, т.е. «в сети»;
  • «Не активен» — режим ожидания;
  • «Не беспокоить»;
  • «Не в сети» или «Невидимка».

как узнать когда заходил человек в дискорд

Краткое описание статусов

  • Статус «В сети» включается автоматически, как только игрок активирует приложение и заходит в него. В этом режиме пользователь проводит активные действия, получает уведомления и наряду со всеми отображается в общем списке игроков. На профиле статус отображается в виде зеленого кружка.
  • Статус «Не активен» производен от первого. Он включается автоматически, если не было активных действий. Приложение работает в спящем режиме. Как только игрок щелкает мышью, статус также в автоматическом режиме переставляется на активный, т.е. «В сети». Если режим был установлен вручную, то вернуться к статусу онлайн можно только изменив настройки. Отсутствие активности отображается желтым цветом.
  • Красный кружок на профиле означает статус «Не беспокоить». В этом режиме в отличие от предыдущих не приходят уведомления.
  • Отсутствие пользователя отображается серым цветом. При выходе из игры и Дискорда пользователь получает статус «Не в сети». Однако есть небольшая хитрость, и игрок сам может поставить себе такой статус, который в этом случае будет называться «Невидимка».

Точно узнать, в каком статусе находится игрок, можно по цвету на его профиле. Но из описанных функций Discord понятно, что не всегда статус неактивности означает отсутствие пользователя. Однозначным является только режим онлайн. Зеленый цвет всегда означает присутствие игрока и его активность.

как узнать когда человек последний раз заходил в дискорд

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

Помимо изменяемых настроек для отображения активности в профиле пользователь может устанавливать свой статус. Так есть возможность написать определенный текст и вставить эмодзи. Эта информация доступна для каждого и видна рядом с никнеймом.

Функционал Дискорда позволяет видеть всех участников с установленными ими статусами. Для этого делается следующее:

  • Зайдите в приложение Дискорд;
  • Найдите список серверов;
  • Нажмите на значок над списком «Friends»;
  • Откроется индивидуальный список друзей.

можно-ли в дискорд узнать, когда человек заходил

В данном меню можно увидеть несколько блоков:

  • «All» — список всех друзей;
  • «Online» — только активные друзья в статусе «в сети»;
  • «Pending» — в ожидании;
  • «Blocked» — заблокированные пользователи.

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

Частые вопросы:

  • Как посмотреть список друзей друга в Discord
  • Как в Discord сделать статус «Не в сети»
  • Что такое Дискорд Онлайн, и как им пользоваться
  • Как включить звук при демонстрации экрана в Дискорд Онлайн

Как сделать проверку, сколько времени человек находится в голосовых каналах на сервере дискорд?

Vindicar

1. Читаешь https://discordpy.readthedocs.io/en/latest/api.htm. . Там перечислены все события, которые можно отлавливать через discord.py. Нас интересует discord.on_voice_state_update(member, before, after), он позволяет реагировать на вход и выход пользователей на голосовых каналах. Также важно: потребуется при запуске бота указать интент Intents.voice_states, иначе события не получим.
2. Разбираешься, как сравнивать параметры `before` и `after`, чтобы понять вошел пользователь или вышел. Оба — структура VoiceState.
3. Описываешь структуру данных, где хранишь время последнего входа пользователя в голосовой канал. Например, словарь, где id пользователя на сервере — ключ, а время — значение. Если нужна независимая регистрация по каналам, то тогда id канала должно входить в состав ключа.
4. На входе пользователя вносишь запись в этот словарь. На выходе пользователя — ищешь запись, находишь разность между запомненным временем входа и текущим временем, удаляешь запись. Предусмотри случай если записи нет.
5. PROFIT. С этой разностью уже делаешь что хочешь, в БД заносишь, или ещё что.

Ответ написан более двух лет назад

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

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