Можно ли сделать запрет для бота, писать только в отдельном канале? discord.py
Я делаю бота для дискорд с помощью discord.py, и хочу сделать ему запрет отвечать на команды во всех каналах кроме тех которые я укажу. У меня есть небольшой код, но его приходиться писать в каждой команде, а ето не удобно. Можно ли сделать такой запрет, или может можно сделать мой код сразу для всех команд? Вот мой код:
channell = ctx.message.channel channel1 = client.get_channel(929090952763703316) if channell != channel1: await ctx.send("Тут нельзя!") await ctx.channel.purge(limit = 1) else:
Отслеживать
задан 8 янв 2022 в 11:48
3 1 1 бронзовый знак
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Можно сделать как декоратор:
def predicate(ctx: commands.Context): channel = nextcord.utils.get(ctx.guild.text_channels, ) if ctx.channel != channel: return False else: return True has_channel = commands.check(predicate) @commands.command() @has_channel async def test(self, ctx): pass
Можете ещё добавить обработчик ошибок
Отслеживать
ответ дан 8 янв 2022 в 12:31
2,302 1 1 золотой знак 5 5 серебряных знаков 11 11 бронзовых знаков
- discord
- бот
- discord.py
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.30.4069
Как запретить писать и говорить на канале в Discord
![]()

Всем привет! Сегодня поговорим про то как запретить писать и говорить на канале в популярной бесплатной программе общения Discord. Итак, поехали!
В разговоре есть вероятность, такого собственно что бывают замечены хейтеры, они тролят людей.
Дабы обрести абсолютный контроль за появившейся историей в канале или в чате, не разрешить общения с ненужным собеседником есть опции, при применении вполне вероятно выключить разговор.
Запрещение свежих извещений на текстовом канале
Текстовый канал – это разговор, члены обмениваются текстовыми сообщениями, картинами и видео. Дабы отсеять ненужных собеседников нужно:
Войти в ключевое окно аккаунта;
Отыскать место выключить отправку собственных извещений от членов разговора, в случае если они не считаются приятелями.
Обратите внимание! Подключение функции перекрывает вероятность отправки прямых извещений, но в общем чате разговора эта вероятность сберегается.

Иной вариант – заблокировать. Дабы это реализовать нужно:
Кликнуть по иконке собеседника, которого надо заблокировать;
Надавить на кнопку, которая смотрится как 3 горизонтальных точки в ряд;
Из показавшегося окнаизбрать функцию – «заблокировать».
В Дискорде возможно рулить запросами в приятели. Нужно:
Избрать место: «настройки пользователя»;
Кликнуть раздел «конфиденциальность»;
Из показавшихся разновидностей реализовать выбор.
В общем чате подключить функцию, когда члены имеют все шансы декламировать сообщения, а не отправлять.
Дабы запретить строчить в чат Дискорд, надо забежать в опции канала и подключить функцию, собственно что иные юзеры имеют право декламировать, а не отравлять свежие текстовые сообщения.

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

Голосовой канал трудится как телефонная ассоциация. В их нет способности отправлять текстовые сообщения и файлы. Дабы члены чата не имели возможность болтать в разговоре, а лишь только обладатель или же же модер, то:
Войти в настройки;
И избрать место с заглавием «подключаться» и выключить его.
Этим же методикой не допустить всякому юзеру болтатьговорить в голосовом чате. Надо избрать никнейм и сквозь функцию выключить его.
Важно! В случае если нет стремления, дабы голосовой канал лицезрели ненужные юзеры, то возможно устроить его не заметным, и те, кто не понимает о группе общения не сумеют отыскать его сквозь поиск.
Запретить болтать в канале Дискорда нетрудно. Это имеют все шансы устроить админ или модер канала, выучив надлежащие памятке и выполнив воздействия, описанные повыше.
Дискорд действенное средство общения меж членами совместного чата, коих имеет возможность быть большое количество.
Но как и в всяком обществе появляются конфликтные истории, бывают замечены юзеры с которыми нет стремления знаться. И дабы избежать аналогичных контактов есть функции блокировки.
Как запретить боту некоторые команды в группах?
Есть бот, он в группе, если написать команду в этой группе, то бот выполнит её, а я хочу так, чтобы некоторые команды не были доступны в чате, а только если напишешь боту.
- Вопрос задан более двух лет назад
- 813 просмотров
Комментировать
Решения вопроса 1
В объекте Message есть поле chat которое хранит объект Chat и уже в нём есть тип чата(type): «group», «supergroup», «channel», «private». Используя эти данные можешь написать фильтрацию команд собственноручно.
Если ты пишешь используя какую-нибудь из популярных библиотек, то в нём уже должен быть фильтр для групп.
Ответ написан более двух лет назад
Комментировать
Нравится Комментировать
Ответы на вопрос 1
Смотреть на тип чата, и если это не личный чат, то отмена. На сколько мне известно, для групп id чата отрицательное, т.е if (id < 0)
Как запретить отвечать боту в личных сообщениях?
Хочу сделать так, чтобы только бот мог писать участнику сервера, а сам участник сервер — нет. Т.е. бот не реагировал на команды в личных сообщениях, только на сервере. Как это можно сделать?
- Вопрос задан более двух лет назад
- 1001 просмотр
Комментировать
Решения вопроса 1

Добавьте проверку на выполнение команды в ЛС.
@bot.check async def global_guild_only(ctx): if not ctx.guild: raise commands.NoPrivateMessage # replicating guild_only check: https://github.com/Rapptz/discord.py/blob/42a538edda79f92a26afe0ac902b45c1ea20154d/discord/ext/commands/core.py#L1832-L1846 return True
@bot.command() @commands.guild_only() async def cmd(ctx, . ): """Here we go. """ .
Ответ написан более двух лет назад
Нравится 2 2 комментария
Dream @dreameddd Автор вопроса
А можно сделать исключения на необходимые мне команды? Используя global_guild_only (задался этим вопросом только сейчас)

Dream, проверяйте на наличие название команды в списке:
if ctx.command.name in ["cmd", "cmdtoo", . ]: raise commands.NoPrivateMessage