Potential Options

Option 1: Google Forms + Google Sheets + Discord Webhook + Apps Script

A Google Form would be created for the weekly progress report. It would automatically save responses in a linked Google Sheet. Then, Apps Script would be used to send a message using a Discord Webhook.

function postToDiscordWeekly() {
  const webhookUrl = 'https://discord.com/api/webhooks/your-webhook-id';
  const formLink = 'https://docs.google.com/forms/d/your-form-id/viewform';

  const payload = {
    content: `📋 **Weekly Progress Report Time!**\nPlease fill out the form: ${formLink}`
  };

  const options = {
    method: 'post',
    contentType: 'application/json',
    payload: JSON.stringify(payload)
  };

  UrlFetchApp.fetch(webhookUrl, options);
}

Pros:

Cons:

Option 2 - Discord Bot with Interactive Forms

Utilizes a relatively new Discord feature - Modals are pop-up forms that allow users to provide formatted inputs through submissions. The Discord bot would handle everything - including sending out the form weekly and collecting a user's information through the Modal.

import discord
from discord.ext import commands, tasks
from apscheduler.schedulers.asyncio import AsyncIOScheduler

intents = discord.Intents.default()
bot = commands.Bot(command_prefix="!", intents=intents)

CHANNEL_ID = 123456789012345678  # replace with your target channel ID

# --- Modal Definition ---
class WeeklyReportModal(discord.ui.Modal, title="Weekly Progress Report"):
    accomplishments = discord.ui.TextInput(label="What did you accomplish?", style=discord.TextStyle.paragraph, required=True)
    blockers = discord.ui.TextInput(label="Any blockers or challenges?", style=discord.TextStyle.paragraph, required=False)

    async def on_submit(self, interaction: discord.Interaction):
        # Print or store the results here
        print(f"From {interaction.user.display_name}:")
        print(f"Accomplishments: {self.accomplishments.value}")
        print(f"Blockers: {self.blockers.value}")
        await interaction.response.send_message("✅ Thanks for submitting your report!", ephemeral=True)

# --- Button View ---
class ReportView(discord.ui.View):
    @discord.ui.button(label="Fill Out Weekly Report", style=discord.ButtonStyle.primary)
    async def report_button(self, interaction: discord.Interaction, button: discord.ui.Button):
        await interaction.response.send_modal(WeeklyReportModal())

# --- Scheduled Task ---
@tasks.loop(hours=168)  # once every 7 days
async def send_weekly_prompt():
    channel = bot.get_channel(CHANNEL_ID)
    if channel:
        await channel.send("📋 It's time for the weekly progress report!", view=ReportView())

# --- On Ready ---
@bot.event
async def on_ready():
    print(f"Logged in as {bot.user}")
    send_weekly_prompt.start()

# --- Start Bot ---
bot.run("YOUR_BOT_TOKEN")

Pros:

Cons:


Revision #3
Created 26 May 2025 20:11:15 by Admin
Updated 26 May 2025 20:33:50 by Admin