Ответы пользователя по тегу Discord
  • Проблема с ботом discord на python?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    С некоторых пор API Discord больше не позволяет по умолчанию ботам видеть содержимое сообщений. Нужно явно запросить message_content intents:

    intents.message_content = True

    А также надо включить privileged intents в developer portal для этого бота.
    Ответ написан
    3 комментария
  • Как сделать так, что бы бот на disnake увидел мемберов?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Необходимо добавить member intents. А также включить privileged intents в настройках бота в developer portal. Документация. Вообще, примеров на эту тему в интернете море.
    Ответ написан
    Комментировать
  • Как сделать await purge(limit=1) в disnake?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Обработчик on_message принимает в качестве параметра сообщение (тип Message), а не interaction context. А у сообщения есть метод delete. Так что использование purge тут совершенно не к месту. Открою секрет: удалять вообще что бы то ни было единичное с помощью purge - плохая идея. Пока бот обрабатывает событие, в канале могут появиться новые сообщения. Purge нужно только для масштабной очистки.

    @client.event
    async def on_message(message):
        await message.delete()
        temporary_message = message.reply(...)
        await asyncio.sleep(30)
        await temporary_message.delete()
    Ответ написан
    5 комментариев
  • Как получить Текущую карту на сервере CS:GO с помощью python?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    С помощью протокола a2s, и вот похожий вопрос https://qna.habr.com/q/1154466
    Ответ написан
  • Discord.py Хочу сделать команду autoclear и присвоить ее каналу, но не пойму как это реализовать?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    только начал изучать питон


    В этом-то и заключена проблема. Разумеется, если не понимать, что делаешь, то будет получаться непонятно что.

    В данном случае что происходит?

    1. Мы ловим любое сообщение на любом сервере, где есть бот, в любом из каналов, которые боту видны.

    2. Затем мы зачем-то получаем канал с фиксированным id.

    3. Затем мы обращаемся в этом канале к свойству message (а оно там есть? и что это будет, сообщение? какое?) и от него вызываем метод delete, причём с параметром message.

    В результате даже если этот, с позволения сказать, код удастся запустить, он работать всё равно не будет, зато будет кидать ошибки.

    Не нужно пытаться наугад писать бота. Это как пытаться залить бензин в автомобиль куда получается: в бачок для масла, в выхлопную трубу, в нипель на колесе... - в надежде, что она всё-таки поедет.

    Увы, но нет. Сначала надо освоить язык, начиная с элементарных основ, описываемых в учебнике. А уж потом переходить к более сложным темам.
    Ответ написан
  • Хочу сделать смену префикса бота командой, но получаю ошибку, как исправить?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Очевидно, что в файле prefixes.json не json, вот и ругается при попытке его прочитать как json.
    Ответ написан
    Комментировать
  • Как использовать слэш команды в дискорде с помощью бота?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Во-первых, слеш-команды - это НЕ сообщения, начинающиеся на /, а отдельные сущности со своей инфраструктурой и своим способом взаимодействия. На это вполне намекает, что у разных ботов могут быть команды с одинаковыми именами, а ответ бота может быть виден только отправившему команду пользователю. Отправка ботами команд для других ботов не предусмотрена вообще.

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

    Посылать команды может разве что юзербот, но их использование запрещено правилами Discord.
    Ответ написан
  • Как создать бота для discord на python?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Есть целый ряд библиотек на Python с реализацией Discord API, но почти всеми никто не пользуется, за исключением одной - discord.py. Библиотека настолько хороша, что весь интернет усыпан примерами и решениями именно с её использованием, а про другие никто и не знает почти. К сожалению, автор забросил разработку по личным причинам, но есть форки, идентичные натуральным, в частности, disnake, nextcord, pycord. Но многие до сих пор пользуются оригинальной библиотекой. Для указанной в вопросе функциональности её возможностей более чем хватает, нет только поддержки новомодных slash commands, но если они понадобятся - то перейти на любой форк можно почти безболезненно, так как они полностью совместимы с оригиналом.

    Раздача ролей и обработка команд на основе роли - это настолько популярный вопрос у начинающих ботописателей, что повсюду (и на этом сайте в том числе) просто море вопросов, ответов, примеров, советов итд итп по этой тематике.
    Ответ написан
    Комментировать
  • Почему команды бота(discord.py) не обновляются?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Они могут обновляться не сразу, а в течение часа.
    Ответ написан
  • Как остановить выполнение цикла командой?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Нужно вместо while True гонять цикл по какому-то другому условию, которое рано или поздно изменится. Например, можно завести глобальную переменную, задавать ей True в команде запуска, а в команде остановки выставлять False. Да, это очень дурацкое решение, так как нельзя будет использовать команду в разных каналах одновременно. Но как бы и задача сама по себе очень дурацкая, явно попытка научиться делать ну хоть что-нибудь...

    Обычно если нужно делать какие-то регулярные задачи для бота, применяют другие решения. Например, расширение tasks или модуль aioschedule. Длинный цикл в обработчике команды - это часто не очень хорошее решение. Например, если бот будет перезапущен, цикл не будет запущен заново, а если задачи цикла хранятся в сохраняемой между перезапусками очереди - то перезапуск бота не будет влиять на этот функционал.
    Ответ написан
    3 комментария
  • Что делать если не работают команды кроме bot event?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Это весьма популярная проблема, и решение есть в официальном FAQ https://discordpy.readthedocs.io/en/stable/faq.htm...
    Ответ написан
    Комментировать
  • Как исправить ошибку SQLite3, Discord Bot?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Смотри, допустим, emoji у тебя равно :duck:, тогда будет выполнен следующий запрос:

    INSERT INTO emo VALUES (:duck:)

    А надо было:

    INSERT INTO emo VALUES (':duck:')

    Теперь понятно?

    Ладно, допусим, ты вставишь в запрос кавычки, дальше кто-нибудь добавит в код эмодзи кавычки и сможет заставить скрипт выполнить такой запрос:

    INSERT INTO emo VALUES ('');DROP TABLE emo;--')

    После чего таблица emo будет удалена. Нельзя просто так вставлять в запрос то, что передаёт пользователь. Надо использовать плейсхолдеры:

    cursor.execute("INSERT INTO emo VALUES (?)", (emoji,))


    В этом случае база сама позаботится о том, чтобы правильно использовать значения в запросах с учётом синтаксиса.
    Ответ написан
    Комментировать
  • При входе на сервер функция отвечающая за ввод данных в db не работает. тоже самое происходит с функцией, которая вызывается коммандой. что делать?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    По умолчанию Discord не присылает события on_member_join, для этого надо явно включить member intents.

    intents = discord.Intents.default()
    intents.members = True
    client = commands.Bot(command_prefix='!', intents=intents)
    Ответ написан
    Комментировать
  • Как мне сделать такую статистику на discord.py?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Видно же, что это голосовые каналы.

    Нужно создать два голосовых канала с закрытым для всех доступом, в имени которых указать число пользователей. Также в боте отслеживать приходящих-уходящих и переименовывать эти каналы. Предвосхищая вопросы, напомню, что за готовыми решениями добро пожаловать на фриланс.
    Ответ написан
  • Есть ли в Telegram возможность отправлять сообщение через вебхук, или что-то подобное?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    API Телеграма сам по себе решает эту задачу, например, отправка текстового сообщения выглядит так:

    https://api.telegram.org/botТОКЕН/sendMessage?chat_id=-12345&text=Сообщение


    Отправка фото через /sendPhoto, отправка видео с помощью /sendVideo, итд.
    Ответ написан
    Комментировать
  • Как установить аватар?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Там же есть документация и даже с примером. Он, конечно, на js, но из него и так всё ясно: надо передать параметр avatar со ссылкой на аватарку,

    Установить никак. Боты не могут менять аватарки пользователей.
    Ответ написан
    Комментировать
  • Discord Бот выдающий роль по необходимому сообщению?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    add_roles - метод класса discord.Member, а не discord.Client. Соответственно, его надо вызывать от правильного объекта. В данном случае самый простой способ получить инстанс Member отправителя данного сообщения - это обратиться к message.author:

    await message.author.add_roles(role)

    При этом role тут должно быть не id роли, а объект discord.Role. Который можно получить методом get_role класса discord.Guild. А его для Member можно получить из поля guild.

    Итого получается, что нам надо:

    author = message.author
    guild = author.guild
    role = guild.get_role(898612321755230260)
    await author.add_roles(role)


    Или если собрать в одну строчку:

    await message.author.add_roles(message.author.guild.get_role(898612321755230260))
    Ответ написан
    Комментировать
  • Ошибка пайтон библа дискорд пай что делать?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Рекоммендую отказаться от discord_slash и перейти на потомков discord.py 2.0 (который так и остался в alpha и в pypi не опубликован) в виде форков discord.py, в которых slash commands работают из коробки. Мои эксперименты показали, что discord_slash ломает часть функциональности discord.py, и разбираться, что там пошло не так, я посчитал малоосмысленным. Я протестировал pycord, nextcord и disnake и остановился на последнем как наиболее развитом (по состоянию на декабрь было именно так), но свой выбор не навязываю.

    Нужно будет всего лишь заменить декоратор @bot.command на @bot.slash_command, очень удобно и никакого мазохизма.
    Ответ написан
    Комментировать
  • Как определить язык написанного сообщения на discord.js?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Если надо определять язык текста, то смотреть в сторону language identification, например, есть библиотека fasttext, и вот есть первый попавшийся пример реализации на js https://github.com/rse/fasttext-lid (но в гугле я видел и другие, не знаю, какая будет лучше).

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

    В общем, это не самая тривиальная задача.
    Ответ написан
    3 комментария
  • Не работает код, ошибок нет, что делать?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Зачем тут вообще вызывать get_channel? Быстрее и нагляднее будет проверка:

    if ctx.channel.id == 7тут айди канала:

    Обычно даже тривиальные команды не работают, если есть обработчик on_message, что с этим делать в официальным FAQ описано первым же пунктом: https://discordpy.readthedocs.io/en/stable/faq.htm...
    Ответ написан
    Комментировать