So I was making a bot, a Reddit bot, that is going to live on Heroku, but as of deployment, problem arise. The build went smoothly, until I was going to view the app, Application Error shows up. As it turns out, I got OSError: [Errno 98] Address already in use, but everything was running smoothly on my Python shell.
Here is my code + structure:

app.py:
import praw
import Levenshtein
import os
from bs4 import BeautifulSoup as bs
import requests
def g(url):
r = requests.get(url)
if r.status_code == 404:
raise Exception
page = r.text
soup=bs(page,'html.parser')
soup = soup.find('ul',{'class':'music_list clearfix'})
soup = soup.find_all('li')
return [[i.find('a')['href'],i.find('p').contents[0],i.find('h3').contents[0]] for i in soup]
def k():
h = 1
l = []
while 1:
try:
l+=g('https://hololive.hololivepro.com/en/music?paged=%d' % h)
h+=1
except:
break
return l
from flask import Flask
from threading import Thread
app = Flask('')
@app.route('/')
def home():
return "Server Alive!"
def run():
app.run(host='localhost',port=8080)
def keep_alive():
t = Thread(target=run)
t.start()
reddit = praw.Reddit(
client_id="******",
client_secret="*******",
user_agent="web:mv_bot:v0.1 (by u/khang1411)",
username="khang1411_bot",
password='*******',
)
def comp(w1,w2):
w2 = w2.lower()
w1 = w1.lower()
if w1 in w2:
return 1
w2 = ''.join(ch for ch in w2 if ch.isalnum() or ch == ' ')
w1 = ''.join(ch for ch in w1 if ch.isalnum() or ch == ' ')
l = 0
for i in w2.split():
j = Levenshtein.ratio(w1,i)
if j>l:
l=j
j = Levenshtein.ratio(w1,w2)
if j > l:
l = j
return l
def form(l,mode,other):
if mode == 'author':
return ('These are the songs that matched the author %s: \n\n' % other) + '\n\n'.join(l) + '\n\n' + '^(This comment is made by a bot, if you have improvements/complaints please contact u/khang1411)'
elif mode == 'title':
return ('These are the songs that matched the title %s: \n\n' % other) + '\n\n'.join(l) + '\n\n' + '^(This comment is made by a bot, if you have improvements/complaints please contact u/khang1411)'
def fromauthor(author):
w = ['%s by %s at link %s' % (l[2],l[1],l[0]) for l in k() if comp(author,l[1]) > 0.85]
return w
def fromtitle(title):
w= ['%s by %s at link %s' % (l[2],l[1],l[0]) for l in k() if comp(title,l[2]) > 0.85]
return w
if __name__ == '__main__':
keep_alive()
subreddit = reddit.subreddit("test")
for comment in subreddit.stream.comments(skip_existing=True):
print(comment.body)
if '!mv' in comment.body:
try:
if comment.body.split()[1] == 'author':
comment.reply(form(fromauthor(' '.join(comment.body.split()[2:])),'author',' '.join(comment.body.split()[2:])))
#comment.reply()
elif comment.body.split()[1]=='title':
comment.reply(form(fromtitle(' '.join(comment.body.split()[2:])),'title',' '.join(comment.body.split()[2:])))
except:
pass
The pip file + pipfile.lock was from pipenv,
Procfile:
web: gunicorn app:app
Requirements.txt:
beautifulsoup4==4.9.3
certifi==2021.5.30
charset-normalizer==2.0.4
click==8.0.1
colorama==0.4.4
Flask==2.0.1
gunicorn==20.1.0
idna==3.2
itsdangerous==2.0.1
Jinja2==3.0.1
Levenshtein==0.13.0
MarkupSafe==2.0.1
praw==7.4.0
prawcore==2.3.0
requests==2.26.0
soupsieve==2.2.1
update-checker==0.18.0
urllib3==1.26.6
websocket-client==1.2.1
Werkzeug==2.0.1
Runtime.txt:
python-3.9.4
Running it on Repl.it and the Python shell works, but not on Heroku.
P/S: I deployed the Heroku app through GitHub, this is the image:

I tried to change the host and the port, but not working. How can I fix this? Thanks,
P/S 2: Log: https://pastebin.com/CmhpWXTW