add discord bot
This commit is contained in:
parent
eadf75f84c
commit
94ce93f824
119
app/cron_discord.py
Normal file
119
app/cron_discord.py
Normal 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)
|
||||
Loading…
x
Reference in New Issue
Block a user