bot-tutorial

How to Create a Discord Welcome Bot (Step-by-Step Guide)

Learn how to build and deploy a custom Discord welcome bot that greets new members automatically — no coding experience required! 🤖✨

July 17, 2026 · 412 views

Welcome messages are the first impression your Discord server makes — and a well-crafted, automated welcome bot can boost engagement, reduce moderation workload, and make newcomers feel instantly valued. Whether you're running a gaming community, study group, or creative collective, how to create a Discord welcome bot is one of the most impactful setup tasks you’ll tackle. In this comprehensive tutorial, we’ll walk you through everything: from choosing the right platform and writing clean code (or skipping code entirely!) to testing, deploying, and fine-tuning your bot’s greeting behavior.

No prior programming knowledge? No problem. We’ll cover both no-code tools and beginner-friendly Python scripting — plus pro tips to avoid common pitfalls like delayed messages, permission errors, or spammy pings.

Let’s get your server rolling with warmth, consistency, and automation 🌟

Why You Need a Welcome Bot (Beyond Just ‘Hi’)

A welcome bot does far more than say hello. It’s your onboarding engine: introducing rules, linking resources, assigning roles, and even triggering DMs with helpful info. Servers using automated welcomes report up to 37% higher 7-day retention, according to DiscordCraft’s 2025 Community Health Benchmark Report. That’s because:

  • ✅ New members feel acknowledged within seconds, not hours
  • ✅ Consistent messaging reduces confusion and repeated questions
  • ✅ Role assignment (e.g., @Newcomer) enables targeted content delivery
  • ✅ Embedded buttons or reaction menus guide users toward next steps

Without automation, welcoming falls to mods — often inconsistently, and sometimes not at all. A bot ensures fairness, scalability, and 24/7 reliability.

Option 1: No-Code Welcome Bots (Fast & Friendly)

If you want results in under 10 minutes — and zero terminal windows — try these trusted platforms:

🌐 MEE6 (Free Tier Available)

MEE6 remains the most popular no-code option for welcome messages. It supports embeds, variables ({user}, {server}, {count}), role assignment, and auto-mod actions.

Setup steps:

  1. Go to mee6.xyz → Click Add to Discord
  2. Authorize permissions (ensure Manage Roles and Send Messages are enabled)
  3. Select your server → Navigate to Welcome Messages in the left sidebar
  4. Toggle Enable Welcome Messages
  5. Customize your message — use rich formatting:
    🎉 Welcome {user.mention} to {server.name}!
    
    👉 Read our rules in <#1234567890>
    👉 Grab roles in <#0987654321>
    
    Total members: {server.memberCount}
    
  6. Upload a banner image (optional but highly recommended for visual impact)
  7. Save & test by joining via an invite link (use a throwaway alt account!)

💡 Pro tip: Enable DM Welcome to send a private intro + FAQ — great for sensitive or large communities.

🧩 Dyno (Robust & Modular)

Dyno offers granular control over triggers (e.g., welcome only for users joining via specific invites) and integrates with reaction roles and logging.

Key advantage: Its welcome system supports conditional logic — e.g., “if user joined via invite dev-team, assign @Developer role.”

[Image: Dyno welcome settings dashboard showing toggle switches and variable dropdown]

Both MEE6 and Dyno integrate seamlessly with Discord’s latest API v10 — so you won’t hit deprecated endpoints or sudden outages.

Option 2: Build Your Own Python Welcome Bot (Full Control)

For full customization — think embedded images, database-stored user preferences, or webhook-based analytics — nothing beats a self-hosted bot. Here’s how to do it cleanly and securely.

🔧 Prerequisites

  • Python 3.10+ installed (python.org)
  • A Discord Developer Account (discord.com/developers)
  • Basic familiarity with command-line terminals (we’ll keep it simple)

🛠️ Step-by-Step Setup

Step 1: Create Your Bot Application

  1. Visit the Discord Developer Portal
  2. Click New Application → Name it (e.g., ServerGreetBot)
  3. Go to Bot → Click Add Bot → Copy the Token (⚠️ never share this publicly!)
  4. Under Privileged Gateway Intents, enable:
    • SERVER MEMBERS INTENT
    • MESSAGE CONTENT INTENT ✅ (required for reading message content in newer bots)

Step 2: Install Required Libraries Open your terminal and run:

pip install discord.py python-dotenv

Step 3: Create Project Structure Make a folder named welcome-bot, then inside it create:

  • main.py
  • .env (to store secrets)
  • requirements.txt

In .env, add:

DISCORD_TOKEN=your_actual_bot_token_here
WELCOME_CHANNEL_ID=123456789012345678

Replace WELCOME_CHANNEL_ID with your server’s welcome channel ID (right-click channel → Copy ID — ensure Developer Mode is on).

Step 4: Write the Welcome Logic Here’s a production-ready main.py snippet:

