diff --git a/program/updater.py b/program/updater.py
new file mode 100644
index 0000000..1c35e16
--- /dev/null
+++ b/program/updater.py
@@ -0,0 +1,62 @@
+import os
+import sys
+
+from git import Repo
+from pyrogram.types import Message
+from driver.filters import command
+from pyrogram import Client, filters
+from os import system, execle, environ
+from driver.decorators import sudo_users_only
+from git.exc import InvalidGitRepositoryError
+from config import UPSTREAM_REPO, BOT_USERNAME
+
+
+def gen_chlog(repo, diff):
+ upstream_repo_url = Repo().remotes[0].config_reader.get("url").replace(".git", "")
+ ac_br = repo.active_branch.name
+ ch_log = tldr_log = ""
+ ch = f"updates for [{ac_br}]:"
+ ch_tl = f"updates for {ac_br}:"
+ d_form = "%d/%m/%y || %H:%M"
+ for c in repo.iter_commits(diff):
+ ch_log += (
+ f"\n\nš¬ {c.count()} š [{c.committed_datetime.strftime(d_form)}]\n"
+ f"[{c.summary}] šØāš» {c.author}
"
+ )
+ tldr_log += f"\n\nš¬ {c.count()} š [{c.committed_datetime.strftime(d_form)}]\n[{c.summary}] šØāš» {c.author}"
+ if ch_log:
+ return str(ch + ch_log), str(ch_tl + tldr_log)
+ return ch_log, tldr_log
+
+
+def updater():
+ try:
+ repo = Repo()
+ except InvalidGitRepositoryError:
+ repo = Repo.init()
+ origin = repo.create_remote("upstream", UPSTREAM_REPO)
+ origin.fetch()
+ repo.create_head("main", origin.refs.main)
+ repo.heads.main.set_tracking_branch(origin.refs.main)
+ repo.heads.main.checkout(True)
+ ac_br = repo.active_branch.name
+ if "upstream" in repo.remotes:
+ ups_rem = repo.remote("upstream")
+ else:
+ ups_rem = repo.create_remote("upstream", UPSTREAM_REPO)
+ ups_rem.fetch(ac_br)
+ changelog, tl_chnglog = gen_chlog(repo, f"HEAD..upstream/{ac_br}")
+ return bool(changelog)
+
+
+@Client.on_message(command(["update", f"update@{BOT_USERNAME}"]) & ~filters.edited)
+async def update_repo(_, message: Message):
+ chat_id = message.chat.id
+ msg = await message.reply("š `processing update...`")
+ update_avail = updater()
+ if update_avail:
+ await msg.edit("ā
update finished\n\nā¢ bot restarted, back active again in 1 minutes.")
+ system("git pull -f && pip3 install -r requirements.txt")
+ execle(sys.executable, sys.executable, "main.py", environ)
+ return
+ await msg.edit("bot is **up-to-date** with [main](https://github.com/levina-lab/video-stream/tree/main)")