lunarflu's picture
lunarflu HF staff
exclude huggingfolks role from triggering notification pings (unneeded if we're discussing anyways)
e57e72d verified
raw
history blame
3.44 kB
import discord
import threading
import os
import gradio as gr
from discord.ext import commands
from slack_sdk import WebClient
from slack_sdk.errors import SlackApiError
DISCORD_TOKEN = os.getenv('DISCORD_TOKEN')
SLACK_BOT_TOKEN = os.getenv('BOT_USER_OAUTH_TOKEN_HF')
SLACK_CHANNEL_ID = os.getenv('SLACK_CHANNEL_ID_HF')
TRIGGERS = {
"discord bot": "<@U051DB2754M>", # Adam
"text to speech": "<@U039C2GANMV>", # VB
"tts": "<@U039C2GANMV>", # VB
"asr": "<@U039C2GANMV>", # VB
"musicgen": "<@U039C2GANMV>", # VB
"whisper": "<@U039C2GANMV>", # VB
"speech recognition": "<@U039C2GANMV>", # VB
"bark": "<@U039C2GANMV>", # VB
"autotrain": "<@U01E3LEC2N7>", # abhishek
"sentence-transformers": "<@U04E4DNPWG7>", # tom aarsen
"sentence_transformers": "<@U04E4DNPWG7>", # tom aarsen
"setfit": "<@U04E4DNPWG7>", # tom aarsen
"sentence transformers": "<@U04E4DNPWG7>", # tom aarsen
}
intents = discord.Intents.all()
intents.messages = True
bot = commands.Bot(command_prefix='!', intents=intents)
slack_client = WebClient(token=SLACK_BOT_TOKEN)
@bot.event
async def on_ready():
print(f'Logged in as {bot.user}')
@bot.event
async def on_message(message):
if message.author == bot.user:
return
# notification bot
huggingfolks_role = discord.utils.get(message.guild.roles, id=897376942817419265)
if huggingfolks_role not in message.author.roles: # no need for ping if we're already discussing
content = message.content.lower()
for trigger, slack_mention in TRIGGERS.items():
if trigger in content:
await post_to_slack(message.author, message.content, message.channel.name, message.jump_url, slack_mention, trigger)
break
# ask-for-help
# discord.ForumChannel.last_message_id -> The last thread ID that was created on this forum.
# when message is posted
# fetch ask-for-help channel
# if ask-for-help.last_message_id == message.id of on_message -> success
ask_for_help = await bot.fetch_channel(1019883044724822016)
if ask_for_help.last_message_id == message.channel.id:
content = message.content
try:
# title
response = slack_client.chat_postMessage(
channel=SLACK_CHANNEL_ID,
text=f"New post in #ask-for-help by {message.author}: *{message.channel.name}*\n{message.jump_url}"
)
# reply in thread
thread_ts = response['ts']
slack_client.chat_postMessage(
channel=SLACK_CHANNEL_ID,
text=content,
thread_ts=thread_ts
)
except SlackApiError as e:
print(f"Error posting to Slack: {e.response['error']}")
async def post_to_slack(author, content, channel, url, slack_mention, trigger):
try:
response = slack_client.chat_postMessage(
channel=SLACK_CHANNEL_ID,
text=f"{slack_mention} (for the keyword -> '{trigger}')\nFrom {author} in channel #{channel}: {content}\n{url}"
)
except SlackApiError as e:
print(f"Error posting to Slack: {e.response['error']}")
# runs discord bot in thread = helps avoid blocking calls
def run_bot():
bot.run(DISCORD_TOKEN)
threading.Thread(target=run_bot).start()
def greet(name):
return "Hello " + name + "!"
demo = gr.Interface(fn=greet, inputs="text", outputs="text")
demo.launch()