import os
import discord
from discord.ext import commands
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')
WELCOME_CHANNEL_ID = int(os.getenv('WELCOME_CHANNEL_ID'))

intents = discord.Intents.default()
intents.members = True
intents.message_content = True

bot = commands.Bot(command_prefix='!', intents=intents)

@bot.event
async def on_ready():
    print(f'✅ {bot.user} is online and ready!')

@bot.event
async def on_member_join(member):
    welcome_channel = bot.get_channel(WELCOME_CHANNEL_ID)
    if welcome_channel:
        embed = discord.Embed(
            title="👋 Welcome Aboard!",
            description=f"Hey {member.mention} — thrilled to have you here!\n\n🔹 Read the rules in <#1122334455>\n🔹 Introduce yourself in <#5544332211>\n🔹 Grab roles in <#9988776655>",
            color=0x5865F2
        )
        embed.set_thumbnail(url=member.avatar.url if member.avatar else member.default_avatar.url)
        embed.set_footer(text=f"{member.guild.name} • Member #{member.guild.member_count}")
        await welcome_channel.send(embed=embed)

bot.run(TOKEN)

Step 5: Run & Test In your terminal:

python main.py

Then invite your bot using OAuth2 URL (from OAuth2 → URL Generator tab). Select scopes bot + applications.commands, and grant the following permissions:

  • Send Messages
  • Embed Links
  • Manage Roles (if assigning roles)
  • Use External Emojis

Once online, join your server via a fresh invite — you’ll see the embed appear instantly! 🚀

⚙️ Advanced Enhancements (Optional but Powerful)

Want to level up beyond basic text? Try these battle-tested upgrades:

  • Auto-role Assignment: Add await member.add_roles(role) inside on_member_join() after fetching the role via guild.get_role(role_id)
  • Welcome DMs: Use await member.send(“Thanks for joining…”) — just remember: users must allow DMs from server members
  • Join-Time Logging: Log joins to a channel or external database for analytics (e.g., peak sign-up hours)
  • Invite Tracking: Use member.invite (requires audit log access) to credit referrers — great for growth campaigns

DiscordCraft’s open-source WelcomeBot Starter Kit includes all of the above pre-built with error handling and config files — perfect for scaling to 10K+ member servers.

🚫 Common Pitfalls & Fixes

| Issue | Cause | Fix | |-------|--------|-----| | ❌ Bot doesn’t greet anyone | Missing members intent or disabled in Dev Portal | Re-enable SERVER MEMBERS INTENT + restart bot | | ❌ Embed shows blank avatar | User has no avatar or member.avatar is None | Always fallback to member.default_avatar.url | | ❌ Message delayed >10 sec | Hosting on free-tier Replit/Heroku with sleep cycles | Use a VPS, Raspberry Pi, or paid hosting like Railway or Render | | ❌ Bot can’t assign roles | Missing Manage Roles permission or role hierarchy conflict | Ensure bot’s role is above target role in Server Settings → Roles |

🎯 Quick Tips

  • 🌈 Use emojis strategically — they increase message scan speed by ~28% (DiscordCraft UX Lab, 2026)
  • 📏 Keep welcome messages under 3 lines visible without scrolling — prioritize clarity over cleverness
  • 🔄 Test every edge case: alt accounts, banned users rejoining, deleted avatars, mobile clients
  • 📊 Track welcome CTR (click-through rate on buttons/links) — tweak CTAs weekly based on data
  • 🧩 Combine welcome bots with onboarding threads: auto-create a private thread for each new user with pinned resources

❓ FAQ

Q: Can I use a welcome bot on multiple servers?
A: Yes — as long as your bot is added to each server and has proper permissions. Just reuse the same token and adapt channel IDs per server.

Q: Do I need to pay for hosting my custom bot?
A: Not necessarily. Free tiers on Railway, Render, or even a $5/month VPS work perfectly for <5K members. Avoid free GitHub Actions or Replit for production — they time out.

Q: Is it okay to ping @everyone in welcome messages?
A: Generally no — it’s disruptive and violates Discord’s TOS if overused. Use @here sparingly, or better yet: mention only relevant roles like @Moderators for handoff.

Q: How often should I update my welcome message?
A: Every 6–8 weeks — refresh visuals, update links, rotate CTAs, and align with seasonal events (e.g., back-to-school, holiday roles).

Final Thoughts

Creating a Discord welcome bot isn’t just about automation — it’s about intentionality. Every line of copy, every emoji placement, and every role assigned tells new members: You belong here. Whether you choose MEE6 for simplicity or roll your own Python bot for flexibility, the goal stays the same: lower friction, raise warmth, and turn visitors into invested members.

And remember — the best welcome isn’t flashy. It’s fast, friendly, and frictionless. 🌐💙

Ready to go further? Explore DiscordCraft’s free Welcome Message Audit Checklist and Member Journey Mapping Template — designed to help you optimize every touchpoint from invite click to first contribution.