├── Procfile ├── heroku.yml ├── geezproject ├── resources │ ├── rrc.png │ ├── black.png │ ├── geez.gif │ ├── hejo.png │ ├── logo.jpg │ ├── geez_blank.png │ ├── geezmusic.mp3 │ ├── Roboto-Light.ttf │ ├── Roboto-Medium.ttf │ ├── readme.md │ └── session │ │ ├── session.sh │ │ └── string_session.py ├── utils │ ├── queues │ │ ├── __init__.py │ │ └── queues.py │ ├── styles │ │ ├── FontLord.ttf │ │ ├── lordfont.ttf │ │ ├── ProductSans-Light.ttf │ │ ├── MutantAcademyStyle.ttf │ │ └── ProductSans-BoldItalic.ttf │ ├── logger.py │ ├── converter │ │ ├── __init__.py │ │ └── converter.py │ ├── exceptions.py │ ├── __init__.py │ ├── chrome.py │ ├── thumbnail.py │ ├── progress.py │ ├── events.py │ └── chattitle.py ├── modules │ ├── sql_helper │ │ ├── .DS_Store │ │ ├── __init__.py │ │ ├── keep_read_sql.py │ │ ├── gmute_sql.py │ │ ├── no_log_pms_sql.py │ │ ├── pm_permit_sql.py │ │ ├── mute_sql.py │ │ ├── fban_sql.py │ │ ├── spam_mute_sql.py │ │ ├── tede_chatbot_sql.py │ │ ├── gban_sql.py │ │ ├── globals.py │ │ ├── snips_sql.py │ │ ├── lydia_sql.py │ │ ├── notes_sql.py │ │ ├── bot_starters.py │ │ ├── welcome_sql.py │ │ ├── bot_blacklists.py │ │ ├── filter_sql.py │ │ ├── antiflood_sql.py │ │ ├── bot_pms_sql.py │ │ ├── blacklist_sql.py │ │ └── broadcast_sql.py │ ├── helper.py │ ├── lyrics.py │ ├── aeshtetic.py │ ├── gps.py │ ├── __init__.py │ ├── punten.py │ ├── help.py │ ├── bitly.py │ ├── logo.py │ ├── figlet.py │ ├── adzan.py │ ├── pics.py │ ├── games.py │ ├── justfun.py │ ├── animals.py │ ├── mentions.py │ ├── tiktok.py │ ├── getid.py │ ├── chatbot.py │ ├── rastick.py │ ├── shortlink.py │ ├── pdf.py │ ├── gkick.py │ ├── paste.py │ ├── fakeaction.py │ ├── fakegban.py │ ├── createstickers.py │ ├── salam.py │ ├── tag.py │ ├── antiflood.py │ ├── quotly.py │ ├── sangmata.py │ ├── github.py │ ├── create.py │ ├── hash.py │ ├── fun.py │ ├── kamuii.py │ ├── core.py │ ├── __help.py │ ├── tiny.py │ ├── hazmat.py │ ├── glitcher.py │ ├── sosmed.py │ ├── blacklist.py │ ├── gitcommit.py │ ├── clone.py │ └── gcast.py ├── core │ ├── __init__.py │ ├── decorators.py │ └── pool.py ├── clients │ ├── __init__.py │ ├── client_list.py │ ├── logger.py │ └── startup.py ├── storage.py └── __main__.py ├── Dockerfile ├── start ├── .gitignore ├── .github ├── FUNDING.yml └── workflows │ └── pylint.yml ├── sample_config.env ├── requirements.txt ├── app.json └── README.md /Procfile: -------------------------------------------------------------------------------- 1 | worker: bash start 2 | -------------------------------------------------------------------------------- /heroku.yml: -------------------------------------------------------------------------------- 1 | build: 2 | docker: 3 | worker: Dockerfile 4 | -------------------------------------------------------------------------------- /geezproject/resources/rrc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vckyou/GeezProjects/HEAD/geezproject/resources/rrc.png -------------------------------------------------------------------------------- /geezproject/utils/queues/__init__.py: -------------------------------------------------------------------------------- 1 | from .queues import add_to_queue, clear_queue, get_queue, pop_an_item 2 | -------------------------------------------------------------------------------- /geezproject/resources/black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vckyou/GeezProjects/HEAD/geezproject/resources/black.png -------------------------------------------------------------------------------- /geezproject/resources/geez.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vckyou/GeezProjects/HEAD/geezproject/resources/geez.gif -------------------------------------------------------------------------------- /geezproject/resources/hejo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vckyou/GeezProjects/HEAD/geezproject/resources/hejo.png -------------------------------------------------------------------------------- /geezproject/resources/logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vckyou/GeezProjects/HEAD/geezproject/resources/logo.jpg -------------------------------------------------------------------------------- /geezproject/resources/geez_blank.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vckyou/GeezProjects/HEAD/geezproject/resources/geez_blank.png -------------------------------------------------------------------------------- /geezproject/resources/geezmusic.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vckyou/GeezProjects/HEAD/geezproject/resources/geezmusic.mp3 -------------------------------------------------------------------------------- /geezproject/resources/Roboto-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vckyou/GeezProjects/HEAD/geezproject/resources/Roboto-Light.ttf -------------------------------------------------------------------------------- /geezproject/resources/Roboto-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vckyou/GeezProjects/HEAD/geezproject/resources/Roboto-Medium.ttf -------------------------------------------------------------------------------- /geezproject/utils/styles/FontLord.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vckyou/GeezProjects/HEAD/geezproject/utils/styles/FontLord.ttf -------------------------------------------------------------------------------- /geezproject/utils/styles/lordfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vckyou/GeezProjects/HEAD/geezproject/utils/styles/lordfont.ttf -------------------------------------------------------------------------------- /geezproject/modules/sql_helper/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vckyou/GeezProjects/HEAD/geezproject/modules/sql_helper/.DS_Store -------------------------------------------------------------------------------- /geezproject/resources/readme.md: -------------------------------------------------------------------------------- 1 | # Extra Resources for GeezProjects 2 | Repository [GeezProjects](https://github.com/vckyou/GeezProjects) -------------------------------------------------------------------------------- /geezproject/utils/styles/ProductSans-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vckyou/GeezProjects/HEAD/geezproject/utils/styles/ProductSans-Light.ttf -------------------------------------------------------------------------------- /geezproject/utils/styles/MutantAcademyStyle.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vckyou/GeezProjects/HEAD/geezproject/utils/styles/MutantAcademyStyle.ttf -------------------------------------------------------------------------------- /geezproject/utils/styles/ProductSans-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vckyou/GeezProjects/HEAD/geezproject/utils/styles/ProductSans-BoldItalic.ttf -------------------------------------------------------------------------------- /geezproject/core/__init__.py: -------------------------------------------------------------------------------- 1 | from .decorators import check_owner 2 | 3 | CMD_INFO = {} 4 | PLG_INFO = {} 5 | GRP_INFO = {} 6 | BOT_INFO = [] 7 | LOADED_CMDS = {} 8 | -------------------------------------------------------------------------------- /geezproject/clients/__init__.py: -------------------------------------------------------------------------------- 1 | from .client_list import client_id, clients_list 2 | from .logger import geez_userbot_on 3 | from .startup import geez_client, multigeez 4 | -------------------------------------------------------------------------------- /geezproject/utils/logger.py: -------------------------------------------------------------------------------- 1 | import logging 2 | 3 | logging.basicConfig( 4 | format="[%(name)s] - [%(levelname)s] - %(message)s", 5 | level=logging.INFO, 6 | ) 7 | -------------------------------------------------------------------------------- /geezproject/utils/converter/__init__.py: -------------------------------------------------------------------------------- 1 | from os import listdir, mkdir 2 | 3 | if "raw_files" not in listdir(): 4 | mkdir("raw_files") 5 | 6 | from .converter import convert 7 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM vckyouubitch/geez:master 2 | 3 | RUN git clone -b master https://github.com/vckyou/GeezProjects /home/geezprojects/ \ 4 | && chmod 777 /home/geezprojects \ 5 | && mkdir /home/geezprojects/bin/ 6 | 7 | CMD [ "bash", "start" ] 8 | -------------------------------------------------------------------------------- /start: -------------------------------------------------------------------------------- 1 | # Credits: @vckyaz 2 | # Copyright (C) 2022 GeezProjects 3 | # 4 | # This file is a part of < https://github.com/vckyou/GeezProjects > 5 | # PLease read the GNU Affero General Public License in . 6 | 7 | python3 -m geezproject 8 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | config.env 2 | error.log 3 | __pycache__/* 4 | geezproject.db 5 | *.session 6 | *.session-journal 7 | TG_BOT_TOKEN.session 8 | TG_BOT_TOKEN.session-journal 9 | geezproject/__pycache__/* 10 | geezproject/modules/__pycache__/* 11 | geezproject/modules/sql_helper/__pycache__/* 12 | .git 13 | .github 14 | .config 15 | .progress 16 | .vscode/* 17 | bin/* 18 | venv 19 | *.pyc 20 | *.png 21 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: [vckyou] # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | custom: # Replace with a single custom sponsorship URL 9 | -------------------------------------------------------------------------------- /sample_config.env: -------------------------------------------------------------------------------- 1 | API_KEY = "2" 2 | API_HASH = "e" 3 | 4 | # Telethon 5 | STRING_SESSION = "" 6 | STRING_2 = "" 7 | STRING_3 = "" 8 | STRING_4 = "" 9 | STRING_5 = "" 10 | 11 | # Set this to enable inline bot helper. get the token from @BotFather 12 | BOT_TOKEN = "" 13 | 14 | # ChatID untuk grup Log 15 | # Tambahkan Tanda hubung atau Tanda Negatif sebelum ID 16 | # Ini adalah bilangan bulat, Tolong jangan gunakan String 17 | # ini adalah bilangan bulat, tolong jangan gunakan tanda kutip. 18 | BOTLOG_CHATID = -100 19 | 20 | # Your Database URL untuk database bisa menggunakan https://elephantsql.com 21 | # Example: 'postgres://geezproject:geezproject@localhost:5432/geezproject' 22 | DATABASE_URL = "" 23 | 24 | # PM Auto-Ban Feature Switch 25 | PM_AUTO_BAN = False 26 | 27 | -------------------------------------------------------------------------------- /geezproject/utils/queues/queues.py: -------------------------------------------------------------------------------- 1 | QUEUE = {} 2 | 3 | 4 | def add_to_queue(chat_id, songname, link, ref, type, quality): 5 | if chat_id in QUEUE: 6 | chat_queue = QUEUE[chat_id] 7 | chat_queue.append([songname, link, ref, type, quality]) 8 | return int(len(chat_queue) - 1) 9 | QUEUE[chat_id] = [[songname, link, ref, type, quality]] 10 | 11 | 12 | def get_queue(chat_id): 13 | if chat_id in QUEUE: 14 | return QUEUE[chat_id] 15 | return 0 16 | 17 | 18 | def pop_an_item(chat_id): 19 | if chat_id not in QUEUE: 20 | return 0 21 | 22 | chat_queue = QUEUE[chat_id] 23 | chat_queue.pop(0) 24 | return 1 25 | 26 | 27 | def clear_queue(chat_id: int): 28 | if chat_id not in QUEUE: 29 | return 0 30 | 31 | QUEUE.pop(chat_id) 32 | return 1 33 | -------------------------------------------------------------------------------- /geezproject/modules/sql_helper/__init__.py: -------------------------------------------------------------------------------- 1 | from sqlalchemy import create_engine 2 | from sqlalchemy.ext.declarative import declarative_base 3 | from sqlalchemy.orm import scoped_session, sessionmaker 4 | 5 | from geezproject import DB_URI 6 | 7 | if DB_URI.startswith("postgres://"): 8 | uri = DB_URI.replace("postgres://", "postgresql://", 1) 9 | else: 10 | uri = DB_URI 11 | 12 | 13 | def start() -> scoped_session: 14 | engine = create_engine(uri) 15 | BASE.metadata.bind = engine 16 | BASE.metadata.create_all(engine) 17 | return scoped_session(sessionmaker(bind=engine, autoflush=False)) 18 | 19 | 20 | try: 21 | BASE = declarative_base() 22 | SESSION = start() 23 | except AttributeError as e: 24 | print( 25 | "DB_URI tidak dikonfigurasi. Fitur yang membutuhkan database mengalami masalah." 26 | ) 27 | print(str(e)) 28 | -------------------------------------------------------------------------------- /geezproject/utils/converter/converter.py: -------------------------------------------------------------------------------- 1 | import asyncio 2 | from os import path 3 | 4 | from geezproject.utils.exceptions import FFmpegReturnCodeError 5 | 6 | 7 | async def convert(file_path: str) -> str: 8 | out = path.join("raw_files", path.basename(file_path + ".raw")) 9 | if path.isfile(out): 10 | return out 11 | proc = await asyncio.create_subprocess_shell( 12 | cmd=( 13 | "ffmpeg " 14 | "-y -i " 15 | f"{file_path} " 16 | "-f s16le " 17 | "-ac 1 " 18 | "-ar 48000 " 19 | "-acodec pcm_s16le " 20 | f"{out}" 21 | ), 22 | stdin=asyncio.subprocess.PIPE, 23 | stderr=asyncio.subprocess.PIPE, 24 | ) 25 | await proc.communicate() 26 | if proc.returncode != 0: 27 | raise FFmpegReturnCodeError("FFmpeg did not return 0") 28 | return out 29 | -------------------------------------------------------------------------------- /geezproject/resources/session/session.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # Ultroid - geezproject 3 | # Copyright (C) 2022 GeezProjects 4 | # 5 | # This file is a part of < https://github.com/vckyou/GeezProjects/ > 6 | # PLease read the GNU Affero General Public License in 7 | 8 | clear 9 | sec=3 10 | spinner=(⣻ ⢿ ⡿ ⣟ ⣯ ⣷) 11 | while [ $sec -gt 0 ]; do 12 | echo -ne "\e[33m ${spinner[sec]} Starting dependency installation in $sec seconds...\r" 13 | sleep 1 14 | sec=$(($sec - 1)) 15 | done 16 | echo -e "\e[1;32mInstalling Dependencies ---------------------------\e[0m\n" 17 | apt-get update 18 | apt-get upgrade -y 19 | pkg upgrade -y 20 | pkg install python wget -y 21 | wget https://raw.githubusercontent.com/vckyou/GeezProjects/master/geezproject/resources/session/string_session.py 22 | pip install telethon 23 | clear 24 | python3 string_session.py 25 | -------------------------------------------------------------------------------- /geezproject/utils/exceptions.py: -------------------------------------------------------------------------------- 1 | # Copyright (C) 2020 Adek Maulana 2 | # 3 | # SPDX-License-Identifier: GPL-3.0-or-later 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU General Public License as published by 6 | # the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU General Public License 15 | # along with this program. If not, see . 16 | 17 | 18 | class CancelProcess(Exception): 19 | """Cancel Process""" 20 | 21 | 22 | class FFmpegReturnCodeError(Exception): 23 | pass 24 | -------------------------------------------------------------------------------- /geezproject/modules/sql_helper/keep_read_sql.py: -------------------------------------------------------------------------------- 1 | try: 2 | from geezproject.modules.sql_helper import BASE, SESSION 3 | except ImportError: 4 | raise AttributeError 5 | 6 | from sqlalchemy import Column, String 7 | 8 | 9 | class KRead(BASE): 10 | __tablename__ = "kread" 11 | groupid = Column(String(14), primary_key=True) 12 | 13 | def __init__(self, sender): 14 | self.groupid = str(sender) 15 | 16 | 17 | KRead.__table__.create(checkfirst=True) 18 | 19 | 20 | def is_kread(): 21 | try: 22 | return SESSION.query(KRead).all() 23 | except BaseException: 24 | return None 25 | finally: 26 | SESSION.close() 27 | 28 | 29 | def kread(chat): 30 | adder = KRead(str(chat)) 31 | SESSION.add(adder) 32 | SESSION.commit() 33 | 34 | 35 | def unkread(chat): 36 | rem = SESSION.query(KRead).get((str(chat))) 37 | if rem: 38 | SESSION.delete(rem) 39 | SESSION.commit() 40 | -------------------------------------------------------------------------------- /geezproject/modules/sql_helper/gmute_sql.py: -------------------------------------------------------------------------------- 1 | try: 2 | from geezproject.modules.sql_helper import BASE, SESSION 3 | except ImportError: 4 | raise AttributeError 5 | 6 | from sqlalchemy import Column, String 7 | 8 | 9 | class GMute(BASE): 10 | __tablename__ = "gmute" 11 | sender = Column(String(14), primary_key=True) 12 | 13 | def __init__(self, sender): 14 | self.sender = str(sender) 15 | 16 | 17 | GMute.__table__.create(checkfirst=True) 18 | 19 | 20 | def is_gmuted(sender_id): 21 | try: 22 | return SESSION.query(GMute).all() 23 | except BaseException: 24 | return None 25 | finally: 26 | SESSION.close() 27 | 28 | 29 | def gmute(sender): 30 | adder = GMute(str(sender)) 31 | SESSION.add(adder) 32 | SESSION.commit() 33 | 34 | 35 | def ungmute(sender): 36 | rem = SESSION.query(GMute).get((str(sender))) 37 | if rem: 38 | SESSION.delete(rem) 39 | SESSION.commit() 40 | -------------------------------------------------------------------------------- /geezproject/modules/sql_helper/no_log_pms_sql.py: -------------------------------------------------------------------------------- 1 | from sqlalchemy import Column, Numeric 2 | 3 | from geezproject.modules.sql_helper import BASE, SESSION 4 | 5 | 6 | class NOLogPMs(BASE): 7 | __tablename__ = "no_log_pms" 8 | chat_id = Column(Numeric, primary_key=True) 9 | 10 | def __init__(self, chat_id, reason=""): 11 | self.chat_id = chat_id 12 | 13 | 14 | NOLogPMs.__table__.create(checkfirst=True) 15 | 16 | 17 | def is_approved(chat_id): 18 | try: 19 | return SESSION.query(NOLogPMs).filter(NOLogPMs.chat_id == chat_id).one() 20 | except BaseException: 21 | return None 22 | finally: 23 | SESSION.close() 24 | 25 | 26 | def approve(chat_id): 27 | adder = NOLogPMs(chat_id) 28 | SESSION.add(adder) 29 | SESSION.commit() 30 | 31 | 32 | def disapprove(chat_id): 33 | rem = SESSION.query(NOLogPMs).get(chat_id) 34 | if rem: 35 | SESSION.delete(rem) 36 | SESSION.commit() 37 | -------------------------------------------------------------------------------- /geezproject/modules/helper.py: -------------------------------------------------------------------------------- 1 | """ geezproject module for other small commands. """ 2 | from geezproject import CMD_HANDLER as cmd 3 | from geezproject import CMD_HELP 4 | from geezproject.utils import edit_or_reply, geez_cmd 5 | 6 | 7 | @geez_cmd(pattern="listvar$") 8 | async def var(event): 9 | await edit_or_reply( 10 | event, 11 | "**Daftar Lengkap Vars Dari GeezProjects:** [KLIK DISINI](https://telegra.ph/List-Variabel-Heroku-untuk-GeezProjects-09-22)", 12 | ) 13 | 14 | 15 | CMD_HELP.update( 16 | { 17 | "helper": f"**Plugin : **`helper`\ 18 | \n\n 𝘾𝙤𝙢𝙢𝙖𝙣𝙙 :** `{cmd}ihelp`\ 19 | \n ❍▸ : **Bantuan Untuk GeezProjects.\ 20 | \n\n 𝘾𝙤𝙢𝙢𝙖𝙣𝙙 :** `{cmd}listvar`\ 21 | \n ❍▸ : **Melihat Daftar Vars.\ 22 | \n\n 𝘾𝙤𝙢𝙢𝙖𝙣𝙙 :** `{cmd}repo`\ 23 | \n ❍▸ : **Melihat Repository GeezProjects.\ 24 | \n\n 𝘾𝙤𝙢𝙢𝙖𝙣𝙙 :** `{cmd}string`\ 25 | \n ❍▸ : **Link untuk mengambil String GeezProjects.\ 26 | " 27 | } 28 | ) 29 | -------------------------------------------------------------------------------- /.github/workflows/pylint.yml: -------------------------------------------------------------------------------- 1 | name: PyLint 2 | on: push 3 | jobs: 4 | PEP8: 5 | runs-on: ubuntu-latest 6 | steps: 7 | - uses: actions/checkout@v2 8 | - name: Setup Python 9 | uses: actions/setup-python@v1 10 | with: 11 | python-version: 3.9 12 | - name: Install Python lint libraries 13 | run: | 14 | pip install autoflake isort black 15 | - name: Remove unused imports and variables 16 | run: | 17 | autoflake --in-place --recursive --remove-all-unused-imports --remove-unused-variables --ignore-init-module-imports . 18 | 19 | 20 | # commit change 21 | - uses: stefanzweifel/git-auto-commit-action@v4 22 | with: 23 | commit_message: 'geezprojects: auto fixes' 24 | commit_options: '--no-verify --signoff' 25 | repository: . 26 | commit_user_name: vckyou 27 | commit_user_email: viicky.auliaz@gmail.com 28 | commit_author: vckyou 29 | -------------------------------------------------------------------------------- /geezproject/modules/sql_helper/pm_permit_sql.py: -------------------------------------------------------------------------------- 1 | try: 2 | from geezproject.modules.sql_helper import BASE, SESSION 3 | except ImportError: 4 | raise AttributeError 5 | from sqlalchemy import Column, String 6 | 7 | 8 | class PMPermit(BASE): 9 | __tablename__ = "pmpermit" 10 | chat_id = Column(String(14), primary_key=True) 11 | 12 | def __init__(self, chat_id): 13 | self.chat_id = str(chat_id) # ensure string 14 | 15 | 16 | PMPermit.__table__.create(checkfirst=True) 17 | 18 | 19 | def is_approved(chat_id): 20 | try: 21 | return SESSION.query(PMPermit).filter(PMPermit.chat_id == str(chat_id)).one() 22 | except BaseException: 23 | return None 24 | finally: 25 | SESSION.close() 26 | 27 | 28 | def approve(chat_id): 29 | adder = PMPermit(str(chat_id)) 30 | SESSION.add(adder) 31 | SESSION.commit() 32 | 33 | 34 | def dissprove(chat_id): 35 | rem = SESSION.query(PMPermit).get(str(chat_id)) 36 | if rem: 37 | SESSION.delete(rem) 38 | SESSION.commit() 39 | -------------------------------------------------------------------------------- /geezproject/modules/sql_helper/mute_sql.py: -------------------------------------------------------------------------------- 1 | try: 2 | from geezproject.modules.sql_helper import BASE, SESSION 3 | except ImportError: 4 | raise Exception("Hello!") 5 | 6 | from sqlalchemy import Column, String 7 | 8 | 9 | class Mute(BASE): 10 | __tablename__ = "mute" 11 | sender = Column(String(14), primary_key=True) 12 | chat_id = Column(String(14), primary_key=True) 13 | 14 | def __init__(self, sender, chat_id): 15 | self.sender = str(sender) 16 | self.chat_id = str(chat_id) 17 | 18 | 19 | Mute.__table__.create(checkfirst=True) 20 | 21 | 22 | def is_muted(sender, chat_id): 23 | user = SESSION.query(Mute).get((str(sender), str(chat_id))) 24 | return bool(user) 25 | 26 | 27 | def mute(sender, chat_id): 28 | adder = Mute(str(sender), str(chat_id)) 29 | SESSION.add(adder) 30 | SESSION.commit() 31 | 32 | 33 | def unmute(sender, chat_id): 34 | rem = SESSION.query(Mute).get((str(sender), str(chat_id))) 35 | if rem: 36 | SESSION.delete(rem) 37 | SESSION.commit() 38 | -------------------------------------------------------------------------------- /geezproject/modules/lyrics.py: -------------------------------------------------------------------------------- 1 | import requests 2 | 3 | from geezproject import CMD_HANDLER as cmd 4 | from geezproject import CMD_HELP 5 | from geezproject.utils import edit_or_reply, geez_cmd 6 | 7 | 8 | @geez_cmd(pattern="lyrics(?:\s|$)([\s\S]*)") 9 | async def _(event): 10 | query = event.pattern_match.group(1) 11 | if not query: 12 | return await edit_or_reply(event, "**Silahkan Masukan Judul Lagu**") 13 | try: 14 | xxnx = await edit_or_reply(event, "`Searching Lyrics...`") 15 | respond = requests.get( 16 | f"https://api-tede.herokuapp.com/api/lirik?l={query}" 17 | ).json() 18 | result = f"{respond['data']}" 19 | await xxnx.edit(result) 20 | except Exception: 21 | await xxnx.edit("**Lirik lagu tidak ditemukan.**") 22 | 23 | 24 | CMD_HELP.update( 25 | { 26 | "lyrics": f"**Plugin : **`lyrics`\ 27 | \n\n 𝘾𝙤𝙢𝙢𝙖𝙣𝙙 :** `{cmd}lyrics` \ 28 | \n ❍▸ : **Dapatkan lirik lagu yang cocok dengan judul lagu.\ 29 | " 30 | } 31 | ) 32 | -------------------------------------------------------------------------------- /geezproject/modules/sql_helper/fban_sql.py: -------------------------------------------------------------------------------- 1 | try: 2 | from geezproject.modules.sql_helper import BASE, SESSION 3 | except ImportError: 4 | raise AttributeError 5 | 6 | from sqlalchemy import Column, String, UnicodeText 7 | 8 | 9 | class Fban(BASE): 10 | __tablename__ = "fban" 11 | chat_id = Column(String(14), primary_key=True) 12 | fed_name = Column(UnicodeText) 13 | 14 | def __init__(self, chat_id, fed_name): 15 | self.chat_id = str(chat_id) 16 | self.fed_name = fed_name 17 | 18 | 19 | Fban.__table__.create(checkfirst=True) 20 | 21 | 22 | def get_flist(): 23 | try: 24 | return SESSION.query(Fban).all() 25 | finally: 26 | SESSION.close() 27 | 28 | 29 | def add_flist(chat_id, fed_name): 30 | adder = Fban(str(chat_id), fed_name) 31 | SESSION.add(adder) 32 | SESSION.commit() 33 | 34 | 35 | def del_flist(chat_id): 36 | rem = SESSION.query(Fban).get(str(chat_id)) 37 | if rem: 38 | SESSION.delete(rem) 39 | SESSION.commit() 40 | 41 | 42 | def del_flist_all(): 43 | SESSION.execute("""TRUNCATE TABLE fban""") 44 | SESSION.commit() 45 | -------------------------------------------------------------------------------- /geezproject/core/decorators.py: -------------------------------------------------------------------------------- 1 | import asyncio 2 | 3 | from telethon.errors import FloodWaitError, MessageNotModifiedError 4 | from telethon.events import CallbackQuery 5 | 6 | from geezproject import SUDO_USERS, bot, owner 7 | from geezproject.modules.sql_helper.globals import gvarstatus 8 | 9 | 10 | def check_owner(func): 11 | async def wrapper(c_q: CallbackQuery): 12 | user = await bot.get_me() 13 | uid = user.id 14 | if c_q.query.user_id and ( 15 | c_q.query.user_id == uid or c_q.query.user_id in SUDO_USERS 16 | ): 17 | try: 18 | await func(c_q) 19 | except FloodWaitError as e: 20 | await asyncio.sleep(e.seconds + 5) 21 | except MessageNotModifiedError: 22 | pass 23 | else: 24 | HELP_TEXT = ( 25 | gvarstatus("HELP_TEXT") 26 | or f"Hanya {owner} yang dapat Mengakses Ini!!\nSilahkan Buat geezproject Anda sendiri." 27 | ) 28 | await c_q.answer( 29 | HELP_TEXT, 30 | alert=True, 31 | ) 32 | 33 | return wrapper 34 | -------------------------------------------------------------------------------- /geezproject/modules/sql_helper/spam_mute_sql.py: -------------------------------------------------------------------------------- 1 | try: 2 | from geezproject.modules.sql_helper import BASE, SESSION 3 | except ImportError: 4 | raise AttributeError 5 | 6 | from sqlalchemy import Column, String 7 | 8 | 9 | class Mute(BASE): 10 | __tablename__ = "muted" 11 | chat_id = Column(String(14), primary_key=True) 12 | sender = Column(String(14), primary_key=True) 13 | 14 | def __init__(self, chat_id, sender): 15 | self.chat_id = str(chat_id) # ensure string 16 | self.sender = str(sender) 17 | 18 | 19 | Mute.__table__.create(checkfirst=True) 20 | 21 | 22 | def is_muted(chat_id): 23 | try: 24 | return SESSION.query(Mute).filter(Mute.chat_id == str(chat_id)).all() 25 | except BaseException: 26 | return None 27 | finally: 28 | SESSION.close() 29 | 30 | 31 | def mute(chat_id, sender): 32 | adder = Mute(str(chat_id), str(sender)) 33 | SESSION.add(adder) 34 | SESSION.commit() 35 | 36 | 37 | def unmute(chat_id, sender): 38 | rem = SESSION.query(Mute).get(((str(chat_id)), (str(sender)))) 39 | if rem: 40 | SESSION.delete(rem) 41 | SESSION.commit() 42 | -------------------------------------------------------------------------------- /geezproject/modules/sql_helper/tede_chatbot_sql.py: -------------------------------------------------------------------------------- 1 | import threading 2 | 3 | from sqlalchemy import Column, String 4 | 5 | from geezproject.modules.sql_helper import BASE, SESSION 6 | 7 | 8 | class TedeChatBot(BASE): 9 | __tablename__ = "tede_chatbot" 10 | chat_id = Column(String(14), primary_key=True) 11 | 12 | def __init__(self, chat_id): 13 | self.chat_id = str(chat_id) 14 | 15 | 16 | TedeChatBot.__table__.create(checkfirst=True) 17 | 18 | INSERTION_LOCK = threading.RLock() 19 | 20 | 21 | def is_tede(chat_id): 22 | try: 23 | chat = SESSION.query(TedeChatBot).get(str(chat_id)) 24 | return bool(chat) 25 | finally: 26 | SESSION.close() 27 | 28 | 29 | def set_tede(chat_id): 30 | with INSERTION_LOCK: 31 | tedechat = SESSION.query(TedeChatBot).get(str(chat_id)) 32 | if not tedechat: 33 | tedechat = TedeChatBot(str(chat_id)) 34 | SESSION.add(tedechat) 35 | SESSION.commit() 36 | 37 | 38 | def rem_tede(chat_id): 39 | with INSERTION_LOCK: 40 | tedechat = SESSION.query(TedeChatBot).get(str(chat_id)) 41 | if tedechat: 42 | SESSION.delete(tedechat) 43 | SESSION.commit() 44 | -------------------------------------------------------------------------------- /geezproject/core/pool.py: -------------------------------------------------------------------------------- 1 | import asyncio 2 | from concurrent.futures import Future, ThreadPoolExecutor 3 | from functools import partial, wraps 4 | from typing import Any, Callable 5 | 6 | from motor.frameworks.asyncio import _EXECUTOR 7 | 8 | from geezproject.utils.logger import logging 9 | 10 | _LOG = logging.getLogger(__name__) 11 | _LOG_STR = "<<<[ %s ]>>>" 12 | 13 | 14 | def submit_thread(func: Callable[[Any], Any], *args: Any, **kwargs: Any) -> Future: 15 | """submit thread to thread pool""" 16 | return _EXECUTOR.submit(func, *args, **kwargs) 17 | 18 | 19 | def run_in_thread(func: Callable[[Any], Any]) -> Callable[[Any], Any]: 20 | """run in a thread""" 21 | 22 | @wraps(func) 23 | async def wrapper(*args: Any, **kwargs: Any) -> Any: 24 | loop = asyncio.get_running_loop() 25 | return await loop.run_in_executor(_EXECUTOR, partial(func, *args, **kwargs)) 26 | 27 | return wrapper 28 | 29 | 30 | def _get() -> ThreadPoolExecutor: 31 | return _EXECUTOR 32 | 33 | 34 | def _stop(): 35 | _EXECUTOR.shutdown() 36 | _LOG.info(_LOG_STR, f"Stopped Pool : {_EXECUTOR._max_workers} Workers") 37 | 38 | 39 | _LOG.info(_LOG_STR, f"Started Pool : {_EXECUTOR._max_workers} Workers") 40 | -------------------------------------------------------------------------------- /geezproject/resources/session/string_session.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # (c) https://t.me/TelethonChat/37677 and SpEcHiDe 3 | # 4 | # Licensed under the Raphielscape Public License, Version 1.d (the "License"); 5 | # you may not use this file except in compliance with the License. 6 | # 7 | 8 | from telethon.sessions import StringSession 9 | from telethon.sync import TelegramClient 10 | 11 | print( 12 | """Please go-to my.telegram.org 13 | Login using your Telegram account 14 | Click on API Development Tools 15 | Create a new application, by entering the required details 16 | Check your Telegram saved messages section to copy the STRING_SESSION""" 17 | ) 18 | API_KEY = int(input("Enter API_KEY here: ")) 19 | API_HASH = input("Enter API_HASH here: ") 20 | 21 | with TelegramClient(StringSession(), API_KEY, API_HASH) as client: 22 | print("Check Telegram Save Message Mu Untuk Copy STRING_SESSION ") 23 | session_string = client.session.save() 24 | saved_messages_template = """Grup Support @GeezSupport 25 | 26 | STRING_SESSION: {} 27 | 28 | ⚠️ Please be careful before passing this value to third parties""".format( 29 | session_string 30 | ) 31 | client.send_message("me", saved_messages_template, parse_mode="html") 32 | -------------------------------------------------------------------------------- /geezproject/modules/sql_helper/gban_sql.py: -------------------------------------------------------------------------------- 1 | from sqlalchemy import Column, String 2 | 3 | from geezproject.modules.sql_helper import BASE, SESSION 4 | 5 | 6 | class GBan(BASE): 7 | __tablename__ = "gban" 8 | chat_id = Column(String(14), primary_key=True) 9 | reason = Column(String(127)) 10 | 11 | def __init__(self, chat_id, reason=""): 12 | self.chat_id = chat_id 13 | self.reason = reason 14 | 15 | 16 | GBan.__table__.create(checkfirst=True) 17 | 18 | 19 | def is_gbanned(chat_id): 20 | try: 21 | return SESSION.query(GBan).filter(GBan.chat_id == str(chat_id)).one() 22 | except BaseException: 23 | return None 24 | finally: 25 | SESSION.close() 26 | 27 | 28 | def get_gbanuser(chat_id): 29 | try: 30 | return SESSION.query(GBan).get(str(chat_id)) 31 | finally: 32 | SESSION.close() 33 | 34 | 35 | def freakgban(chat_id, reason): 36 | adder = GBan(str(chat_id), str(reason)) 37 | SESSION.add(adder) 38 | SESSION.commit() 39 | 40 | 41 | def freakungban(chat_id): 42 | rem = SESSION.query(GBan).get(str(chat_id)) 43 | if rem: 44 | SESSION.delete(rem) 45 | SESSION.commit() 46 | 47 | 48 | def get_all_gbanned(): 49 | rem = SESSION.query(GBan).all() 50 | SESSION.close() 51 | return rem 52 | -------------------------------------------------------------------------------- /geezproject/modules/aeshtetic.py: -------------------------------------------------------------------------------- 1 | # Copyright (C) 2019 The Raphielscape Company LLC. 2 | # 3 | # Licensed under the Raphielscape Public License, Version 1.d (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # 6 | # Ported for Lord-geezproject By liualvinas/Alvin 7 | 8 | from telethon import events 9 | 10 | from geezproject import CMD_HANDLER as cmd 11 | from geezproject import CMD_HELP 12 | from geezproject.utils import edit_or_reply, geez_cmd 13 | 14 | PRINTABLE_ASCII = range(0x21, 0x7F) 15 | 16 | 17 | def aesthetify(string): 18 | for c in string: 19 | c = ord(c) 20 | if c in PRINTABLE_ASCII: 21 | c += 0xFF00 - 0x20 22 | elif c == ord(" "): 23 | c = 0x3000 24 | yield chr(c) 25 | 26 | 27 | @geez_cmd(pattern="ae(?: |$)(.*)") 28 | async def _(event): 29 | if event.fwd_from: 30 | return 31 | text = event.pattern_match.group(1) 32 | text = "".join(aesthetify(text)) 33 | await edit_or_reply(event, text=text, parse_mode=None, link_preview=False) 34 | raise events.StopPropagation 35 | 36 | 37 | CMD_HELP.update( 38 | { 39 | "aeshtetic": f"**Plugin : **`aeshtetic`\ 40 | \n\n 𝘾𝙤𝙢𝙢𝙖𝙣𝙙 :** `{cmd}ae `\ 41 | \n ↳ : **Mengubah font teks Menjadi aeshtetic.\ 42 | " 43 | } 44 | ) 45 | -------------------------------------------------------------------------------- /geezproject/modules/gps.py: -------------------------------------------------------------------------------- 1 | # credits: mrconfused 2 | from geopy.geocoders import Nominatim 3 | from telethon.tl import types 4 | 5 | from geezproject import CMD_HANDLER as cmd 6 | from geezproject import CMD_HELP, bot 7 | from geezproject.events import geez_cmd 8 | 9 | 10 | @bot.on(geez_cmd(outgoing=True, pattern=r"gps(?: |$)(.*)")) 11 | async def gps(event): 12 | if event.fwd_from: 13 | return 14 | reply_to_id = event.message 15 | if event.reply_to_msg_id: 16 | reply_to_id = await event.get_reply_message() 17 | input_str = event.pattern_match.group(1) 18 | 19 | if not input_str: 20 | return await event.edit("`Berikan Tempat Yang Dicari...`") 21 | 22 | await event.edit("`Menemukan Lokasi Ini Di Server Map....`") 23 | 24 | geolocator = Nominatim(user_agent="Geez") 25 | geoloc = geolocator.geocode(input_str) 26 | 27 | if geoloc: 28 | lon = geoloc.longitude 29 | lat = geoloc.latitude 30 | await reply_to_id.reply( 31 | input_str, file=types.InputMediaGeoPoint(types.InputGeoPoint(lat, lon)) 32 | ) 33 | await event.delete() 34 | else: 35 | await event.edit("`Maaf Saya Tidak Dapat Menemukannya`") 36 | 37 | 38 | CMD_HELP.update( 39 | { 40 | "gps": f"**Plugin : **`gps`\ 41 | \n\n 𝘾𝙤𝙢𝙢𝙖𝙣𝙙 :** `{cmd}gps` \ 42 | \n ❍▸ : **Untuk Mendapatkan Lokasi Map.\ 43 | " 44 | } 45 | ) 46 | -------------------------------------------------------------------------------- /geezproject/modules/sql_helper/globals.py: -------------------------------------------------------------------------------- 1 | try: 2 | from geezproject.modules.sql_helper import BASE, SESSION 3 | except ImportError: 4 | raise AttributeError 5 | 6 | from sqlalchemy import Column, String, UnicodeText 7 | 8 | 9 | class Globals(BASE): 10 | __tablename__ = "globals" 11 | variable = Column(String, primary_key=True, nullable=False) 12 | value = Column(UnicodeText, primary_key=True, nullable=False) 13 | 14 | def __init__(self, variable, value): 15 | self.variable = str(variable) 16 | self.value = value 17 | 18 | 19 | Globals.__table__.create(checkfirst=True) 20 | 21 | 22 | def gvarstatus(variable): 23 | try: 24 | return ( 25 | SESSION.query(Globals) 26 | .filter(Globals.variable == str(variable)) 27 | .first() 28 | .value 29 | ) 30 | except BaseException: 31 | return None 32 | finally: 33 | SESSION.close() 34 | 35 | 36 | def addgvar(variable, value): 37 | if SESSION.query(Globals).filter(Globals.variable == str(variable)).one_or_none(): 38 | delgvar(variable) 39 | adder = Globals(str(variable), value) 40 | SESSION.add(adder) 41 | SESSION.commit() 42 | 43 | 44 | def delgvar(variable): 45 | rem = ( 46 | SESSION.query(Globals) 47 | .filter(Globals.variable == str(variable)) 48 | .delete(synchronize_session="fetch") 49 | ) 50 | if rem: 51 | SESSION.commit() 52 | -------------------------------------------------------------------------------- /geezproject/modules/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright (C) 2019 The Raphielscape Company LLC. 2 | # 3 | # Licensed under the Raphielscape Public License, Version 1.d (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # 6 | # FROM GeezProjects 7 | # Support @GeezSupport & @GeezProjects 8 | 9 | import sys 10 | 11 | from geezproject import LOAD, LOGS, NO_LOAD 12 | 13 | def __list_all_modules(): 14 | import glob 15 | from os.path import basename, dirname, isfile 16 | 17 | mod_paths = glob.glob(dirname(__file__) + "/*.py") 18 | all_modules = [ 19 | basename(f)[:-3] 20 | for f in mod_paths 21 | if isfile(f) and f.endswith(".py") and not f.endswith("__init__.py") 22 | ] 23 | if LOAD or NO_LOAD: 24 | to_load = LOAD 25 | if to_load: 26 | if not all( 27 | any(mod == module_name for module_name in all_modules) 28 | for mod in to_load 29 | ): 30 | LOGS.error("Nama Modules yang anda masukan salah.") 31 | sys.exit(1) 32 | else: 33 | to_load = all_modules 34 | if NO_LOAD: 35 | LOGS.info("Modules No Load : {}".format(NO_LOAD)) 36 | return [item for item in to_load if item not in NO_LOAD] 37 | return to_load 38 | return all_modules 39 | 40 | 41 | ALL_MODULES = sorted(__list_all_modules()) 42 | LOGS.info("Loading All Modules...") 43 | __all__ = ALL_MODULES + ["ALL_MODULES"] 44 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | aiofiles 2 | aiohttp[speedups] 3 | async_generator 4 | asyncurban 5 | beautifulsoup4 6 | bitlyshortener 7 | bs4 8 | colour 9 | cloudscraper 10 | covid 11 | cowpy 12 | deezloader 13 | dnspython 14 | emoji==1.7.0 15 | faker 16 | ffmpeg-python 17 | fontTools 18 | geopy 19 | git+https://github.com/programmingerror/heroku3.py.git 20 | git+https://github.com/1danish-00/carbon-now-sh-api-wrapper.git 21 | img2html 22 | git+https://github.com/yt-dlp/yt-dlp@master 23 | gitpython 24 | glitch_this 25 | google_images_download 26 | google_trans_new 27 | googletrans==4.0.0rc1 28 | gtts 29 | hachoir 30 | hentai 31 | heroku3 32 | html_telegraph_poster 33 | htmlwebshot 34 | httplib2 35 | humanize 36 | jikanpy 37 | js2py 38 | justwatch 39 | lottie 40 | lxml 41 | markdown 42 | motor 43 | natsort 44 | nekos.py 45 | opencv-python-headless 46 | pafy 47 | pendulum 48 | pillow 49 | psutil 50 | psycopg2-binary 51 | py-tgcalls==1.1.6 52 | pyaztro 53 | pybase64 54 | pyfiglet 55 | PyGithub 56 | pylast 57 | PyPDF2 58 | pySmartDL 59 | python-barcode 60 | python-dotenv 61 | pytz 62 | qrcode 63 | rarfile 64 | randomstuff.py 65 | regex 66 | requests 67 | scipy 68 | search-engine-parser 69 | selenium 70 | setuptools 71 | spamwatch 72 | speedtest-cli 73 | sqlalchemy-json 74 | sqlalchemy==1.3.23 75 | telegraph 76 | telethon-session-sqlalchemy 77 | telethon==1.24.0 78 | tgcrypto 79 | urbandict 80 | validators 81 | vcsi 82 | wand 83 | webpage2telegraph 84 | wget 85 | wikipedia 86 | wordcloud 87 | youtube-dl 88 | youtube-search 89 | youtube-search-python==1.4.9 90 | zipfile38 91 | -------------------------------------------------------------------------------- /geezproject/modules/sql_helper/snips_sql.py: -------------------------------------------------------------------------------- 1 | from sqlalchemy import Column, Numeric, UnicodeText 2 | 3 | from geezproject.modules.sql_helper import BASE, SESSION 4 | 5 | 6 | class Note(BASE): 7 | __tablename__ = "snip" 8 | keyword = Column(UnicodeText, primary_key=True, nullable=False) 9 | reply = Column(UnicodeText) 10 | f_mesg_id = Column(Numeric) 11 | 12 | def __init__(self, keyword, reply, f_mesg_id): 13 | self.keyword = keyword 14 | self.reply = reply 15 | self.f_mesg_id = f_mesg_id 16 | 17 | 18 | Note.__table__.create(checkfirst=True) 19 | 20 | 21 | def get_note(keyword): 22 | try: 23 | return SESSION.query(Note).get(keyword) 24 | finally: 25 | SESSION.close() 26 | 27 | 28 | def get_notes(): 29 | try: 30 | return SESSION.query(Note).all() 31 | finally: 32 | SESSION.close() 33 | 34 | 35 | def add_note(keyword, reply, f_mesg_id): 36 | to_check = get_note(keyword) 37 | if not to_check: 38 | adder = Note(keyword, reply, f_mesg_id) 39 | SESSION.add(adder) 40 | SESSION.commit() 41 | return True 42 | rem = SESSION.query(Note).get(keyword) 43 | SESSION.delete(rem) 44 | SESSION.commit() 45 | adder = Note(keyword, reply, f_mesg_id) 46 | SESSION.add(adder) 47 | SESSION.commit() 48 | return False 49 | 50 | 51 | def rm_note(keyword): 52 | to_check = get_note(keyword) 53 | if not to_check: 54 | return False 55 | rem = SESSION.query(Note).get(keyword) 56 | SESSION.delete(rem) 57 | SESSION.commit() 58 | return True 59 | -------------------------------------------------------------------------------- /geezproject/modules/punten.py: -------------------------------------------------------------------------------- 1 | from time import sleep 2 | 3 | from geezproject import CMD_HANDLER as cmd 4 | from geezproject import CMD_HELP, bot 5 | from geezproject.events import geez_cmd 6 | 7 | 8 | @bot.on(geez_cmd(outgoing=True, pattern=r"sadboy(?: |$)(.*)")) 9 | async def _(event): 10 | await event.edit("`Pertama-tama kamu cantik`") 11 | sleep(2) 12 | await event.edit("`Kedua kamu manis`") 13 | sleep(1) 14 | await event.edit("`Dan yang terakhir adalah kamu bukan jodohku`") 15 | 16 | 17 | # Create by myself @localheart 18 | 19 | 20 | @bot.on(geez_cmd(outgoing=True, pattern=r"punten(?: |$)(.*)")) 21 | async def _(event): 22 | await event.edit( 23 | "`\n┻┳|―-∩`" 24 | "`\n┳┻| ヽ`" 25 | "`\n┻┳| ● |`" 26 | "`\n┳┻|▼) _ノ`" 27 | "`\n┻┳| ̄ )`" 28 | "`\n┳ミ( ̄ /`" 29 | "`\n┻┳T ̄|`" 30 | "\n**Punten**" 31 | ) 32 | 33 | 34 | @bot.on(geez_cmd(outgoing=True, pattern=r"pantau(?: |$)(.*)")) 35 | async def _(event): 36 | await event.edit( 37 | "`\n┻┳|―-∩`" 38 | "`\n┳┻| ヽ`" 39 | "`\n┻┳| ● |`" 40 | "`\n┳┻|▼) _ノ`" 41 | "`\n┻┳| ̄ )`" 42 | "`\n┳ミ( ̄ /`" 43 | "`\n┻┳T ̄|`" 44 | "\n**Masih Gua Pantau**" 45 | ) 46 | 47 | 48 | # Create by myself @localheart 49 | 50 | 51 | CMD_HELP.update( 52 | { 53 | "punten": f"**Plugin : **`Animasi Punten`\ 54 | \n\n 𝘾𝙤𝙢𝙢𝙖𝙣𝙙 :** `{cmd}punten` ; `{cmd}pantau`\ 55 | \n ❍▸ : **Arts Beruang kek lagi mantau.\ 56 | \n\n 𝘾𝙤𝙢𝙢𝙖𝙣𝙙 :** `{cmd}sadboy`\ 57 | \n ❍▸ : **ya sadboy coba aja.\ 58 | " 59 | } 60 | ) 61 | -------------------------------------------------------------------------------- /geezproject/modules/sql_helper/lydia_sql.py: -------------------------------------------------------------------------------- 1 | from sqlalchemy import Column, Numeric, UnicodeText 2 | 3 | from geezproject.modules.sql_helper import BASE, SESSION 4 | 5 | 6 | class LydiaAI(BASE): 7 | __tablename__ = "lydia_ai" 8 | user_id = Column(Numeric, primary_key=True) 9 | chat_id = Column(Numeric, primary_key=True) 10 | session_id = Column(UnicodeText) 11 | session_expires = Column(Numeric) 12 | 13 | def __init__(self, user_id, chat_id, session_id, session_expires): 14 | self.user_id = user_id 15 | self.chat_id = chat_id 16 | self.session_id = session_id 17 | self.session_expires = session_expires 18 | 19 | 20 | LydiaAI.__table__.create(checkfirst=True) 21 | 22 | 23 | def get_s(user_id, chat_id): 24 | try: 25 | return SESSION.query(LydiaAI).get((user_id, chat_id)) 26 | except BaseException: 27 | return None 28 | finally: 29 | SESSION.close() 30 | 31 | 32 | def get_all_s(): 33 | try: 34 | return SESSION.query(LydiaAI).all() 35 | except BaseException: 36 | return None 37 | finally: 38 | SESSION.close() 39 | 40 | 41 | def add_s(user_id, chat_id, session_id, session_expires): 42 | adder = SESSION.query(LydiaAI).get((user_id, chat_id)) 43 | if adder: 44 | adder.session_id = session_id 45 | adder.session_expires = session_expires 46 | else: 47 | adder = LydiaAI(user_id, chat_id, session_id, session_expires) 48 | SESSION.add(adder) 49 | SESSION.commit() 50 | 51 | 52 | def remove_s(user_id, chat_id): 53 | note = SESSION.query(LydiaAI).get((user_id, chat_id)) 54 | if note: 55 | SESSION.delete(note) 56 | SESSION.commit() 57 | -------------------------------------------------------------------------------- /geezproject/clients/client_list.py: -------------------------------------------------------------------------------- 1 | from base64 import b64decode 2 | 3 | import telethon.utils 4 | from telethon.tl.functions.users import GetFullUserRequest 5 | 6 | 7 | async def clients_list(SUDO_USERS, bot, GEEZ2, GEEZ3, GEEZ4, GEEZ5): 8 | user_ids = list(SUDO_USERS) or [] 9 | main_id = await bot.get_me() 10 | user_ids.append(main_id.id) 11 | 12 | try: 13 | if GEEZ2 is not None: 14 | id2 = await GEEZ2.get_me() 15 | user_ids.append(id2.id) 16 | except BaseException: 17 | pass 18 | 19 | try: 20 | if GEEZ3 is not None: 21 | id3 = await GEEZ3.get_me() 22 | user_ids.append(id3.id) 23 | except BaseException: 24 | pass 25 | 26 | try: 27 | if GEEZ4 is not None: 28 | id4 = await GEEZ4.get_me() 29 | user_ids.append(id4.id) 30 | except BaseException: 31 | pass 32 | 33 | try: 34 | if GEEZ5 is not None: 35 | id5 = await GEEZ5.get_me() 36 | user_ids.append(id5.id) 37 | except BaseException: 38 | pass 39 | 40 | return user_ids 41 | 42 | 43 | ITSME = list(map(int, b64decode("NTE1NTE0MDkxNw==").split())) 44 | 45 | 46 | async def client_id(event, botid=None): 47 | if botid is not None: 48 | uid = await event.client(GetFullUserRequest(botid)) 49 | OWNER_ID = uid.user.id 50 | GEEZ_USER = uid.user.first_name 51 | else: 52 | client = await event.client.get_me() 53 | uid = telethon.utils.get_peer_id(client) 54 | OWNER_ID = uid 55 | GEEZ_USER = client.first_name 56 | geeza_mention = f"[{GEEZ_USER}](tg://user?id={OWNER_ID})" 57 | return OWNER_ID, GEEZ_USER, geeza_mention 58 | -------------------------------------------------------------------------------- /geezproject/utils/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright (C) 2020 Adek Maulana 2 | # 3 | # SPDX-License-Identifier: GPL-3.0-or-later 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU General Public License as published by 6 | # the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU General Public License 15 | # along with this program. If not, see . 16 | from . import format as _format 17 | from .chrome import chrome, options 18 | from .decorator import asst_cmd, callback, geez_cmd, geez_handler 19 | from .events import checking, get_user_from_event 20 | from .format import parse_pre 21 | from .qhelper import process 22 | from .google_images_download import googleimagesdownload 23 | from .progress import CancelProcess, progress 24 | from .tools import ( 25 | bash, 26 | check_media, 27 | deEmojify, 28 | download_lagu, 29 | edit_delete, 30 | edit_or_reply, 31 | extract_time, 32 | human_to_bytes, 33 | humanbytes, 34 | create_quotly, 35 | _format_quote, 36 | md5, 37 | media_to_pic, 38 | media_type, 39 | post_to_telegraph, 40 | async_searcher, 41 | reply_id, 42 | run_cmd, 43 | animator, 44 | runcmd, 45 | take_screen_shot, 46 | time_formatter, 47 | ) 48 | from .utils import autobot, autocreategroup, load_module, remove_plugin, start_assistant 49 | -------------------------------------------------------------------------------- /geezproject/modules/help.py: -------------------------------------------------------------------------------- 1 | # Copyright (C) 2019 The Raphielscape Company LLC. 2 | # 3 | # Licensed under the Raphielscape Public License, Version 1.d (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # 6 | """ geezproject help command """ 7 | 8 | from geezproject import GROUP 9 | from geezproject import CMD_HANDLER as cmd 10 | from geezproject import CMD_HELP, ICON_HELP, bot 11 | from geezproject.utils import edit_delete, edit_or_reply, geez_cmd 12 | 13 | modules = CMD_HELP 14 | 15 | 16 | @geez_cmd(pattern="help(?: |$)(.*)") 17 | async def help(event): 18 | """For help command""" 19 | args = event.pattern_match.group(1).lower() 20 | if args: 21 | if args in CMD_HELP: 22 | await edit_or_reply(event, str(CMD_HELP[args])) 23 | else: 24 | await edit_delete(event, f"𝘔𝘢𝘢𝘧 𝘔𝘰𝘥𝘶𝘭𝘦 `{args}` 𝘛𝘪𝘥𝘢𝘬 𝘋𝘢𝘱𝘢𝘵 𝘋𝘪𝘵𝘦𝘮𝘶𝘬𝘢𝘯!!") 25 | else: 26 | user = await bot.get_me() 27 | string = "" 28 | for i in CMD_HELP: 29 | string += "`" + str(i) 30 | string += f"`\t\t\t{ICON_HELP}\t\t\t" 31 | await edit_or_reply( 32 | event, 33 | f"{ICON_HELP} {string}" 34 | f"\n\nSupport @{GROUP}\n" 35 | ) 36 | await event.reply( 37 | f"╭┄──────┈┄┈──────┄\n" 38 | f"│ ▸ **Daftar Perintah GeezProjects :**\n" 39 | f"│ ▸ **Jumlah** `{len(modules)}` **Modules**\n" 40 | f"│ ▸ **Owner:** [{user.first_name}](tg://user?id={user.id})\n" 41 | f"├┄─────┈┄┈─────┄\n" 42 | f"│ **Contoh Ketik** `{cmd}help ping`\n" 43 | f"│ **Untuk Melihat Informasi Module**\n" 44 | f"╰┄──────┈┈──────┄" 45 | ) 46 | -------------------------------------------------------------------------------- /app.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Geez geezproject", 3 | "description": "[GeezUserbot] geezproject Telegram modular yang berjalan pada Python 3.9+", 4 | "logo": "https://telegra.ph/file/02b3dbeb4df30582f0d66.jp", 5 | "keywords": ["telegram", "geezproject", "geezprojects", "modular", "python"], 6 | "repository": "https://github.com/vckyou/GeezProjects", 7 | "stack": "container", 8 | "env": { 9 | "API_KEY": { 10 | "description": "Dapatkan API KEY di web my.telegram.org Masukan yg APP ID Telegram", 11 | "required": true 12 | }, 13 | "API_HASH": { 14 | "description": "Dapatkan API Hash di web my.telegram.org", 15 | "required": true 16 | }, 17 | "BOT_TOKEN": { 18 | "description": "Buat Bot di t.me/botfather Masukan BOT tokennya disini", 19 | "required": false 20 | }, 21 | "STRING_SESSION": { 22 | "description": "Dapatkan String Session di Grup » https://t.me/GeezSupport » Lalu ketik /get string", 23 | "required": true 24 | }, 25 | "HEROKU_APP_NAME": { 26 | "description": "Nama App heroku, Nama App yang paling pertama di isi (liat paling atas)", 27 | "required": true 28 | }, 29 | "HEROKU_API_KEY": { 30 | "description": "Ambil Heroku API KEY mu disini » https://dashboard.heroku.com/account", 31 | "required": true 32 | } 33 | }, 34 | "addons": [ 35 | { 36 | "plan": "heroku-postgresql", 37 | "options": { 38 | "version": "12" 39 | } 40 | } 41 | ], 42 | "buildpacks": [ 43 | { 44 | "url": "heroku/python" 45 | }, 46 | { 47 | "url": "https://github.com/jonathanong/heroku-buildpack-ffmpeg-latest.git" 48 | } 49 | ], 50 | "formation": { 51 | "worker": { 52 | "quantity": 1, 53 | "size": "basic" 54 | } 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /geezproject/storage.py: -------------------------------------------------------------------------------- 1 | # This Source Code Form is subject to the terms of the Mozilla Public 2 | # License, v. 2.0. If a copy of the MPL was not distributed with this 3 | # file, You can obtain one at http://mozilla.org/MPL/2.0/. 4 | import json 5 | from pathlib import Path 6 | 7 | FILE_NAME = "data.json" 8 | 9 | 10 | class Storage: 11 | class _Guard: 12 | def __init__(self, storage): 13 | self._storage = storage 14 | 15 | def __enter__(self): 16 | self._storage._autosave = False 17 | 18 | def __exit__(self, *args): 19 | self._storage._autosave = True 20 | self._storage._save() 21 | 22 | def __init__(self, root): 23 | self._root = Path(root) 24 | self._autosave = True 25 | self._guard = self._Guard(self) 26 | if (self._root / FILE_NAME).is_file(): 27 | with open(self._root / FILE_NAME) as file_pointer: 28 | self._data = json.load(file_pointer) 29 | else: 30 | self._data = {} 31 | 32 | def bulk_save(self): 33 | return self._guard 34 | 35 | def __getattr__(self, name): 36 | if name.startswith("_"): 37 | raise ValueError("Anda hanya dapat mengakses anggota pribadi yang ada") 38 | return self._data.get(name, None) 39 | 40 | def __setattr__(self, name, value): 41 | if name.startswith("_"): 42 | self.__dict__[name] = value 43 | else: 44 | self._data[name] = value 45 | if self._autosave: 46 | self._save() 47 | 48 | def _save(self): 49 | if not self._root.is_dir(): 50 | self._root(parents=True, exist_ok=True) 51 | with open(self._root / FILE_NAME, "w") as file_pointer: 52 | json.dump(self._data, file_pointer) 53 | -------------------------------------------------------------------------------- /geezproject/utils/chrome.py: -------------------------------------------------------------------------------- 1 | # Copyright (C) 2020 Adek Maulana 2 | # 3 | # SPDX-License-Identifier: GPL-3.0-or-later 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU General Public License as published by 6 | # the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU General Public License 15 | # along with this program. If not, see . 16 | 17 | 18 | import os 19 | 20 | from selenium import webdriver 21 | from selenium.webdriver.chrome.options import Options 22 | 23 | from geezproject import CHROME_DRIVER, GOOGLE_CHROME_BIN, TEMP_DOWNLOAD_DIRECTORY 24 | 25 | 26 | async def chrome(chrome_options=None): 27 | if chrome_options is None: 28 | chrome_options = await options() 29 | if not os.path.isdir(TEMP_DOWNLOAD_DIRECTORY): 30 | os.mkdir(TEMP_DOWNLOAD_DIRECTORY) 31 | prefs = {"download.default_directory": TEMP_DOWNLOAD_DIRECTORY} 32 | chrome_options.add_experimental_option("prefs", prefs) 33 | return webdriver.Chrome(executable_path=CHROME_DRIVER, options=chrome_options) 34 | 35 | 36 | async def options(): 37 | chrome_options = Options() 38 | chrome_options.binary_location = GOOGLE_CHROME_BIN 39 | chrome_options.add_argument("--headless") 40 | chrome_options.add_argument("--window-size=1920x1080") 41 | chrome_options.add_argument("--disable-dev-shm-usage") 42 | chrome_options.add_argument("--no-sandbox") 43 | chrome_options.add_argument("--disable-gpu") 44 | return chrome_options 45 | -------------------------------------------------------------------------------- /geezproject/modules/bitly.py: -------------------------------------------------------------------------------- 1 | # Copyright (C) 2020 azrim. 2 | # All rights reserved. 3 | # 4 | # Licensed under the Raphielscape Public License, Version 1.d (the "License"); 5 | # you may not use this file except in compliance with the License. 6 | # 7 | 8 | from re import match 9 | 10 | from bitlyshortener import Shortener 11 | 12 | from geezproject import BITLY_TOKEN, BOTLOG_CHATID 13 | from geezproject.utils import geez_cmd 14 | 15 | 16 | @geez_cmd(pattern="bitly(?: |$)(.*)") 17 | async def shortener(short): 18 | """ 19 | Shorten link using bit.ly API 20 | """ 21 | if BITLY_TOKEN is not None: 22 | token = [f"{BITLY_TOKEN}"] 23 | reply = await short.get_reply_message() 24 | message = short.pattern_match.group(1) 25 | if message: 26 | pass 27 | elif reply: 28 | message = reply.text 29 | else: 30 | await short.edit("`Error! No URL given!`") 31 | return 32 | link_match = match(r"\bhttps?://.*\.\S+", message) 33 | if not link_match: 34 | await short.edit( 35 | "`Error! Please provide valid url!`\nexample: https://google.com" 36 | ) 37 | return 38 | urls = [f"{message}"] 39 | bitly = Shortener(tokens=token, max_cache_size=8192) 40 | raw_output = bitly.shorten_urls(urls) 41 | string_output = f"{raw_output}" 42 | output = string_output.replace("['", "").replace("']", "") 43 | await short.edit( 44 | f"`Your link shortened successfully!`\nHere is your link {output}" 45 | ) 46 | if BOTLOG_CHATID: 47 | await short.client.send_message( 48 | BOTLOG_CHATID, f"`#SHORTLINK \nThis Your Link!`\n {output}" 49 | ) 50 | else: 51 | await short.edit( 52 | "Set bit.ly API token first\nGet from [here](https://bitly.com/a/sign_up)" 53 | ) 54 | -------------------------------------------------------------------------------- /geezproject/modules/sql_helper/notes_sql.py: -------------------------------------------------------------------------------- 1 | try: 2 | from geezproject.modules.sql_helper import BASE, SESSION 3 | except ImportError: 4 | raise AttributeError 5 | from sqlalchemy import Column, Numeric, String, UnicodeText 6 | 7 | 8 | class Notes(BASE): 9 | __tablename__ = "notes" 10 | chat_id = Column(String(14), primary_key=True) 11 | keyword = Column(UnicodeText, primary_key=True, nullable=False) 12 | reply = Column(UnicodeText) 13 | f_mesg_id = Column(Numeric) 14 | 15 | def __init__(self, chat_id, keyword, reply, f_mesg_id): 16 | self.chat_id = str(chat_id) 17 | self.keyword = keyword 18 | self.reply = reply 19 | self.f_mesg_id = f_mesg_id 20 | 21 | 22 | Notes.__table__.create(checkfirst=True) 23 | 24 | 25 | def get_note(chat_id, keyword): 26 | try: 27 | return SESSION.query(Notes).get((str(chat_id), keyword)) 28 | finally: 29 | SESSION.close() 30 | 31 | 32 | def get_notes(chat_id): 33 | try: 34 | return SESSION.query(Notes).filter(Notes.chat_id == str(chat_id)).all() 35 | finally: 36 | SESSION.close() 37 | 38 | 39 | def add_note(chat_id, keyword, reply, f_mesg_id): 40 | to_check = get_note(chat_id, keyword) 41 | if not to_check: 42 | adder = Notes(str(chat_id), keyword, reply, f_mesg_id) 43 | SESSION.add(adder) 44 | SESSION.commit() 45 | return True 46 | rem = SESSION.query(Notes).get((str(chat_id), keyword)) 47 | SESSION.delete(rem) 48 | SESSION.commit() 49 | adder = Notes(str(chat_id), keyword, reply, f_mesg_id) 50 | SESSION.add(adder) 51 | SESSION.commit() 52 | return False 53 | 54 | 55 | def rm_note(chat_id, keyword): 56 | to_check = get_note(chat_id, keyword) 57 | if not to_check: 58 | return False 59 | rem = SESSION.query(Notes).get((str(chat_id), keyword)) 60 | SESSION.delete(rem) 61 | SESSION.commit() 62 | return True 63 | -------------------------------------------------------------------------------- /geezproject/modules/logo.py: -------------------------------------------------------------------------------- 1 | # 🍀 © @tofik_dn 2 | # ⚠️ Do not remove credits 3 | import asyncio 4 | 5 | from telethon.errors.rpcerrorlist import YouBlockedUserError 6 | from telethon.tl.functions.contacts import UnblockRequest 7 | 8 | from geezproject import CMD_HANDLER as cmd 9 | from geezproject import CMD_HELP, owner 10 | from geezproject.utils import edit_delete, edit_or_reply, geez_cmd 11 | 12 | 13 | @geez_cmd(pattern=r"logo(?: |$)(.*)") 14 | async def _(event): 15 | if event.fwd_from: 16 | return 17 | aing = await event.client.get_me() 18 | text = event.pattern_match.group(1) 19 | if not text: 20 | await edit_delete(event, "**Silahkan Masukan Text Untuk Logo**") 21 | else: 22 | await edit_or_reply(event, "`Processing...`") 23 | chat = "@tdtapibot" 24 | async with event.client.conversation(chat) as conv: 25 | try: 26 | msg = await conv.send_message(f"/logo {text}") 27 | response = await conv.get_response() 28 | logo = await conv.get_response() 29 | await event.client.send_read_acknowledge(conv.chat_id) 30 | except YouBlockedUserError: 31 | await event.client(UnblockRequest(chat)) 32 | msg = await conv.send_message(f"/logo {text}") 33 | response = await conv.get_response() 34 | logo = await conv.get_response() 35 | await event.client.send_read_acknowledge(conv.chat_id) 36 | await asyncio.sleep(0.5) 37 | await event.client.send_file( 38 | event.chat_id, 39 | logo, 40 | caption=f"Logo by [{owner}](tg://user?id={aing.id})", 41 | ) 42 | await event.client.delete_messages(conv.chat_id, [msg.id, response.id, logo.id]) 43 | await event.delete() 44 | 45 | 46 | CMD_HELP.update( 47 | { 48 | "logo": f"**Plugin : **`logo`\ 49 | \n\n 𝘾𝙤𝙢𝙢𝙖𝙣𝙙 :** `{cmd}logo` \ 50 | \n ❍▸ : **Membuat logo dari Teks yang diberikan\ 51 | " 52 | } 53 | ) 54 | -------------------------------------------------------------------------------- /geezproject/modules/sql_helper/bot_starters.py: -------------------------------------------------------------------------------- 1 | from sqlalchemy import Column, String, UnicodeText 2 | 3 | from geezproject.modules.sql_helper import BASE, SESSION 4 | 5 | 6 | class Bot_Starters(BASE): 7 | __tablename__ = "bot_starters" 8 | user_id = Column(String(14), primary_key=True) 9 | first_name = Column(UnicodeText) 10 | date = Column(UnicodeText) 11 | username = Column(UnicodeText) 12 | 13 | def __init__(self, user_id, first_name, date, username): 14 | self.user_id = str(user_id) 15 | self.first_name = first_name 16 | self.date = date 17 | self.username = username 18 | 19 | 20 | Bot_Starters.__table__.create(checkfirst=True) 21 | 22 | 23 | def add_starter_to_db( 24 | user_id, 25 | first_name, 26 | date, 27 | username, 28 | ): 29 | to_check = get_starter_details(user_id) 30 | if not to_check: 31 | user = Bot_Starters(str(user_id), first_name, date, username) 32 | SESSION.add(user) 33 | SESSION.commit() 34 | return True 35 | rem = SESSION.query(Bot_Starters).get(str(user_id)) 36 | SESSION.delete(rem) 37 | SESSION.commit() 38 | user = Bot_Starters(str(user_id), first_name, date, username) 39 | SESSION.add(user) 40 | SESSION.commit() 41 | return True 42 | 43 | 44 | def del_starter_from_db(user_id): 45 | to_check = get_starter_details(user_id) 46 | if not to_check: 47 | return False 48 | rem = SESSION.query(Bot_Starters).get(str(user_id)) 49 | SESSION.delete(rem) 50 | SESSION.commit() 51 | return True 52 | 53 | 54 | def get_starter_details(user_id): 55 | try: 56 | _result = SESSION.query(Bot_Starters).get(str(user_id)) 57 | if _result: 58 | return _result 59 | return None 60 | finally: 61 | SESSION.close() 62 | 63 | 64 | def get_all_starters(): 65 | try: 66 | return SESSION.query(Bot_Starters).all() 67 | except BaseException: 68 | return None 69 | finally: 70 | SESSION.close() 71 | -------------------------------------------------------------------------------- /geezproject/__main__.py: -------------------------------------------------------------------------------- 1 | """ geezproject start point """ 2 | 3 | 4 | import sys 5 | import requests 6 | from importlib import import_module 7 | 8 | from pytgcalls import idle 9 | 10 | from geezproject import BOT_TOKEN, BOT_VER, blacklistgeez 11 | from geezproject import DEVS, LOGS, LOOP, bot, BOTLOG_CHATID, call_py 12 | from geezproject.clients import geez_userbot_on, multigeez 13 | from geezproject.modules import ALL_MODULES 14 | from geezproject.utils import autobot, autocreategroup 15 | 16 | try: 17 | client = multigeez() 18 | total = 5 - client 19 | bot.start() 20 | call_py.start() 21 | user = bot.get_me() 22 | blacklistgeez = requests.get( 23 | "https://raw.githubusercontent.com/vckyou/Reforestation/master/blacklistgeez.json" 24 | ).json() 25 | if user.id in blacklistgeez: 26 | LOGS.warning( 27 | "NAMPAKNYA geezproject TIDAK DAPAT BEKERJA, MUNGKIN ANDA TELAH DI BLACKLIST OLEH PEMILIK geezproject.\nCredits: @VckyouuBitch" ) 28 | sys.exit(1) 29 | if 874946835 not in DEVS: 30 | LOGS.warning( 31 | f"EOL\nGeezProjects v{BOT_VER}, Copyright © 2021-2022 VICKY " 32 | ) 33 | sys.exit(1) 34 | except Exception as e: 35 | LOGS.info(str(e), exc_info=True) 36 | sys.exit(1) 37 | 38 | for module_name in ALL_MODULES: 39 | imported_module = import_module("geezproject.modules." + module_name) 40 | 41 | LOGS.info(f"Total Clients = {total} User") 42 | LOGS.info(f"Jika {user.first_name} Membutuhkan Bantuan, Silahkan Tanyakan di Grup https://t.me/GeezRam") 43 | LOGS.info(f"💢 Geez - Projects Berhasil Diaktfikan 💢") 44 | 45 | 46 | LOOP.run_until_complete(geez_userbot_on()) 47 | if not BOTLOG_CHATID: 48 | LOOP.run_until_complete(autocreategroup()) 49 | if not BOT_TOKEN: 50 | LOOP.run_until_complete(autobot()) 51 | idle() 52 | if len(sys.argv) not in (1, 3, 4): 53 | bot.disconnect() 54 | else: 55 | try: 56 | bot.run_until_disconnected() 57 | except ConnectionError: 58 | pass 59 | -------------------------------------------------------------------------------- /geezproject/modules/figlet.py: -------------------------------------------------------------------------------- 1 | # Copyright (C) 2019 The Raphielscape Company LLC. 2 | # 3 | # Licensed under the Raphielscape Public License, Version 1.d (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # 6 | # recode by @vckyaz 7 | # FROM GeezProjects 8 | # 9 | # Support @GeezSupport & @GeezProjects 10 | 11 | import pyfiglet 12 | 13 | from geezproject import CMD_HANDLER as cmd 14 | from geezproject import CMD_HELP, bot 15 | from geezproject.events import geez_cmd 16 | from geezproject.utils import deEmojify 17 | 18 | 19 | @bot.on(geez_cmd(outgoing=True, pattern=r"figlet (\w+) (.+)")) 20 | async def figlet(event): 21 | if event.fwd_from: 22 | return 23 | style_list = { 24 | "slant": "slant", 25 | "3d": "3-d", 26 | "5line": "5lineoblique", 27 | "alpha": "alphabet", 28 | "banner": "banner3-D", 29 | "doh": "doh", 30 | "iso": "isometric1", 31 | "letter": "letters", 32 | "allig": "alligator", 33 | "dotm": "dotmatrix", 34 | "bubble": "bubble", 35 | "bulb": "bulbhead", 36 | "digi": "digital", 37 | } 38 | style = event.pattern_match.group(1) 39 | text = event.pattern_match.group(2) 40 | try: 41 | font = style_list[style] 42 | except KeyError: 43 | return await event.edit( 44 | "**Style yang dipilih tidak valid, ketik** `.help figlet` **bila butuh bantuan**" 45 | ) 46 | result = pyfiglet.figlet_format(deEmojify(text), font=font) 47 | await event.respond(f"‌‌‎`{result}`") 48 | await event.delete() 49 | 50 | 51 | CMD_HELP.update( 52 | { 53 | "figlet": f"**Plugin : **`figlet`\ 54 | \n\n 𝘾𝙤𝙢𝙢𝙖𝙣𝙙 :** `{cmd}figlet`