add discord bot

This commit is contained in:
MuslemRahimi 2024-11-19 21:22:59 +01:00
parent eadf75f84c
commit 94ce93f824

119
app/cron_discord.py Normal file
View File

@ -0,0 +1,119 @@
import discord
import re
import sqlite3
from contextlib import contextmanager
STOCK_DB = 'stocks'
ETF_DB = 'etf'
CRYPTO_DB = 'crypto'
@contextmanager
def db_connection(db_name):
conn = sqlite3.connect(f'{db_name}.db')
cursor = conn.cursor()
cursor.execute("PRAGMA journal_mode = wal")
try:
yield cursor
finally:
conn.commit()
cursor.close()
conn.close()
#------Start Stocks DB------------#
with db_connection(STOCK_DB) as cursor:
cursor.execute("SELECT DISTINCT symbol FROM stocks")
symbols = [row[0] for row in cursor.fetchall()]
cursor.execute("SELECT symbol FROM stocks")
raw_data = cursor.fetchall()
stock_list_data = [{
'symbol': row[0],
'type': 'stocks',
} for row in raw_data]
#------End Stocks DB------------#
#------Start ETF DB------------#
with db_connection(ETF_DB) as cursor:
cursor.execute("SELECT DISTINCT symbol FROM etfs")
etf_symbols = [row[0] for row in cursor.fetchall()]
cursor.execute("SELECT symbol FROM etfs")
raw_data = cursor.fetchall()
etf_list_data = [{
'symbol': row[0],
'type': 'etf',
} for row in raw_data]
#------End ETF DB------------#
#------Start Crypto DB------------#
with db_connection(CRYPTO_DB) as cursor:
cursor.execute("SELECT DISTINCT symbol FROM cryptos")
crypto_symbols = [row[0] for row in cursor.fetchall()]
cursor.execute("SELECT symbol FROM cryptos")
raw_data = cursor.fetchall()
crypto_list_data = [{
'symbol': row[0],
'type': 'crypto',
} for row in raw_data]
#------End Crypto DB------------#
#------Init Searchbar Data------------#
searchbar_data = stock_list_data + etf_list_data + crypto_list_data
# Replace with your bot token
TOKEN = 'token'
# Initialize the bot
intents = discord.Intents.default()
intents.message_content = True
client = discord.Client(intents=intents)
# Pattern to match $stockname format (e.g., $AAPL, $TSLA)
ticker_pattern = re.compile(r"\$(\w+)")
@client.event
async def on_ready():
print(f'Logged in as {client.user}!')
@client.event
async def on_message(message):
# Ignore messages from the bot itself
if message.author == client.user:
return
# Copy of original message content to modify
modified_content = message.content
# Find all tickers in the message
tickers = ticker_pattern.findall(message.content)
# If no tickers found, exit
if not tickers:
return
for ticker in tickers:
# Find the corresponding symbol in the searchbar_data
matched = next((item for item in searchbar_data if item['symbol'].upper() == ticker.upper()), None)
if matched:
symbol_type = matched['type']
# Construct the URL based on the symbol type (stock, etf, crypto)
if symbol_type == 'stocks':
stock_url = f"https://stocknear.com/stocks/{ticker.upper()}"
elif symbol_type == 'etf':
stock_url = f"https://stocknear.com/etf/{ticker.upper()}"
elif symbol_type == 'crypto':
stock_url = f"https://stocknear.com/crypto/{ticker.upper()}"
# Replace the ticker in the content with a markdown hyperlink
modified_content = modified_content.replace(f"${ticker}", f"[${ticker}]({stock_url})")
# Edit the original message with the modified content
await message.edit(content=modified_content)
# Run the bot
client.run(TOKEN)