Почему событие on_member_join не срабатывает?

Когда я покидаю сервер и вновь захожу, бот не реагирует на событие. В коде visiting.py, который я использую, ошибки не обнаружены. Вот фрагмент кода: <br/> <br/> visiting.py <br/> <pre><code class="python">from disnake import Embed
from database import add_user, get_user_by_id, update_user

def setup_visiting(bot, guild_id, chanel):
    print("Start")
    embed = Embed(
        title="Добро пожаловать на сервер!",
        description="Спасибо за присоединение к нашему сообществу!",
        color=0x00ff00  # Зеленый цвет
    )

    @bot.event
    async def on_member_join(member):
        print("Join")
        if member.guild.id == guild_id:
            add_user(member.id, member.name, 0)

            try:
                await member.send(embed=embed,chanel=chanel)
            except Exception as e:
                print(f"Ошибка при отправке приветственного сообщения: {e}")

            print(f"Участник {member.name} (ID: {member.id}) присоединился к серверу.")</code></pre> <br/> <br/> main.py <br/> <pre><code class="python">import json

from disnake.ext import commands
from disnake import Intents
from commands import setup_commands
from events.visiting import setup_visiting
from cogs.chat.cog import CogChat

intents = Intents.all()

with open("configs/config.json") as f:
    config = json.load(f)

bot = commands.InteractionBot()

GUILD_ID = config['guild_id']
TOKEN = config['token']

setup_commands(bot, GUILD_ID)
setup_visiting(bot, GUILD_ID, "1233498806881095824")

bot.run(TOKEN)</code></pre>
  • 7 сентября 2024 г. 15:23
Ответы на вопрос 2
Проблема с тем, что событие `on_member_join` не срабатывает, может быть вызвана несколькими причинами. Давайте рассмотрим наиболее распространенные:

1. **Отсутствие необходимых интентов**: Для работы событий, связанных с участниками (например, `on_member_join`), необходимо включить соответствующие интенты. Убедитесь, что вы включили интент `members` в объекте `Intents`. Ваш код должен выглядеть так:

   ```python
   intents = Intents.default()
   intents.members = True  # Включение интента для участников
   ```

   Затем при создании бота передайте эти интенты:

   ```python
   bot = commands.InteractionBot(intents=intents)
   ```

2. **Проверка прав доступа бота**: Убедитесь, что у вашего бота есть необходимые права для чтения информации о членах сервера. Это можно настроить в панели управления Discord для вашего бота, когда вы создаете его. Убедитесь, что у вашего бота есть право `SERVER MEMBERS INTENT`.

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

4. **Проблемы с методом отправки сообщения**: В вашем коде используется `await member.send(embed=embed, chanel=chanel)`, где `chanel` не является допустимым параметром для метода `send()`. Возможно, вы хотели использовать другой способ отправки сообщения. Убедитесь, что вы правильно задаете параметры для отправки сообщения. Правильный вызов будет:

   ```python
   await member.send(embed=embed)  # Отправка embed без chanel
   ```

5. **Проблемы с подключением к серверу**: Убедитесь, что бот действительно подключен к серверу и находится в нем. Проверьте, что в консоли не отображаются ошибки при запуске бота.

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