mirror of
https://github.com/yasirarism/MissKatyPyro.git
synced 2025-12-29 09:44:50 +00:00
Rest Commit AUgs 2023
This commit is contained in:
commit
e960a69126
204 changed files with 21042 additions and 0 deletions
13
.deepsource.toml
Normal file
13
.deepsource.toml
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
version = 1
|
||||||
|
|
||||||
|
[[analyzers]]
|
||||||
|
name = "python"
|
||||||
|
|
||||||
|
[analyzers.meta]
|
||||||
|
runtime_version = "3.x.x"
|
||||||
|
|
||||||
|
[[transformers]]
|
||||||
|
name = "isort"
|
||||||
|
|
||||||
|
[[transformers]]
|
||||||
|
name = "black"
|
||||||
4
.github/FUNDING.yml
vendored
Normal file
4
.github/FUNDING.yml
vendored
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
# These are supported funding model platforms
|
||||||
|
|
||||||
|
github: [yasirarism] # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
|
||||||
|
other: ['https://yasirpedia.eu.org/images/my-qris.jpg', 'https://paypal.me/yasirarism'] # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
|
||||||
36
.github/workflows/h3r0ku.yml
vendored
Normal file
36
.github/workflows/h3r0ku.yml
vendored
Normal file
|
|
@ -0,0 +1,36 @@
|
||||||
|
name: H3r0ku Deployer
|
||||||
|
|
||||||
|
on: workflow_dispatch
|
||||||
|
|
||||||
|
env:
|
||||||
|
IMAGE_NAME: h3r0ku
|
||||||
|
HEROKU_API_KEY: ${{ secrets.HEROKU_API_KEY }}
|
||||||
|
HEROKU_APP: ${{ secrets.HEROKU_APP }}
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build_and_push:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Build the image
|
||||||
|
run: docker build . --file Dockerfile --tag "${IMAGE_NAME}"
|
||||||
|
|
||||||
|
- name: Login into Heroku Container registry
|
||||||
|
run: heroku container:login
|
||||||
|
|
||||||
|
- name: Push the image to Heroku
|
||||||
|
run: heroku container:push "${IMAGE_NAME}" -a "${HEROKU_APP}"
|
||||||
|
|
||||||
|
- name: Release image to Heroku
|
||||||
|
run: heroku container:release "${IMAGE_NAME}" -a "${HEROKU_APP}"
|
||||||
|
|
||||||
|
- name: Check ENV
|
||||||
|
run: |
|
||||||
|
API_KEY="$(heroku config:get HEROKU_API_KEY -a ${HEROKU_APP})"
|
||||||
|
APP_NAME="$(heroku config:get HEROKU_APP -a ${HEROKU_APP})"
|
||||||
|
if [[ -z "${API_KEY}" && -z "${APP_NAME}" ]]; then
|
||||||
|
heroku config:set HEROKU_API_KEY="${HEROKU_API_KEY}" \
|
||||||
|
HEROKU_APP="${HEROKU_APP}"
|
||||||
|
fi
|
||||||
26
.github/workflows/notify.yml
vendored
Normal file
26
.github/workflows/notify.yml
vendored
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
name: Notify on Telegram
|
||||||
|
|
||||||
|
on:
|
||||||
|
fork:
|
||||||
|
push:
|
||||||
|
release:
|
||||||
|
issue_comment:
|
||||||
|
types: created
|
||||||
|
watch:
|
||||||
|
types: started
|
||||||
|
pull_request_review_comment:
|
||||||
|
types: created
|
||||||
|
pull_request:
|
||||||
|
types: [opened, closed, reopened]
|
||||||
|
issues:
|
||||||
|
types: [opened, pinned, closed, reopened]
|
||||||
|
jobs:
|
||||||
|
notify:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- name: Notify the commit on Telegram.
|
||||||
|
uses: EverythingSuckz/github-telegram-notify@main
|
||||||
|
with:
|
||||||
|
bot_token: '${{ secrets.BOT_TOKEN }}'
|
||||||
|
chat_id: '${{ secrets.CHAT_ID }}'
|
||||||
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
.vscode
|
||||||
|
__pycache__
|
||||||
19
Dockerfile
Normal file
19
Dockerfile
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
# * @author Yasir Aris M <yasiramunandar@gmail.com>
|
||||||
|
# * @date 2022-12-01 09:12:27
|
||||||
|
# * @projectName MissKatyPyro
|
||||||
|
# * Copyright ©YasirPedia All rights reserved
|
||||||
|
|
||||||
|
# Base Docker Using Debian 12 (Bookworm), Python 3.11.4 and Built In Pip
|
||||||
|
## With Built in Pip Package
|
||||||
|
FROM yasirarism/misskaty-docker:latest
|
||||||
|
## Without Built in Pip Package
|
||||||
|
# FROM yasirarism/misskaty-docker:free
|
||||||
|
|
||||||
|
# Set Hostname
|
||||||
|
ENV HOSTNAME yasir-server
|
||||||
|
# Copy Files
|
||||||
|
COPY . .
|
||||||
|
# Instal pip package
|
||||||
|
# RUN pip3 install --no-cache-dir -r requirements.txt
|
||||||
|
# Set CMD Bot
|
||||||
|
CMD ["bash", "start.sh"]
|
||||||
339
LICENSE
Normal file
339
LICENSE
Normal file
|
|
@ -0,0 +1,339 @@
|
||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
Version 2, June 1991
|
||||||
|
|
||||||
|
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
||||||
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
Preamble
|
||||||
|
|
||||||
|
The licenses for most software are designed to take away your
|
||||||
|
freedom to share and change it. By contrast, the GNU General Public
|
||||||
|
License is intended to guarantee your freedom to share and change free
|
||||||
|
software--to make sure the software is free for all its users. This
|
||||||
|
General Public License applies to most of the Free Software
|
||||||
|
Foundation's software and to any other program whose authors commit to
|
||||||
|
using it. (Some other Free Software Foundation software is covered by
|
||||||
|
the GNU Lesser General Public License instead.) You can apply it to
|
||||||
|
your programs, too.
|
||||||
|
|
||||||
|
When we speak of free software, we are referring to freedom, not
|
||||||
|
price. Our General Public Licenses are designed to make sure that you
|
||||||
|
have the freedom to distribute copies of free software (and charge for
|
||||||
|
this service if you wish), that you receive source code or can get it
|
||||||
|
if you want it, that you can change the software or use pieces of it
|
||||||
|
in new free programs; and that you know you can do these things.
|
||||||
|
|
||||||
|
To protect your rights, we need to make restrictions that forbid
|
||||||
|
anyone to deny you these rights or to ask you to surrender the rights.
|
||||||
|
These restrictions translate to certain responsibilities for you if you
|
||||||
|
distribute copies of the software, or if you modify it.
|
||||||
|
|
||||||
|
For example, if you distribute copies of such a program, whether
|
||||||
|
gratis or for a fee, you must give the recipients all the rights that
|
||||||
|
you have. You must make sure that they, too, receive or can get the
|
||||||
|
source code. And you must show them these terms so they know their
|
||||||
|
rights.
|
||||||
|
|
||||||
|
We protect your rights with two steps: (1) copyright the software, and
|
||||||
|
(2) offer you this license which gives you legal permission to copy,
|
||||||
|
distribute and/or modify the software.
|
||||||
|
|
||||||
|
Also, for each author's protection and ours, we want to make certain
|
||||||
|
that everyone understands that there is no warranty for this free
|
||||||
|
software. If the software is modified by someone else and passed on, we
|
||||||
|
want its recipients to know that what they have is not the original, so
|
||||||
|
that any problems introduced by others will not reflect on the original
|
||||||
|
authors' reputations.
|
||||||
|
|
||||||
|
Finally, any free program is threatened constantly by software
|
||||||
|
patents. We wish to avoid the danger that redistributors of a free
|
||||||
|
program will individually obtain patent licenses, in effect making the
|
||||||
|
program proprietary. To prevent this, we have made it clear that any
|
||||||
|
patent must be licensed for everyone's free use or not licensed at all.
|
||||||
|
|
||||||
|
The precise terms and conditions for copying, distribution and
|
||||||
|
modification follow.
|
||||||
|
|
||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||||
|
|
||||||
|
0. This License applies to any program or other work which contains
|
||||||
|
a notice placed by the copyright holder saying it may be distributed
|
||||||
|
under the terms of this General Public License. The "Program", below,
|
||||||
|
refers to any such program or work, and a "work based on the Program"
|
||||||
|
means either the Program or any derivative work under copyright law:
|
||||||
|
that is to say, a work containing the Program or a portion of it,
|
||||||
|
either verbatim or with modifications and/or translated into another
|
||||||
|
language. (Hereinafter, translation is included without limitation in
|
||||||
|
the term "modification".) Each licensee is addressed as "you".
|
||||||
|
|
||||||
|
Activities other than copying, distribution and modification are not
|
||||||
|
covered by this License; they are outside its scope. The act of
|
||||||
|
running the Program is not restricted, and the output from the Program
|
||||||
|
is covered only if its contents constitute a work based on the
|
||||||
|
Program (independent of having been made by running the Program).
|
||||||
|
Whether that is true depends on what the Program does.
|
||||||
|
|
||||||
|
1. You may copy and distribute verbatim copies of the Program's
|
||||||
|
source code as you receive it, in any medium, provided that you
|
||||||
|
conspicuously and appropriately publish on each copy an appropriate
|
||||||
|
copyright notice and disclaimer of warranty; keep intact all the
|
||||||
|
notices that refer to this License and to the absence of any warranty;
|
||||||
|
and give any other recipients of the Program a copy of this License
|
||||||
|
along with the Program.
|
||||||
|
|
||||||
|
You may charge a fee for the physical act of transferring a copy, and
|
||||||
|
you may at your option offer warranty protection in exchange for a fee.
|
||||||
|
|
||||||
|
2. You may modify your copy or copies of the Program or any portion
|
||||||
|
of it, thus forming a work based on the Program, and copy and
|
||||||
|
distribute such modifications or work under the terms of Section 1
|
||||||
|
above, provided that you also meet all of these conditions:
|
||||||
|
|
||||||
|
a) You must cause the modified files to carry prominent notices
|
||||||
|
stating that you changed the files and the date of any change.
|
||||||
|
|
||||||
|
b) You must cause any work that you distribute or publish, that in
|
||||||
|
whole or in part contains or is derived from the Program or any
|
||||||
|
part thereof, to be licensed as a whole at no charge to all third
|
||||||
|
parties under the terms of this License.
|
||||||
|
|
||||||
|
c) If the modified program normally reads commands interactively
|
||||||
|
when run, you must cause it, when started running for such
|
||||||
|
interactive use in the most ordinary way, to print or display an
|
||||||
|
announcement including an appropriate copyright notice and a
|
||||||
|
notice that there is no warranty (or else, saying that you provide
|
||||||
|
a warranty) and that users may redistribute the program under
|
||||||
|
these conditions, and telling the user how to view a copy of this
|
||||||
|
License. (Exception: if the Program itself is interactive but
|
||||||
|
does not normally print such an announcement, your work based on
|
||||||
|
the Program is not required to print an announcement.)
|
||||||
|
|
||||||
|
These requirements apply to the modified work as a whole. If
|
||||||
|
identifiable sections of that work are not derived from the Program,
|
||||||
|
and can be reasonably considered independent and separate works in
|
||||||
|
themselves, then this License, and its terms, do not apply to those
|
||||||
|
sections when you distribute them as separate works. But when you
|
||||||
|
distribute the same sections as part of a whole which is a work based
|
||||||
|
on the Program, the distribution of the whole must be on the terms of
|
||||||
|
this License, whose permissions for other licensees extend to the
|
||||||
|
entire whole, and thus to each and every part regardless of who wrote it.
|
||||||
|
|
||||||
|
Thus, it is not the intent of this section to claim rights or contest
|
||||||
|
your rights to work written entirely by you; rather, the intent is to
|
||||||
|
exercise the right to control the distribution of derivative or
|
||||||
|
collective works based on the Program.
|
||||||
|
|
||||||
|
In addition, mere aggregation of another work not based on the Program
|
||||||
|
with the Program (or with a work based on the Program) on a volume of
|
||||||
|
a storage or distribution medium does not bring the other work under
|
||||||
|
the scope of this License.
|
||||||
|
|
||||||
|
3. You may copy and distribute the Program (or a work based on it,
|
||||||
|
under Section 2) in object code or executable form under the terms of
|
||||||
|
Sections 1 and 2 above provided that you also do one of the following:
|
||||||
|
|
||||||
|
a) Accompany it with the complete corresponding machine-readable
|
||||||
|
source code, which must be distributed under the terms of Sections
|
||||||
|
1 and 2 above on a medium customarily used for software interchange; or,
|
||||||
|
|
||||||
|
b) Accompany it with a written offer, valid for at least three
|
||||||
|
years, to give any third party, for a charge no more than your
|
||||||
|
cost of physically performing source distribution, a complete
|
||||||
|
machine-readable copy of the corresponding source code, to be
|
||||||
|
distributed under the terms of Sections 1 and 2 above on a medium
|
||||||
|
customarily used for software interchange; or,
|
||||||
|
|
||||||
|
c) Accompany it with the information you received as to the offer
|
||||||
|
to distribute corresponding source code. (This alternative is
|
||||||
|
allowed only for noncommercial distribution and only if you
|
||||||
|
received the program in object code or executable form with such
|
||||||
|
an offer, in accord with Subsection b above.)
|
||||||
|
|
||||||
|
The source code for a work means the preferred form of the work for
|
||||||
|
making modifications to it. For an executable work, complete source
|
||||||
|
code means all the source code for all modules it contains, plus any
|
||||||
|
associated interface definition files, plus the scripts used to
|
||||||
|
control compilation and installation of the executable. However, as a
|
||||||
|
special exception, the source code distributed need not include
|
||||||
|
anything that is normally distributed (in either source or binary
|
||||||
|
form) with the major components (compiler, kernel, and so on) of the
|
||||||
|
operating system on which the executable runs, unless that component
|
||||||
|
itself accompanies the executable.
|
||||||
|
|
||||||
|
If distribution of executable or object code is made by offering
|
||||||
|
access to copy from a designated place, then offering equivalent
|
||||||
|
access to copy the source code from the same place counts as
|
||||||
|
distribution of the source code, even though third parties are not
|
||||||
|
compelled to copy the source along with the object code.
|
||||||
|
|
||||||
|
4. You may not copy, modify, sublicense, or distribute the Program
|
||||||
|
except as expressly provided under this License. Any attempt
|
||||||
|
otherwise to copy, modify, sublicense or distribute the Program is
|
||||||
|
void, and will automatically terminate your rights under this License.
|
||||||
|
However, parties who have received copies, or rights, from you under
|
||||||
|
this License will not have their licenses terminated so long as such
|
||||||
|
parties remain in full compliance.
|
||||||
|
|
||||||
|
5. You are not required to accept this License, since you have not
|
||||||
|
signed it. However, nothing else grants you permission to modify or
|
||||||
|
distribute the Program or its derivative works. These actions are
|
||||||
|
prohibited by law if you do not accept this License. Therefore, by
|
||||||
|
modifying or distributing the Program (or any work based on the
|
||||||
|
Program), you indicate your acceptance of this License to do so, and
|
||||||
|
all its terms and conditions for copying, distributing or modifying
|
||||||
|
the Program or works based on it.
|
||||||
|
|
||||||
|
6. Each time you redistribute the Program (or any work based on the
|
||||||
|
Program), the recipient automatically receives a license from the
|
||||||
|
original licensor to copy, distribute or modify the Program subject to
|
||||||
|
these terms and conditions. You may not impose any further
|
||||||
|
restrictions on the recipients' exercise of the rights granted herein.
|
||||||
|
You are not responsible for enforcing compliance by third parties to
|
||||||
|
this License.
|
||||||
|
|
||||||
|
7. If, as a consequence of a court judgment or allegation of patent
|
||||||
|
infringement or for any other reason (not limited to patent issues),
|
||||||
|
conditions are imposed on you (whether by court order, agreement or
|
||||||
|
otherwise) that contradict the conditions of this License, they do not
|
||||||
|
excuse you from the conditions of this License. If you cannot
|
||||||
|
distribute so as to satisfy simultaneously your obligations under this
|
||||||
|
License and any other pertinent obligations, then as a consequence you
|
||||||
|
may not distribute the Program at all. For example, if a patent
|
||||||
|
license would not permit royalty-free redistribution of the Program by
|
||||||
|
all those who receive copies directly or indirectly through you, then
|
||||||
|
the only way you could satisfy both it and this License would be to
|
||||||
|
refrain entirely from distribution of the Program.
|
||||||
|
|
||||||
|
If any portion of this section is held invalid or unenforceable under
|
||||||
|
any particular circumstance, the balance of the section is intended to
|
||||||
|
apply and the section as a whole is intended to apply in other
|
||||||
|
circumstances.
|
||||||
|
|
||||||
|
It is not the purpose of this section to induce you to infringe any
|
||||||
|
patents or other property right claims or to contest validity of any
|
||||||
|
such claims; this section has the sole purpose of protecting the
|
||||||
|
integrity of the free software distribution system, which is
|
||||||
|
implemented by public license practices. Many people have made
|
||||||
|
generous contributions to the wide range of software distributed
|
||||||
|
through that system in reliance on consistent application of that
|
||||||
|
system; it is up to the author/donor to decide if he or she is willing
|
||||||
|
to distribute software through any other system and a licensee cannot
|
||||||
|
impose that choice.
|
||||||
|
|
||||||
|
This section is intended to make thoroughly clear what is believed to
|
||||||
|
be a consequence of the rest of this License.
|
||||||
|
|
||||||
|
8. If the distribution and/or use of the Program is restricted in
|
||||||
|
certain countries either by patents or by copyrighted interfaces, the
|
||||||
|
original copyright holder who places the Program under this License
|
||||||
|
may add an explicit geographical distribution limitation excluding
|
||||||
|
those countries, so that distribution is permitted only in or among
|
||||||
|
countries not thus excluded. In such case, this License incorporates
|
||||||
|
the limitation as if written in the body of this License.
|
||||||
|
|
||||||
|
9. The Free Software Foundation may publish revised and/or new versions
|
||||||
|
of the General Public License from time to time. Such new versions will
|
||||||
|
be similar in spirit to the present version, but may differ in detail to
|
||||||
|
address new problems or concerns.
|
||||||
|
|
||||||
|
Each version is given a distinguishing version number. If the Program
|
||||||
|
specifies a version number of this License which applies to it and "any
|
||||||
|
later version", you have the option of following the terms and conditions
|
||||||
|
either of that version or of any later version published by the Free
|
||||||
|
Software Foundation. If the Program does not specify a version number of
|
||||||
|
this License, you may choose any version ever published by the Free Software
|
||||||
|
Foundation.
|
||||||
|
|
||||||
|
10. If you wish to incorporate parts of the Program into other free
|
||||||
|
programs whose distribution conditions are different, write to the author
|
||||||
|
to ask for permission. For software which is copyrighted by the Free
|
||||||
|
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||||
|
make exceptions for this. Our decision will be guided by the two goals
|
||||||
|
of preserving the free status of all derivatives of our free software and
|
||||||
|
of promoting the sharing and reuse of software generally.
|
||||||
|
|
||||||
|
NO WARRANTY
|
||||||
|
|
||||||
|
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||||
|
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||||
|
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||||
|
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||||
|
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||||
|
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||||
|
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||||
|
REPAIR OR CORRECTION.
|
||||||
|
|
||||||
|
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||||
|
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||||
|
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||||
|
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||||
|
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||||
|
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||||
|
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||||
|
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGES.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
How to Apply These Terms to Your New Programs
|
||||||
|
|
||||||
|
If you develop a new program, and you want it to be of the greatest
|
||||||
|
possible use to the public, the best way to achieve this is to make it
|
||||||
|
free software which everyone can redistribute and change under these terms.
|
||||||
|
|
||||||
|
To do so, attach the following notices to the program. It is safest
|
||||||
|
to attach them to the start of each source file to most effectively
|
||||||
|
convey the exclusion of warranty; and each file should have at least
|
||||||
|
the "copyright" line and a pointer to where the full notice is found.
|
||||||
|
|
||||||
|
<one line to give the program's name and a brief idea of what it does.>
|
||||||
|
Copyright (C) <year> <name of author>
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License along
|
||||||
|
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
|
||||||
|
Also add information on how to contact you by electronic and paper mail.
|
||||||
|
|
||||||
|
If the program is interactive, make it output a short notice like this
|
||||||
|
when it starts in an interactive mode:
|
||||||
|
|
||||||
|
Gnomovision version 69, Copyright (C) year name of author
|
||||||
|
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||||
|
This is free software, and you are welcome to redistribute it
|
||||||
|
under certain conditions; type `show c' for details.
|
||||||
|
|
||||||
|
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||||
|
parts of the General Public License. Of course, the commands you use may
|
||||||
|
be called something other than `show w' and `show c'; they could even be
|
||||||
|
mouse-clicks or menu items--whatever suits your program.
|
||||||
|
|
||||||
|
You should also get your employer (if you work as a programmer) or your
|
||||||
|
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||||
|
necessary. Here is a sample; alter the names:
|
||||||
|
|
||||||
|
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||||
|
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||||
|
|
||||||
|
<signature of Ty Coon>, 1 April 1989
|
||||||
|
Ty Coon, President of Vice
|
||||||
|
|
||||||
|
This General Public License does not permit incorporating your program into
|
||||||
|
proprietary programs. If your program is a subroutine library, you may
|
||||||
|
consider it more useful to permit linking proprietary applications with the
|
||||||
|
library. If this is what you want to do, use the GNU Lesser General
|
||||||
|
Public License instead of this License.
|
||||||
194
README.id.md
Normal file
194
README.id.md
Normal file
|
|
@ -0,0 +1,194 @@
|
||||||
|
# MissKatyPyro
|
||||||
|
|
||||||
|
<!--Badges-->
|
||||||
|
![MIT License][license-shield] ![Repository Size][repository-size-shield] ![Issue Closed][issue-closed-shield]
|
||||||
|
|
||||||
|
<!--Project Title Image-->
|
||||||
|
<p align="center">
|
||||||
|
<img src="https://repository-images.githubusercontent.com/433350689/26cb713b-43c3-4dec-94cb-6c80599547e8" width="200" height="200"/>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<!--Project Buttons-->
|
||||||
|
[![Readme in Indonesian][readme-ko-shield]][readme-ko-url] [![View Demo][view-demo-shield]][view-demo-url] [![Report bug][report-bug-shield]][report-bug-url] [![Request feature][request-feature-shield]][request-feature-url]
|
||||||
|
|
||||||
|
<!--Table of Contents-->
|
||||||
|
# Table of Contents
|
||||||
|
- [[1] About MissKaty](#1-about-misskaty)
|
||||||
|
- [[2] Framework Tools And Server That Used To Build This Bot](#2-framework-tools-and-server-that-used-to-build-this-bot)
|
||||||
|
- [[3] Donation](#3-donation)
|
||||||
|
- [[4] Notes](#4-notes)
|
||||||
|
- [[5] Features](#5-features)
|
||||||
|
- [[6] Variables](#6-variables)
|
||||||
|
- [[7] Deploying Tutorial](#7-deploy-recommended-using-dockerdocker-compose)
|
||||||
|
- [Build And Run Using Legacy Method](#build-and-run-using-legacy-method)
|
||||||
|
- [Build And Run Using Docker](#build-and-run-using-docker)
|
||||||
|
- [Build And Run The Docker Image Using docker-compose](#build-and-run-the-docker-image-using-docker-compose)
|
||||||
|
- [[8] Credits](#8-thanks-to)
|
||||||
|
- [[9] Disclaimer](#8-disclaimer)
|
||||||
|
|
||||||
|
# [1] About MissKaty
|
||||||
|
*MissKaty* adalah Bot Telegram yang dibuat menggunakan Python dan library Pyrogram. Banyak fitur yang berguna untuk kita gunakan. Saya berharap suatu saat jika project ini dihentikan, ada yang melanjutkan atau mengembangkannya lagi. Saya memberi nama MissKaty karena saya suka kucing, hewan lucu yang suka bermain dan bersahabat dengan manusia.
|
||||||
|
|
||||||
|
## [2] Framework Tools And Server That Used To Build This Bot
|
||||||
|
🌱 PyroFork v2.x.x (Fork Pyrogram dengan Dukungan Topik dan Beberapa Patch)<br>
|
||||||
|
🌱 Dukungan Python 3.11<br>
|
||||||
|
🌱 MongoDB sebagai Database<br>
|
||||||
|
🌱 PyKeyboard for Building Pagination<br>
|
||||||
|
🌱 VS Code<br>
|
||||||
|
🌱 VPS/Server With Docker Support (Recommended)<br>
|
||||||
|
|
||||||
|
## [3] Donation
|
||||||
|
*Khusus Indonesia Saja:*<br>
|
||||||
|
🌱 [QRIS][qris-url]<br>
|
||||||
|
|
||||||
|
*Untuk Semua Negara:*<br>
|
||||||
|
🌱 [Paypal][paypal-url]<br>
|
||||||
|
|
||||||
|
## [4] Notes
|
||||||
|
Jika Anda ingin membantu saya memperbaiki beberapa kesalahan di bot saya, Anda dapat membuat PR ke repo ini. Saya sangat senang jika Anda dapat membantu saya. Anda juga dapat memberikan dukungan kepada saya untuk membeli server.
|
||||||
|
|
||||||
|
## [5] Features
|
||||||
|
|
||||||
|
| FEATURE MY BOT |🌱|
|
||||||
|
| ------------- | ------------- |
|
||||||
|
| Basic Admin Feature |✔️|
|
||||||
|
| AFK Feature |✔️|
|
||||||
|
| Downloader FB, TikTok and YT-DLP Support |✔️|
|
||||||
|
| MultiLanguage Support (Still Beta) |⚠️|
|
||||||
|
| NightMode |✔️|
|
||||||
|
| ChatBot based on OpenAI |✔️|
|
||||||
|
| MissKaty Mata |✔️|
|
||||||
|
| Inline Search |✔️|
|
||||||
|
| Sticker Tools |✔️|
|
||||||
|
| PasteBin Tools |✔️|
|
||||||
|
| WebScraper (Pahe, MelongMovie, LK21, Terbit21, Kusonime, etc) |✔️|
|
||||||
|
| IMDB Search With Multi Language Per User |✔️|
|
||||||
|
| GenSS From Media and MediaInfo Generator |✔️|
|
||||||
|
| And Many More.. |✔️|
|
||||||
|
|
||||||
|
## [6] Variables
|
||||||
|
|
||||||
|
### Variabel yang Diperlukan
|
||||||
|
* `BOT_TOKEN`: Buat bot menggunakan [@BotFather](https://t.me/BotFather), dan dapatkan token Telegram API.
|
||||||
|
* `API_ID`: Dapatkan value ini dari [telegram.org](https://my.telegram.org/apps)
|
||||||
|
* `API_HASH`: Dapatkan value ini dari [telegram.org](https://my.telegram.org/apps)
|
||||||
|
* `DATABASE_URI`: [mongoDB](https://www.mongodb.com) URI. Dapatkan value ini dari [mongoDB](https://www.mongodb.com). Untuk bantuan lebih lanjut, tonton [video] ini(https://youtu.be/1G1XwEOnxxo)
|
||||||
|
* `LOG_CHANNEL` : Channel untuk mencatat aktivitas bot. Pastikan bot adalah admin di channel.
|
||||||
|
|
||||||
|
### Variabel Opsional
|
||||||
|
* `USER_SESSION` : String session untuk Userbot.
|
||||||
|
* `DATABASE_NAME`: Nama database di MongoDB
|
||||||
|
* `COMMAND_HANDLER`: Daftar perintah handler bot dipisahkan dengan spasi. Contoh: `. !` > jadi bot akan merespon dengan `.cmd` atau `!cmd`
|
||||||
|
* `SUDO`: User ID yang memiliki akses ke bot, dipisahkan dengan spasi
|
||||||
|
* `OPENAI_API`: Dapatkan dari Web OpenAI
|
||||||
|
* `CURRENCY_API`: Dapatkan API Key di https://app.exchangerate-api.com/sign-up
|
||||||
|
|
||||||
|
## [7] Tutorial Deploy (Recommended using Docker/Docker Compose)
|
||||||
|
|
||||||
|
#### Bangun Dan Jalankan Menggunakan Metode Lama
|
||||||
|
- Pastikan versi python minimum adalah 3.8 untuk mencegah beberapa error. Periksa dengan perintah ini:
|
||||||
|
```
|
||||||
|
python3 --version
|
||||||
|
```
|
||||||
|
- Instal semua dependensi yang membutuhkan bot untuk dijalankan. *(memerlukan akses root, Anda dapat melewati ini jika server Anda tidak memiliki akses root tetapi beberapa plugin tidak berfungsi)*
|
||||||
|
```
|
||||||
|
apt update -y & apt install libjpeg-dev zlib1g-dev libwebp-dev python3-pip python3-lxml git wget curl lokal ffmpeg tzdata neofetch mediainfo speedtest-cli -y
|
||||||
|
```
|
||||||
|
- Instal requirements.txt, jika menggunakan python 3.11, Anda harus menggunakan opsi venv saat menginstal.<br/>
|
||||||
|
*Python < 3.10*
|
||||||
|
```
|
||||||
|
pip3 install -r requirements.txt
|
||||||
|
```
|
||||||
|
*Python 3.11*
|
||||||
|
```
|
||||||
|
Install venv dari terminal server kamu
|
||||||
|
pip3 install -r requirements.txt
|
||||||
|
```
|
||||||
|
- Atur config environment saat menjalankan bot dan jangan lupa isi semua value yang wajib di isi.
|
||||||
|
- Jalankan Bot
|
||||||
|
```
|
||||||
|
bash start.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Build And Run Using Docker
|
||||||
|
|
||||||
|
- Mulai daemon Docker (Lewati jika sudah berjalan):
|
||||||
|
```
|
||||||
|
sudo dockerd
|
||||||
|
```
|
||||||
|
- Build Docker image:
|
||||||
|
```
|
||||||
|
sudo docker build . -t misskaty
|
||||||
|
```
|
||||||
|
- Jalankan Docker image:
|
||||||
|
```
|
||||||
|
sudo docker run misskaty
|
||||||
|
```
|
||||||
|
- Untuk Menghentikan image:
|
||||||
|
```
|
||||||
|
sudo docker ps
|
||||||
|
sudo docker stop <pid>
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Build And Run The Docker Image Using docker-compose
|
||||||
|
|
||||||
|
- Install docker-compose
|
||||||
|
```
|
||||||
|
sudo apt install docker-compose
|
||||||
|
```
|
||||||
|
- Build and run Docker image or to view current running image:
|
||||||
|
```
|
||||||
|
sudo docker-compose up
|
||||||
|
```
|
||||||
|
- After editing files with nano for example (nano start.sh):
|
||||||
|
```
|
||||||
|
sudo docker-compose up --build
|
||||||
|
```
|
||||||
|
- To stop the running image:
|
||||||
|
```
|
||||||
|
sudo docker ps
|
||||||
|
```
|
||||||
|
```
|
||||||
|
sudo docker-compose stop <pid>
|
||||||
|
```
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
|
||||||
|
## [8] Thanks to
|
||||||
|
- Terima kasih Kepada Allah Swt.
|
||||||
|
- Terima kasih Kepada Dan [Pyrogram Library](https://github.com/pyrogram/pyrogram).
|
||||||
|
- Terima kasih Kepada [The Hamker Cat](https://github.com/TheHamkerCat) Untuk Kode WilliamButcher.
|
||||||
|
- Terima kasih Kepada [Team Yukki](https://github.com/TeamYukki) Untuk Kode AFK Bot.
|
||||||
|
- Terima kasih Kepada [Wrench](https://github.com/EverythingSuckz) Untuk Beberapa Kode.
|
||||||
|
- Terima kasih Kepada [AmanoTeam](https://github.com/AmanoTeam) Untuk Template MultiBahasa.
|
||||||
|
- Dan Semua Orang Yang Membantuku Dalam Hidupku...
|
||||||
|
Jika kode Anda digunakan dalam repo ini dan ingin memberikan kredit, silakan buka masalah..
|
||||||
|
|
||||||
|
## [9] Disclaimer
|
||||||
|
[](https://www.gnu.org/licenses/agpl-3.0.en.html#header)
|
||||||
|
Dilisensikan di bawah [GNU AGPL 2.0.](https://github.com/yasirarism/MissKatyPyro/blob/master/LICENSE)
|
||||||
|
PERINGATAN: Menjual Kode Kepada Orang Lain Demi Uang *Dilarang Keras*. Tuhan selalu melihatmu dimanapun kamu berada.
|
||||||
|
|
||||||
|
<!--Url for Badges-->
|
||||||
|
[license-shield]: https://img.shields.io/github/license/yasirarism/MissKatyPyro?labelColor=D8D8D8&color=04B4AE
|
||||||
|
[repository-size-shield]: https://img.shields.io/github/repo-size/yasirarism/MissKatyPyro?labelColor=D8D8D8&color=BE81F7
|
||||||
|
[issue-closed-shield]: https://img.shields.io/github/issues-closed/yasirarism/MissKatyPyro?labelColor=D8D8D8&color=FE9A2E
|
||||||
|
|
||||||
|
<!--Url for Buttons-->
|
||||||
|
[readme-ko-shield]: https://img.shields.io/badge/-readme%20in%20Indonesian-2E2E2E?style=for-the-badge
|
||||||
|
[view-demo-shield]: https://img.shields.io/badge/-%F0%9F%98%8E%20view%20demo-F3F781?style=for-the-badge
|
||||||
|
[view-demo-url]: https://t.me/MissKatyPyro
|
||||||
|
[report-bug-shield]: https://img.shields.io/badge/-%F0%9F%90%9E%20report%20bug-F5A9A9?style=for-the-badge
|
||||||
|
[report-bug-url]: https://github.com/yasirarism/MissKatyPyro/issues
|
||||||
|
[request-feature-shield]: https://img.shields.io/badge/-%E2%9C%A8%20request%20feature-A9D0F5?style=for-the-badge
|
||||||
|
[request-feature-url]: https://github.com/yasirarism/MissKatyPyro/issues
|
||||||
|
|
||||||
|
<!--URLS-->
|
||||||
|
[readme-ko-url]: README.md
|
||||||
|
[kofi-url]: https://ko-fi.com/yasirarism
|
||||||
|
[paypal-url]: https://paypal.me/yasirarism
|
||||||
|
[qris-url]: https://telegra.ph/file/2acf7698f300ef3d9138f.jpg
|
||||||
|
[sociabuzz-url]: https://sociabuzz.com/yasirarism/tribe
|
||||||
|
[saweria-url]: https://saweria.co/yasirarism
|
||||||
|
[trakteer-url]: https://trakteer.id/yasir-aris-sp7cn
|
||||||
194
README.md
Normal file
194
README.md
Normal file
|
|
@ -0,0 +1,194 @@
|
||||||
|
# MissKatyPyro
|
||||||
|
|
||||||
|
<!--Badges-->
|
||||||
|
![MIT License][license-shield] ![Repository Size][repository-size-shield] ![Issue Closed][issue-closed-shield]
|
||||||
|
|
||||||
|
<!--Project Title Image-->
|
||||||
|
<p align="center">
|
||||||
|
<img src="https://repository-images.githubusercontent.com/433350689/26cb713b-43c3-4dec-94cb-6c80599547e8" width="200" height="200"/>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<!--Project Buttons-->
|
||||||
|
[![Readme in Indonesian][readme-ko-shield]][readme-ko-url] [![View Demo][view-demo-shield]][view-demo-url] [![Report bug][report-bug-shield]][report-bug-url] [![Request feature][request-feature-shield]][request-feature-url]
|
||||||
|
|
||||||
|
<!--Table of Contents-->
|
||||||
|
# Table of Contents
|
||||||
|
- [[1] About MissKaty](#1-about-misskaty)
|
||||||
|
- [[2] Framework Tools And Server That Used To Build This Bot](#2-framework-tools-and-server-that-used-to-build-this-bot)
|
||||||
|
- [[3] Donation](#3-donation)
|
||||||
|
- [[4] Notes](#4-notes)
|
||||||
|
- [[5] Features](#5-features)
|
||||||
|
- [[6] Variables](#6-variables)
|
||||||
|
- [[7] Deploying Tutorial](#7-deploy-recommended-using-dockerdocker-compose)
|
||||||
|
- [Build And Run Using Legacy Method](#build-and-run-using-legacy-method)
|
||||||
|
- [Build And Run Using Docker](#build-and-run-using-docker)
|
||||||
|
- [Build And Run The Docker Image Using docker-compose](#build-and-run-the-docker-image-using-docker-compose)
|
||||||
|
- [[8] Credits](#8-thanks-to)
|
||||||
|
- [[9] Disclaimer](#8-disclaimer)
|
||||||
|
|
||||||
|
# [1] About MissKaty
|
||||||
|
*MissKaty* is a Telegram Bot built using Python and the Pyrogram library. Many useful features for us to use. I hope that one day this project will be discontinued, someone will continue or develop it again. I gave the name MissKaty because I like cats, a cute animal that likes to be played with and friendly with humans.
|
||||||
|
|
||||||
|
## [2] Framework Tools And Server That Used To Build This Bot
|
||||||
|
🌱 PyroFork v2.x.x (Fork of Pyrogram with Topics Support and Some Patch)<br>
|
||||||
|
🌱 Python 3.11 Support<br>
|
||||||
|
🌱 MongoDB as Database<br>
|
||||||
|
🌱 PyKeyboard for Building Pagination<br>
|
||||||
|
🌱 VS Code<br>
|
||||||
|
🌱 VPS/Server With Docker Support (Recommended)<br>
|
||||||
|
|
||||||
|
## [3] Donation and Support
|
||||||
|
*For Indonesian Only and some supported country:*<br>
|
||||||
|
🌱 [QRIS][qris-url]<br>
|
||||||
|
|
||||||
|
*For International Payment:*<br>
|
||||||
|
🌱 [Paypal][paypal-url]<br>
|
||||||
|
|
||||||
|
## [4] Notes
|
||||||
|
If you want help me fixing some error in my bot, you can make pull request to this repo. I'm very glad if you can help me. You can also give support to me for buying server.
|
||||||
|
|
||||||
|
## [5] Features
|
||||||
|
|
||||||
|
| FEATURE MY BOT |🌱|
|
||||||
|
| ------------- | ------------- |
|
||||||
|
| Basic Admin Feature |✔️|
|
||||||
|
| AFK Feature |✔️|
|
||||||
|
| Downloader FB, TikTok and YT-DLP Support |✔️|
|
||||||
|
| MultiLanguage Support (Unfinished) |⚠️|
|
||||||
|
| NightMode |✔️|
|
||||||
|
| ChatBot based on OpenAI |✔️|
|
||||||
|
| MissKaty Mata |✔️|
|
||||||
|
| Inline Search |✔️|
|
||||||
|
| Sticker Tools |✔️|
|
||||||
|
| PasteBin Tools |✔️|
|
||||||
|
| WebScraper (Pahe, MelongMovie, LK21, Terbit21, Kusonime, etc) |✔️|
|
||||||
|
| IMDB Search With Multi Language Per User |✔️|
|
||||||
|
| GenSS From Media and MediaInfo Generator |✔️|
|
||||||
|
| And Many More.. |✔️|
|
||||||
|
|
||||||
|
## [6] Variables
|
||||||
|
|
||||||
|
### Required Variables
|
||||||
|
* `BOT_TOKEN`: Create a bot using [@BotFather](https://t.me/BotFather), and get the Telegram API token.
|
||||||
|
* `API_ID`: Get this value from [telegram.org](https://my.telegram.org/apps)
|
||||||
|
* `API_HASH`: Get this value from [telegram.org](https://my.telegram.org/apps)
|
||||||
|
* `DATABASE_URI`: [mongoDB](https://www.mongodb.com) URI. Get this value from [mongoDB](https://www.mongodb.com). For more help watch this [video](https://youtu.be/1G1XwEOnxxo)
|
||||||
|
* `LOG_CHANNEL` : A channel to log the activities of bot. Make sure bot is an admin in the channel.
|
||||||
|
|
||||||
|
### Optional Variables
|
||||||
|
* `USER_SESSION` : Session string for Userbot.
|
||||||
|
* `DATABASE_NAME`: Name of the database in MongoDB
|
||||||
|
* `COMMAND_HANDLER`: List of handler bot command splitted by space. Ex: `. !` > so bot will respond with `.cmd` or `!cmd`
|
||||||
|
* `SUDO`: User ID that have access to bot, split by space
|
||||||
|
* `OPENAI_API`: Get it from OpenAI Web
|
||||||
|
* `CURRENCY_API`: Get API Key from https://app.exchangerate-api.com/sign-up
|
||||||
|
|
||||||
|
## [7] Tutorial Deploy (Recommended using Docker/Docker Compose)
|
||||||
|
|
||||||
|
#### Build And Run Using Legacy Method
|
||||||
|
- Make sure minimum python version is 3.8 to prevent some errors. Check it with this command:
|
||||||
|
```
|
||||||
|
python3 --version
|
||||||
|
```
|
||||||
|
- Install all dependency that needed bot to run. *(need root access, you can skip this if your server didn't have root access but some plugins will not work)*
|
||||||
|
```
|
||||||
|
apt update -y & apt install libjpeg-dev zlib1g-dev libwebp-dev python3-pip python3-lxml git wget curl ffmpeg locales tzdata neofetch mediainfo speedtest-cli -y
|
||||||
|
```
|
||||||
|
- Install requirements.txt, if using python 3.11, you need use venv when install pip package.<br/>
|
||||||
|
*Python < 3.10*
|
||||||
|
```
|
||||||
|
pip3 install -r requirements.txt
|
||||||
|
```
|
||||||
|
*Python 3.11*
|
||||||
|
```
|
||||||
|
Install venv from your terminal and activate it
|
||||||
|
pip3 install -r requirements.txt
|
||||||
|
```
|
||||||
|
- Setting your config.env or via environment and dont forget fill all required value.
|
||||||
|
- Run Bot
|
||||||
|
```
|
||||||
|
bash start.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Build And Run Using Docker
|
||||||
|
|
||||||
|
- Start Docker daemon (Skip if already running):
|
||||||
|
```
|
||||||
|
sudo dockerd
|
||||||
|
```
|
||||||
|
- Build Docker image:
|
||||||
|
```
|
||||||
|
sudo docker build . -t misskaty
|
||||||
|
```
|
||||||
|
- Run the image:
|
||||||
|
```
|
||||||
|
sudo docker run misskaty
|
||||||
|
```
|
||||||
|
- To stop the image:
|
||||||
|
```
|
||||||
|
sudo docker ps
|
||||||
|
sudo docker stop <pid>
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Build And Run The Docker Image Using docker-compose
|
||||||
|
|
||||||
|
- Install docker-compose
|
||||||
|
```
|
||||||
|
sudo apt install docker-compose
|
||||||
|
```
|
||||||
|
- Build and run Docker image or to view current running image:
|
||||||
|
```
|
||||||
|
sudo docker-compose up
|
||||||
|
```
|
||||||
|
- After editing files with nano for example (nano start.sh):
|
||||||
|
```
|
||||||
|
sudo docker-compose up --build
|
||||||
|
```
|
||||||
|
- To stop the running image:
|
||||||
|
```
|
||||||
|
sudo docker ps
|
||||||
|
```
|
||||||
|
```
|
||||||
|
sudo docker-compose stop <pid>
|
||||||
|
```
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
|
||||||
|
## [8] Thanks to
|
||||||
|
- Thanks To Allah Swt.
|
||||||
|
- Thanks To Dan For His Awesome [Library](https://github.com/pyrogram/pyrogram).
|
||||||
|
- Thanks To [The Hamker Cat](https://github.com/TheHamkerCat) For WilliamButcher Code.
|
||||||
|
- Thanks To [Team Yukki](https://github.com/TeamYukki) For AFK Bot Code.
|
||||||
|
- Thanks To [Wrench](https://github.com/EverythingSuckz) For Some Code.
|
||||||
|
- Thanks To [AmanoTeam](https://github.com/AmanoTeam) For MultiLanguage Template.
|
||||||
|
- And All People Who Help Me In My Life...
|
||||||
|
If your code used in this repo and want to give credit please open issue..
|
||||||
|
|
||||||
|
## [9] Disclaimer
|
||||||
|
[](https://www.gnu.org/licenses/agpl-3.0.en.html#header)
|
||||||
|
Licensed under [GNU AGPL 2.0.](https://github.com/yasirarism/MissKatyPyro/blob/master/LICENSE)
|
||||||
|
WARNING: Selling The Codes To Other People For Money Is *Strictly Prohibited*. God always sees you.
|
||||||
|
|
||||||
|
<!--Url for Badges-->
|
||||||
|
[license-shield]: https://img.shields.io/github/license/yasirarism/MissKatyPyro?labelColor=D8D8D8&color=04B4AE
|
||||||
|
[repository-size-shield]: https://img.shields.io/github/repo-size/yasirarism/MissKatyPyro?labelColor=D8D8D8&color=BE81F7
|
||||||
|
[issue-closed-shield]: https://img.shields.io/github/issues-closed/yasirarism/MissKatyPyro?labelColor=D8D8D8&color=FE9A2E
|
||||||
|
|
||||||
|
<!--Url for Buttons-->
|
||||||
|
[readme-ko-shield]: https://img.shields.io/badge/-readme%20in%20Indonesian-2E2E2E?style=for-the-badge
|
||||||
|
[view-demo-shield]: https://img.shields.io/badge/-%F0%9F%98%8E%20view%20demo-F3F781?style=for-the-badge
|
||||||
|
[view-demo-url]: https://t.me/MissKatyPyro
|
||||||
|
[report-bug-shield]: https://img.shields.io/badge/-%F0%9F%90%9E%20report%20bug-F5A9A9?style=for-the-badge
|
||||||
|
[report-bug-url]: https://github.com/yasirarism/MissKatyPyro/issues
|
||||||
|
[request-feature-shield]: https://img.shields.io/badge/-%E2%9C%A8%20request%20feature-A9D0F5?style=for-the-badge
|
||||||
|
[request-feature-url]: https://github.com/yasirarism/MissKatyPyro/issues
|
||||||
|
|
||||||
|
<!--URLS-->
|
||||||
|
[readme-ko-url]: README.id.md
|
||||||
|
[kofi-url]: https://ko-fi.com/yasirarism
|
||||||
|
[paypal-url]: https://paypal.me/yasirarism
|
||||||
|
[qris-url]: https://telegra.ph/file/9427d61d6968b8ee4fb2f.jpg
|
||||||
|
[sociabuzz-url]: https://sociabuzz.com/yasirarism/tribe
|
||||||
|
[saweria-url]: https://saweria.co/yasirarism
|
||||||
|
[trakteer-url]: https://trakteer.id/yasir-aris-sp7cn
|
||||||
BIN
assets/Calistoga-Regular.ttf
Normal file
BIN
assets/Calistoga-Regular.ttf
Normal file
Binary file not shown.
BIN
assets/DejaVuSans-Bold.ttf
Normal file
BIN
assets/DejaVuSans-Bold.ttf
Normal file
Binary file not shown.
BIN
assets/DejaVuSans.ttf
Normal file
BIN
assets/DejaVuSans.ttf
Normal file
Binary file not shown.
BIN
assets/IronFont.otf
Normal file
BIN
assets/IronFont.otf
Normal file
Binary file not shown.
BIN
assets/MutantAcademyStyle.ttf
Normal file
BIN
assets/MutantAcademyStyle.ttf
Normal file
Binary file not shown.
BIN
assets/assfont.ttf
Normal file
BIN
assets/assfont.ttf
Normal file
Binary file not shown.
BIN
assets/bg.png
Normal file
BIN
assets/bg.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 21 KiB |
BIN
assets/kertas.jpg
Normal file
BIN
assets/kertas.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 37 KiB |
BIN
assets/profilepic.png
Normal file
BIN
assets/profilepic.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 10 KiB |
BIN
assets/statsbg.jpg
Normal file
BIN
assets/statsbg.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 63 KiB |
BIN
assets/thumb.jpg
Normal file
BIN
assets/thumb.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 21 KiB |
15
config.env.sample
Normal file
15
config.env.sample
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
# Required Vars
|
||||||
|
API_HASH=
|
||||||
|
API_ID=
|
||||||
|
BOT_TOKEN=
|
||||||
|
DATABASE_URI=mongodb+srv://
|
||||||
|
LOG_CHANNEL=
|
||||||
|
|
||||||
|
# Optional Vars
|
||||||
|
SUDO=617426792
|
||||||
|
DATABASE_NAME=MissKatyDB
|
||||||
|
SUPPORT_CHAT=YasirPediaChannel
|
||||||
|
COMMAND_HANDLER=
|
||||||
|
USER_SESSION=
|
||||||
|
OPENAI_API=
|
||||||
|
CURRENCY_API=
|
||||||
12
database/__init__.py
Normal file
12
database/__init__.py
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
"""
|
||||||
|
* @author yasir <yasiramunandar@gmail.com>
|
||||||
|
* @date 2022-09-06 10:12:09
|
||||||
|
* @projectName MissKatyPyro
|
||||||
|
* Copyright @YasirPedia All rights reserved
|
||||||
|
"""
|
||||||
|
from async_pymongo import AsyncClient
|
||||||
|
|
||||||
|
from misskaty.vars import DATABASE_NAME, DATABASE_URI
|
||||||
|
|
||||||
|
mongo = AsyncClient(DATABASE_URI)
|
||||||
|
dbname = mongo[DATABASE_NAME]
|
||||||
63
database/afk_db.py
Normal file
63
database/afk_db.py
Normal file
|
|
@ -0,0 +1,63 @@
|
||||||
|
#
|
||||||
|
# Copyright (C) 2021-2022 by TeamYukki@Github, < https://github.com/TeamYukki >.
|
||||||
|
#
|
||||||
|
# This file is part of < https://github.com/TeamYukki/YukkiAFKBot > project,
|
||||||
|
# and is released under the "GNU v3.0 License Agreement".
|
||||||
|
# Please see < https://github.com/TeamYukki/YukkiAFKBot/blob/master/LICENSE >
|
||||||
|
#
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
|
||||||
|
from database import dbname
|
||||||
|
|
||||||
|
usersdb = dbname["users"]
|
||||||
|
cleandb = dbname["cleanmode"]
|
||||||
|
cleanmode = {}
|
||||||
|
|
||||||
|
|
||||||
|
async def is_cleanmode_on(chat_id: int) -> bool:
|
||||||
|
mode = cleanmode.get(chat_id)
|
||||||
|
if not mode:
|
||||||
|
user = await cleandb.find_one({"chat_id": chat_id})
|
||||||
|
if not user:
|
||||||
|
cleanmode[chat_id] = True
|
||||||
|
return True
|
||||||
|
cleanmode[chat_id] = False
|
||||||
|
return False
|
||||||
|
return mode
|
||||||
|
|
||||||
|
|
||||||
|
async def cleanmode_on(chat_id: int):
|
||||||
|
cleanmode[chat_id] = True
|
||||||
|
user = await cleandb.find_one({"chat_id": chat_id})
|
||||||
|
if user:
|
||||||
|
return await cleandb.delete_one({"chat_id": chat_id})
|
||||||
|
|
||||||
|
|
||||||
|
async def cleanmode_off(chat_id: int):
|
||||||
|
cleanmode[chat_id] = False
|
||||||
|
user = await cleandb.find_one({"chat_id": chat_id})
|
||||||
|
if not user:
|
||||||
|
return await cleandb.insert_one({"chat_id": chat_id})
|
||||||
|
|
||||||
|
|
||||||
|
async def is_afk(user_id: int) -> bool:
|
||||||
|
user = await usersdb.find_one({"user_id": user_id})
|
||||||
|
return (True, user["reason"]) if user else (False, {})
|
||||||
|
|
||||||
|
|
||||||
|
async def add_afk(user_id: int, mode):
|
||||||
|
await usersdb.update_one(
|
||||||
|
{"user_id": user_id}, {"$set": {"reason": mode}}, upsert=True
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
async def remove_afk(user_id: int):
|
||||||
|
user = await usersdb.find_one({"user_id": user_id})
|
||||||
|
if user:
|
||||||
|
return await usersdb.delete_one({"user_id": user_id})
|
||||||
|
|
||||||
|
|
||||||
|
async def get_afk_users() -> list:
|
||||||
|
users = usersdb.find({"user_id": {"$gt": 0}})
|
||||||
|
return list(await users.to_list(length=1000000000)) if users else []
|
||||||
37
database/blacklist_db.py
Normal file
37
database/blacklist_db.py
Normal file
|
|
@ -0,0 +1,37 @@
|
||||||
|
from typing import List
|
||||||
|
|
||||||
|
from database import dbname
|
||||||
|
|
||||||
|
blacklist_filtersdb = dbname["blacklistFilters"]
|
||||||
|
|
||||||
|
|
||||||
|
async def get_blacklisted_words(chat_id: int) -> List[str]:
|
||||||
|
_filters = await blacklist_filtersdb.find_one({"chat_id": chat_id})
|
||||||
|
if not _filters:
|
||||||
|
return []
|
||||||
|
return _filters["filters"]
|
||||||
|
|
||||||
|
|
||||||
|
async def save_blacklist_filter(chat_id: int, word: str):
|
||||||
|
word = word.lower().strip()
|
||||||
|
_filters = await get_blacklisted_words(chat_id)
|
||||||
|
_filters.append(word)
|
||||||
|
await blacklist_filtersdb.update_one(
|
||||||
|
{"chat_id": chat_id},
|
||||||
|
{"$set": {"filters": _filters}},
|
||||||
|
upsert=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
async def delete_blacklist_filter(chat_id: int, word: str) -> bool:
|
||||||
|
filtersd = await get_blacklisted_words(chat_id)
|
||||||
|
word = word.lower().strip()
|
||||||
|
if word in filtersd:
|
||||||
|
filtersd.remove(word)
|
||||||
|
await blacklist_filtersdb.update_one(
|
||||||
|
{"chat_id": chat_id},
|
||||||
|
{"$set": {"filters": filtersd}},
|
||||||
|
upsert=True,
|
||||||
|
)
|
||||||
|
return True
|
||||||
|
return False
|
||||||
45
database/filters_db.py
Normal file
45
database/filters_db.py
Normal file
|
|
@ -0,0 +1,45 @@
|
||||||
|
from typing import Dict, List, Union
|
||||||
|
|
||||||
|
from database import dbname
|
||||||
|
|
||||||
|
filtersdb = dbname["filters"]
|
||||||
|
|
||||||
|
|
||||||
|
async def _get_filters(chat_id: int) -> Dict[str, int]:
|
||||||
|
_filters = await filtersdb.find_one({"chat_id": chat_id})
|
||||||
|
return _filters["filters"] if _filters else {}
|
||||||
|
|
||||||
|
|
||||||
|
async def delete_filter(chat_id: int, name: str) -> bool:
|
||||||
|
filtersd = await _get_filters(chat_id)
|
||||||
|
name = name.lower().strip()
|
||||||
|
if name in filtersd:
|
||||||
|
del filtersd[name]
|
||||||
|
await filtersdb.update_one(
|
||||||
|
{"chat_id": chat_id},
|
||||||
|
{"$set": {"filters": filtersd}},
|
||||||
|
upsert=True,
|
||||||
|
)
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
async def get_filter(chat_id: int, name: str) -> Union[bool, dict]:
|
||||||
|
name = name.lower().strip()
|
||||||
|
_filters = await _get_filters(chat_id)
|
||||||
|
return _filters[name] if name in _filters else False
|
||||||
|
|
||||||
|
|
||||||
|
async def get_filters_names(chat_id: int) -> List[str]:
|
||||||
|
return list(await _get_filters(chat_id))
|
||||||
|
|
||||||
|
|
||||||
|
async def save_filter(chat_id: int, name: str, _filter: dict):
|
||||||
|
name = name.lower().strip()
|
||||||
|
_filters = await _get_filters(chat_id)
|
||||||
|
_filters[name] = _filter
|
||||||
|
await filtersdb.update_one(
|
||||||
|
{"chat_id": chat_id},
|
||||||
|
{"$set": {"filters": _filters}},
|
||||||
|
upsert=True,
|
||||||
|
)
|
||||||
22
database/gban_db.py
Normal file
22
database/gban_db.py
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
from database import dbname
|
||||||
|
|
||||||
|
gbansdb = dbname["gban"]
|
||||||
|
|
||||||
|
|
||||||
|
async def is_gbanned_user(user_id: int) -> bool:
|
||||||
|
user = await gbansdb.find_one({"user_id": user_id})
|
||||||
|
return bool(user)
|
||||||
|
|
||||||
|
|
||||||
|
async def add_gban_user(user_id: int):
|
||||||
|
is_gbanned = await is_gbanned_user(user_id)
|
||||||
|
if is_gbanned:
|
||||||
|
return
|
||||||
|
return await gbansdb.insert_one({"user_id": user_id})
|
||||||
|
|
||||||
|
|
||||||
|
async def remove_gban_user(user_id: int):
|
||||||
|
is_gbanned = await is_gbanned_user(user_id)
|
||||||
|
if not is_gbanned:
|
||||||
|
return
|
||||||
|
return await gbansdb.delete_one({"user_id": user_id})
|
||||||
20
database/imdb_db.py
Normal file
20
database/imdb_db.py
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
from database import dbname
|
||||||
|
|
||||||
|
imbd_db = dbname["imdb"]
|
||||||
|
|
||||||
|
|
||||||
|
async def is_imdbset(user_id: int) -> bool:
|
||||||
|
user = await imbd_db.find_one({"user_id": user_id})
|
||||||
|
return (True, user["lang"]) if user else (False, {})
|
||||||
|
|
||||||
|
|
||||||
|
async def add_imdbset(user_id: int, lang):
|
||||||
|
await imbd_db.update_one(
|
||||||
|
{"user_id": user_id}, {"$set": {"lang": lang}}, upsert=True
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
async def remove_imdbset(user_id: int):
|
||||||
|
user = await imbd_db.find_one({"user_id": user_id})
|
||||||
|
if user:
|
||||||
|
return await imbd_db.delete_one({"user_id": user_id})
|
||||||
67
database/karma_db.py
Normal file
67
database/karma_db.py
Normal file
|
|
@ -0,0 +1,67 @@
|
||||||
|
from typing import Dict, Union
|
||||||
|
|
||||||
|
from database import dbname
|
||||||
|
from misskaty.helper.functions import int_to_alpha
|
||||||
|
|
||||||
|
karmadb = dbname["karma"]
|
||||||
|
|
||||||
|
|
||||||
|
async def get_karmas_count() -> dict:
|
||||||
|
chats_count = 0
|
||||||
|
karmas_count = 0
|
||||||
|
async for chat in karmadb.find({"chat_id": {"$lt": 0}}):
|
||||||
|
for i in chat["karma"]:
|
||||||
|
karma_ = chat["karma"][i]["karma"]
|
||||||
|
if karma_ > 0:
|
||||||
|
karmas_count += karma_
|
||||||
|
chats_count += 1
|
||||||
|
return {"chats_count": chats_count, "karmas_count": karmas_count}
|
||||||
|
|
||||||
|
|
||||||
|
async def user_global_karma(user_id) -> int:
|
||||||
|
total_karma = 0
|
||||||
|
async for chat in karmadb.find({"chat_id": {"$lt": 0}}):
|
||||||
|
karma = await get_karma(chat["chat_id"], await int_to_alpha(user_id))
|
||||||
|
if karma and (int(karma["karma"]) > 0):
|
||||||
|
total_karma += int(karma["karma"])
|
||||||
|
return total_karma
|
||||||
|
|
||||||
|
|
||||||
|
async def get_karmas(chat_id: int) -> Dict[str, int]:
|
||||||
|
karma = await karmadb.find_one({"chat_id": chat_id})
|
||||||
|
return karma["karma"] if karma else {}
|
||||||
|
|
||||||
|
|
||||||
|
async def get_karma(chat_id: int, name: str) -> Union[bool, dict]:
|
||||||
|
name = name.lower().strip()
|
||||||
|
karmas = await get_karmas(chat_id)
|
||||||
|
if name in karmas:
|
||||||
|
return karmas[name]
|
||||||
|
|
||||||
|
|
||||||
|
async def update_karma(chat_id: int, name: str, karma: dict):
|
||||||
|
name = name.lower().strip()
|
||||||
|
karmas = await get_karmas(chat_id)
|
||||||
|
karmas[name] = karma
|
||||||
|
await karmadb.update_one(
|
||||||
|
{"chat_id": chat_id}, {"$set": {"karma": karmas}}, upsert=True
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
async def is_karma_on(chat_id: int) -> bool:
|
||||||
|
chat = await karmadb.find_one({"chat_id_toggle": chat_id})
|
||||||
|
return not chat
|
||||||
|
|
||||||
|
|
||||||
|
async def karma_on(chat_id: int):
|
||||||
|
is_karma = await is_karma_on(chat_id)
|
||||||
|
if is_karma:
|
||||||
|
return
|
||||||
|
return await karmadb.delete_one({"chat_id_toggle": chat_id})
|
||||||
|
|
||||||
|
|
||||||
|
async def karma_off(chat_id: int):
|
||||||
|
is_karma = await is_karma_on(chat_id)
|
||||||
|
if not is_karma:
|
||||||
|
return
|
||||||
|
return await karmadb.insert_one({"chat_id_toggle": chat_id})
|
||||||
22
database/locale_db.py
Normal file
22
database/locale_db.py
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
from typing import Iterable
|
||||||
|
|
||||||
|
from pyrogram.enums import ChatType
|
||||||
|
|
||||||
|
from database import dbname
|
||||||
|
|
||||||
|
localesdb = dbname["locale"] # DB for localization
|
||||||
|
|
||||||
|
group_types: Iterable[ChatType] = (ChatType.GROUP, ChatType.SUPERGROUP)
|
||||||
|
|
||||||
|
|
||||||
|
async def set_db_lang(chat_id: int, chat_type: str, lang_code: str):
|
||||||
|
await localesdb.update_one(
|
||||||
|
{"chat_id": chat_id},
|
||||||
|
{"$set": {"lang": lang_code, "chat_type": chat_type.value}},
|
||||||
|
upsert=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
async def get_db_lang(chat_id: int) -> str:
|
||||||
|
ul = await localesdb.find_one({"chat_id": chat_id})
|
||||||
|
return ul["lang"] if ul else {}
|
||||||
44
database/notes_db.py
Normal file
44
database/notes_db.py
Normal file
|
|
@ -0,0 +1,44 @@
|
||||||
|
from typing import Dict, List, Union
|
||||||
|
|
||||||
|
from database import dbname
|
||||||
|
|
||||||
|
notesdb = dbname["notes"]
|
||||||
|
|
||||||
|
|
||||||
|
async def _get_notes(chat_id: int) -> Dict[str, int]:
|
||||||
|
_notes = await notesdb.find_one({"chat_id": chat_id})
|
||||||
|
return _notes["notes"] if _notes else {}
|
||||||
|
|
||||||
|
|
||||||
|
async def delete_note(chat_id: int, name: str) -> bool:
|
||||||
|
notesd = await _get_notes(chat_id)
|
||||||
|
name = name.lower().strip()
|
||||||
|
if name in notesd:
|
||||||
|
del notesd[name]
|
||||||
|
await notesdb.update_one(
|
||||||
|
{"chat_id": chat_id},
|
||||||
|
{"$set": {"notes": notesd}},
|
||||||
|
upsert=True,
|
||||||
|
)
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
async def get_note(chat_id: int, name: str) -> Union[bool, dict]:
|
||||||
|
name = name.lower().strip()
|
||||||
|
_notes = await _get_notes(chat_id)
|
||||||
|
return _notes[name] if name in _notes else False
|
||||||
|
|
||||||
|
|
||||||
|
async def get_note_names(chat_id: int) -> List[str]:
|
||||||
|
return list(await _get_notes(chat_id))
|
||||||
|
|
||||||
|
|
||||||
|
async def save_note(chat_id: int, name: str, note: dict):
|
||||||
|
name = name.lower().strip()
|
||||||
|
_notes = await _get_notes(chat_id)
|
||||||
|
_notes[name] = note
|
||||||
|
|
||||||
|
await notesdb.update_one(
|
||||||
|
{"chat_id": chat_id}, {"$set": {"notes": _notes}}, upsert=True
|
||||||
|
)
|
||||||
42
database/sangmata_db.py
Normal file
42
database/sangmata_db.py
Normal file
|
|
@ -0,0 +1,42 @@
|
||||||
|
from database import dbname
|
||||||
|
|
||||||
|
matadb = dbname["sangmata"]
|
||||||
|
|
||||||
|
|
||||||
|
# Get Data User
|
||||||
|
async def cek_userdata(user_id: int) -> bool:
|
||||||
|
user = await matadb.find_one({"user_id": user_id})
|
||||||
|
return bool(user)
|
||||||
|
|
||||||
|
|
||||||
|
async def get_userdata(user_id: int) -> bool:
|
||||||
|
user = await matadb.find_one({"user_id": user_id})
|
||||||
|
return user["username"], user["first_name"], user["last_name"]
|
||||||
|
|
||||||
|
|
||||||
|
async def add_userdata(user_id: int, username, first_name, last_name):
|
||||||
|
await matadb.update_one(
|
||||||
|
{"user_id": user_id},
|
||||||
|
{
|
||||||
|
"$set": {
|
||||||
|
"username": username,
|
||||||
|
"first_name": first_name,
|
||||||
|
"last_name": last_name,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
upsert=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# Enable Mata MissKaty in Selected Chat
|
||||||
|
async def is_sangmata_on(chat_id: int) -> bool:
|
||||||
|
chat = await matadb.find_one({"chat_id_toggle": chat_id})
|
||||||
|
return bool(chat)
|
||||||
|
|
||||||
|
|
||||||
|
async def sangmata_on(chat_id: int) -> bool:
|
||||||
|
await matadb.insert_one({"chat_id_toggle": chat_id})
|
||||||
|
|
||||||
|
|
||||||
|
async def sangmata_off(chat_id: int):
|
||||||
|
await matadb.delete_one({"chat_id_toggle": chat_id})
|
||||||
112
database/users_chats_db.py
Normal file
112
database/users_chats_db.py
Normal file
|
|
@ -0,0 +1,112 @@
|
||||||
|
from async_pymongo import AsyncClient
|
||||||
|
|
||||||
|
from misskaty.vars import DATABASE_NAME, DATABASE_URI
|
||||||
|
|
||||||
|
|
||||||
|
class UsersData:
|
||||||
|
def __init__(self, uri, database_name):
|
||||||
|
self._client = AsyncClient(uri)
|
||||||
|
self.db = self._client[database_name]
|
||||||
|
self.col = self.db["users"]
|
||||||
|
self.grp = self.db["groups"]
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def new_user(id, name):
|
||||||
|
return dict(
|
||||||
|
id=id,
|
||||||
|
name=name,
|
||||||
|
ban_status=dict(
|
||||||
|
is_banned=False,
|
||||||
|
ban_reason="",
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def new_group(id, title):
|
||||||
|
return dict(
|
||||||
|
id=id,
|
||||||
|
title=title,
|
||||||
|
chat_status=dict(
|
||||||
|
is_disabled=False,
|
||||||
|
reason="",
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
async def add_user(self, id, name):
|
||||||
|
user = self.new_user(id, name)
|
||||||
|
await self.col.insert_one(user)
|
||||||
|
|
||||||
|
async def is_user_exist(self, id):
|
||||||
|
user = await self.col.find_one({"id": int(id)})
|
||||||
|
return bool(user)
|
||||||
|
|
||||||
|
async def total_users_count(self):
|
||||||
|
return await self.col.count_documents({})
|
||||||
|
|
||||||
|
async def remove_ban(self, id):
|
||||||
|
ban_status = dict(is_banned=False, ban_reason="")
|
||||||
|
await self.col.update_one({"id": id}, {"$set": {"ban_status": ban_status}})
|
||||||
|
|
||||||
|
async def ban_user(self, user_id, ban_reason="No Reason"):
|
||||||
|
ban_status = dict(is_banned=True, ban_reason=ban_reason)
|
||||||
|
await self.col.update_one({"id": user_id}, {"$set": {"ban_status": ban_status}})
|
||||||
|
|
||||||
|
async def get_ban_status(self, id):
|
||||||
|
default = dict(is_banned=False, ban_reason="")
|
||||||
|
user = await self.col.find_one({"id": int(id)})
|
||||||
|
return user.get("ban_status", default) if user else default
|
||||||
|
|
||||||
|
async def get_all_users(self):
|
||||||
|
return self.col.find({})
|
||||||
|
|
||||||
|
async def delete_user(self, user_id):
|
||||||
|
await self.col.delete_many({"id": int(user_id)})
|
||||||
|
|
||||||
|
async def is_chat_exist(self, id):
|
||||||
|
user = await self.grp.find_one({"id": int(id)})
|
||||||
|
return bool(user)
|
||||||
|
|
||||||
|
async def get_banned(self):
|
||||||
|
users = self.col.find({"ban_status.is_banned": True})
|
||||||
|
chats = self.grp.find({"chat_status.is_disabled": True})
|
||||||
|
b_chats = [chat["id"] async for chat in chats]
|
||||||
|
b_users = [user["id"] async for user in users]
|
||||||
|
return b_users, b_chats
|
||||||
|
|
||||||
|
async def add_chat(self, chat, title):
|
||||||
|
chat = self.new_group(chat, title)
|
||||||
|
await self.grp.insert_one(chat)
|
||||||
|
|
||||||
|
async def get_chat(self, chat):
|
||||||
|
chat = await self.grp.find_one({"id": int(chat)})
|
||||||
|
return chat.get("chat_status") if chat else False
|
||||||
|
|
||||||
|
async def re_enable_chat(self, id):
|
||||||
|
chat_status = dict(
|
||||||
|
is_disabled=False,
|
||||||
|
reason="",
|
||||||
|
)
|
||||||
|
await self.grp.update_one(
|
||||||
|
{"id": int(id)}, {"$set": {"chat_status": chat_status}}
|
||||||
|
)
|
||||||
|
|
||||||
|
async def disable_chat(self, chat, reason="No Reason"):
|
||||||
|
chat_status = dict(
|
||||||
|
is_disabled=True,
|
||||||
|
reason=reason,
|
||||||
|
)
|
||||||
|
await self.grp.update_one(
|
||||||
|
{"id": int(chat)}, {"$set": {"chat_status": chat_status}}
|
||||||
|
)
|
||||||
|
|
||||||
|
async def total_chat_count(self):
|
||||||
|
return await self.grp.count_documents({})
|
||||||
|
|
||||||
|
async def get_all_chats(self):
|
||||||
|
return self.grp.find({})
|
||||||
|
|
||||||
|
async def get_db_size(self):
|
||||||
|
return (await self.db.command("dbstats"))["dataSize"]
|
||||||
|
|
||||||
|
|
||||||
|
db = UsersData(DATABASE_URI, DATABASE_NAME)
|
||||||
51
database/warn_db.py
Normal file
51
database/warn_db.py
Normal file
|
|
@ -0,0 +1,51 @@
|
||||||
|
from typing import Dict, Union
|
||||||
|
|
||||||
|
from database import dbname
|
||||||
|
|
||||||
|
warnsdb = dbname["warn"]
|
||||||
|
|
||||||
|
|
||||||
|
async def get_warns_count() -> dict:
|
||||||
|
chats_count = 0
|
||||||
|
warns_count = 0
|
||||||
|
async for chat in warnsdb.find({"chat_id": {"$lt": 0}}):
|
||||||
|
for user in chat["warns"]:
|
||||||
|
warns_count += chat["warns"][user]["warns"]
|
||||||
|
chats_count += 1
|
||||||
|
return {"chats_count": chats_count, "warns_count": warns_count}
|
||||||
|
|
||||||
|
|
||||||
|
async def get_warns(chat_id: int) -> Dict[str, int]:
|
||||||
|
warns = await warnsdb.find_one({"chat_id": chat_id})
|
||||||
|
return warns["warns"] if warns else {}
|
||||||
|
|
||||||
|
|
||||||
|
async def get_warn(chat_id: int, name: str) -> Union[bool, dict]:
|
||||||
|
name = name.lower().strip()
|
||||||
|
warns = await get_warns(chat_id)
|
||||||
|
if name in warns:
|
||||||
|
return warns[name]
|
||||||
|
|
||||||
|
|
||||||
|
async def add_warn(chat_id: int, name: str, warn: dict):
|
||||||
|
name = name.lower().strip()
|
||||||
|
warns = await get_warns(chat_id)
|
||||||
|
warns[name] = warn
|
||||||
|
|
||||||
|
await warnsdb.update_one(
|
||||||
|
{"chat_id": chat_id}, {"$set": {"warns": warns}}, upsert=True
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
async def remove_warns(chat_id: int, name: str) -> bool:
|
||||||
|
warnsd = await get_warns(chat_id)
|
||||||
|
name = name.lower().strip()
|
||||||
|
if name in warnsd:
|
||||||
|
del warnsd[name]
|
||||||
|
await warnsdb.update_one(
|
||||||
|
{"chat_id": chat_id},
|
||||||
|
{"$set": {"warns": warnsd}},
|
||||||
|
upsert=True,
|
||||||
|
)
|
||||||
|
return True
|
||||||
|
return False
|
||||||
9
docker-compose.yml
Normal file
9
docker-compose.yml
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
version: "3.3"
|
||||||
|
|
||||||
|
services:
|
||||||
|
app:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
command: bash start.sh
|
||||||
|
restart: on-failure
|
||||||
3
heroku.yml
Normal file
3
heroku.yml
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
build:
|
||||||
|
docker:
|
||||||
|
worker: Dockerfile
|
||||||
0
locales/__init__.py
Normal file
0
locales/__init__.py
Normal file
68
locales/en-US/admin.json
Normal file
68
locales/en-US/admin.json
Normal file
|
|
@ -0,0 +1,68 @@
|
||||||
|
{
|
||||||
|
"no_admin_error": "You must be an administrator to use this command.",
|
||||||
|
"no_permission_error": "I'm sorry but you don't have the required permissions to run this command. Missing permissions: {permissions}",
|
||||||
|
"private_not_allowed": "This command can't be used in a private chat. If you need any help, please use the /help command.",
|
||||||
|
"purge_no_reply": "Reply to a message to purge from.",
|
||||||
|
"delete_no_reply": "Reply To A Message To Delete It",
|
||||||
|
"pin_no_reply": "Reply to a message to pin/unpin it.",
|
||||||
|
"report_no_reply": "Reply To A Message To Report That User.",
|
||||||
|
"no_delete_perm": "Please give me delete message permission.",
|
||||||
|
"purge_success": "Successfully deleted {del_total} messages..",
|
||||||
|
"user_not_found": "I can't find that user.",
|
||||||
|
"invalid_id_uname": "⚠️ Invalid userid/username",
|
||||||
|
"kick_self_err": "I can't kick myself, i can leave if you want.",
|
||||||
|
"ban_self_err": "I can't ban myself, i can leave if you want.",
|
||||||
|
"report_self_err": "Why are you reporting yourself ?",
|
||||||
|
"demote_self_err": "I can't demote myself.",
|
||||||
|
"warn_self_err": "I can't warn myself.",
|
||||||
|
"mute_self_err": "I can't mute myself.",
|
||||||
|
"kick_sudo_err": "Wow, you wanna kick my owner?",
|
||||||
|
"ban_sudo_err": "Wow, you wanna try ban my owner?",
|
||||||
|
"demote_sudo_err": "Wow, you wanna try demote my owner?",
|
||||||
|
"warn_sudo_err": "Wow, you wanna try give warning to my owner?",
|
||||||
|
"mute_sudo_err": "Wow, you wanna try give mute to my owner?",
|
||||||
|
"kick_admin_err": "Lol, it's crazy if i can kick an admin.",
|
||||||
|
"ban_admin_err": "Lol, it's crazy if i can banned an admin.",
|
||||||
|
"mute_admin_err": "Lol, it's crazy if i can mute an admin.",
|
||||||
|
"warn_admin_err": "Lol, it's crazy if i can warn an admin.",
|
||||||
|
"kick_msg": "**Kicked User:** {mention} [`{id}`]\n**Kicked By:** {kicker}\n**Reason:** {reasonmsg}",
|
||||||
|
"ban_msg": "**Banned User:** {mention} [`{id}`]\n**Banned By:** {banner}\n",
|
||||||
|
"unban_msg": "__Banned removed by {mention}__",
|
||||||
|
"no_ban_permission": "Please give me ban permission to ban user in this group.",
|
||||||
|
"no_more_99": "You can't use more than 99",
|
||||||
|
"banned_time": "**Banned For:** {val}\n",
|
||||||
|
"muted_time": "**Muted For:** {val}\n",
|
||||||
|
"banned_reason": "**Reason:** {reas}",
|
||||||
|
"unban_channel_err": "You cannot unban a channel",
|
||||||
|
"give_unban_user": "Provide a username or reply to a user's message to unban.",
|
||||||
|
"unban_success": "Successfully unbanned {umention}!",
|
||||||
|
"give_idban_with_msg_link": "Provide a userid/username along with message link and reason to list-ban",
|
||||||
|
"give_idunban_with_msg_link": "Provide a userid/username along with message link and reason to list-unban",
|
||||||
|
"give_reason_list_ban": "You must provide a reason to list-ban",
|
||||||
|
"Invalid_tg_link": "Invalid message link provided",
|
||||||
|
"multiple_ban_progress": "`Banning User from multiple groups. This may take some time`",
|
||||||
|
"multiple_unban_progress": "`Unbanning User from multiple groups. This may take some time`",
|
||||||
|
"failed_get_uname": "Could not get group usernames",
|
||||||
|
"listban_msg": "**List-Banned User:** {mention}\n**Banned User ID:** `{uid}`\n**Admin:** {frus}\n**Affected chats:** `{ct}`\n**Reason:** {reas}",
|
||||||
|
"listunban_msg": "**List-Unbanned User:** {mention}\n**Unbanned User ID:** `{uid}`\n**Admin:** {frus}\n**Affected chats:** `{ct}`\n**Reason:** {reas}",
|
||||||
|
"promote_self_err": "I can't promote myself.",
|
||||||
|
"no_promote_perm": "Sadly, I don't permission to promote users.",
|
||||||
|
"full_promote": "Fully Promoted {umention}!",
|
||||||
|
"normal_promote": "Promoted {umention}!",
|
||||||
|
"pin_success": "**Pinned [this]({link}) message.**",
|
||||||
|
"unpin_success": "**UnPinned [this]({link}) message.**",
|
||||||
|
"pin_no_perm": "Please give me pin permission to use this command!.",
|
||||||
|
"report_msg": "Reported {user_mention} to admins!",
|
||||||
|
"reported_is_admin": "Do you know that the user you are replying is an admin ?",
|
||||||
|
"user_no_warn": "User {mention} has no warnings.",
|
||||||
|
"ch_warn_msg": "User {mention} has {warns}/3 warnings.",
|
||||||
|
"warn_msg": "**Warned User:** {mention}\n**Warned By:** {warner}\n**Reason:** {reas}\n**Warns:** {twarn}/3",
|
||||||
|
"rmwarn_msg": "Removed warnings of {mention}.",
|
||||||
|
"unwarn_msg": "Removed warnings by {mention}.",
|
||||||
|
"rmmute_msg": "__Mute removed by {mention}__",
|
||||||
|
"unmute_msg": "Unmuted! {umention}",
|
||||||
|
"reply_to_rm_warn": "Reply to a message to remove a user's warnings.",
|
||||||
|
"exceed_warn_msg": "Number of warns of {mention} exceeded, BANNED!",
|
||||||
|
"mute_msg": "**Muted User:** {mention}\n**Muted By:** {muter}\n",
|
||||||
|
"rm_warn_btn": "🚨 Remove Warn 🚨"
|
||||||
|
}
|
||||||
13
locales/en-US/afk.json
Normal file
13
locales/en-US/afk.json
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"no_channel": "This feature not supported for channel.",
|
||||||
|
"on_afk_msg_no_r": "**{usr}** [<code>{id}</code>] is back online and was away for {tm}\n\n",
|
||||||
|
"on_afk_msg_with_r": "**{usr}** [<code>{id}</code>] is back online and was away for {tm}\n\n**Reason:** `{reas}`\n\n",
|
||||||
|
"is_afk_msg_no_r": "**{usr}** [<code>{id}</code>] is AFK since {tm} ago.\n\n",
|
||||||
|
"is_afk_msg_with_r": "**{usr}** [<code>{id}</code>] is AFK since {tm} ago.\n\n**Reason:** {reas}\n\n",
|
||||||
|
"is_online": "**{usr}** [<code>{id}</code>] is back online",
|
||||||
|
"now_afk": "{usr} [<code>{id}</code>] is now AFK!.",
|
||||||
|
"afkdel_help": "**Usage:**\n/{cmd} [ENABLE|DISABLE] to enable or disable auto delete message.",
|
||||||
|
"afkdel_disable": "Disabled auto delete AFK message.",
|
||||||
|
"afkdel_enable": "Enabled auto delete AFK message in this chat.",
|
||||||
|
"is_afk": "{usr} [<code>{id}</code>] is AFK!."
|
||||||
|
}
|
||||||
6
locales/en-US/chatbot_ai.json
Normal file
6
locales/en-US/chatbot_ai.json
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"no_question": "Please use command <code>/{cmd} [question]</code> to ask your question with AI.",
|
||||||
|
"find_answers_str": "Wait a moment looking for your answer..",
|
||||||
|
"dont_spam": "Don't spam please, please wait {tm} second or i will ban you from this bot.",
|
||||||
|
"answers_too_long": "Question for your answer has exceeded TG text limit, check this link to view.\n\n{answerlink}"
|
||||||
|
}
|
||||||
11
locales/en-US/dev.json
Normal file
11
locales/en-US/dev.json
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
{
|
||||||
|
"already_up": "Its already up-to date!",
|
||||||
|
"up_and_rest": "<b>Updated with default branch, restarting now.</b>",
|
||||||
|
"cl_btn": "❌ Close",
|
||||||
|
"no_eval": "__No evaluate message!__",
|
||||||
|
"run_eval": "<i>Processing eval pyrogram..</i>",
|
||||||
|
"run_exec": "<i>Processing exec pyrogram..</i>",
|
||||||
|
"no_cmd": "No command to execute was given.",
|
||||||
|
"success": "Success",
|
||||||
|
"no_reply": "No Reply"
|
||||||
|
}
|
||||||
3
locales/en-US/fun.json
Normal file
3
locales/en-US/fun.json
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"result": "🎲 The dice stopped at the number: {number}"
|
||||||
|
}
|
||||||
6
locales/en-US/general.json
Normal file
6
locales/en-US/general.json
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"back_btn": "« Go back",
|
||||||
|
"no_results": "No Results.",
|
||||||
|
"unknown_id": "Sorry I can't recognize this user. Maybe I've never met him.",
|
||||||
|
"exp_task": "😶🌫️ Timeout. Task has been cancelled!"
|
||||||
|
}
|
||||||
13
locales/en-US/genss.json
Normal file
13
locales/en-US/genss.json
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"wait_msg": "Give me some time to process your request!! 😴",
|
||||||
|
"wait_dl": "<code>Processing, please wait..</code>",
|
||||||
|
"dl_progress": "Trying to download, please wait..",
|
||||||
|
"up_progress": "Trying to upload...",
|
||||||
|
"success_dl_msg": "File has been downloaded to <code>{path}</code>.",
|
||||||
|
"fail_open": "😟 Sorry! I cannot open the file.",
|
||||||
|
"limit_dl": "Sorry, download limited to 2GB to reduce flood. You can convert your files to link.",
|
||||||
|
"err_ssgen": "Failed screenshoot generation.\n\n{exc}",
|
||||||
|
"up_msg": "☑️ Generation screenshot successfully.\n\n{namma} (<code>{id}</code>)\n#️⃣ #ssgen #id{id}\n\nSS Generate by @{bot_uname}",
|
||||||
|
"no_reply": "Reply to a Telegram video or document or use direct link after command to generate screenshoot from media!",
|
||||||
|
"choose_no_ss": "Now choose how many result for screenshot? 🥳.\n\nTotal duration: `{td}` (`{dur} second`)"
|
||||||
|
}
|
||||||
13
locales/en-US/grup_tools.json
Normal file
13
locales/en-US/grup_tools.json
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"sudo_join_msg": "Wow, my cool owner just joined the group!",
|
||||||
|
"log_bot_added": "#New Group\nGroup = {ttl}(<code>{cid}</code>)\nNumber of Members = <code>{tot}</code>\nAdded by - {r_j}",
|
||||||
|
"support_btn": "Support",
|
||||||
|
"help_btn": "ℹ️ Help",
|
||||||
|
"update_btn": "📢 Updates",
|
||||||
|
"chat_not_allowed": "<b>CHAT NOT ALLOWED 🐞\n\nMy owner has banned me from working here! You can contact the owner of this bot..</b>",
|
||||||
|
"welcome_thanks": "<b>Thank you for adding me to {ttl} ❣️\n\nIf you have any problems or suggestions, you can contact me.</b>",
|
||||||
|
"capt_welc": "Hi {umention} [<code>{uid}</code>], Welcome to the {ttl} group.",
|
||||||
|
"combot_msg": "<b>#CAS Federation Ban</b>\nUser {umention} [<code>{uid}</code>] has been detected as a spambot and has been banned. Powered by <a href='https://api.cas.chat/check?user_id={u.id}'>Combot AntiSpam.</a>",
|
||||||
|
"spamwatch_msg": "<b>#SpamWatch Federation Ban</b>\nUser {umention} [<code>{uid}</code>] has been banned for <code>{reas}</code>.\n" ,
|
||||||
|
"welcpic_msg": "Welcome {userr} [{id}]"
|
||||||
|
}
|
||||||
1
locales/en-US/help_menu.json
Normal file
1
locales/en-US/help_menu.json
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{}
|
||||||
5
locales/en-US/lang_setting.json
Normal file
5
locales/en-US/lang_setting.json
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
"language_changed_successfully": "The language has been changed successfully.",
|
||||||
|
"language_changer_chat": "Here you can change the language used for the bot throughout the chat.\nIf your language is not listed here and you would like to contribute, you can open issue in my github repo.",
|
||||||
|
"language_changer_private": "Here you can change the language used for the bot in this private chat.\n\nIf you want to change the language of your group, please run the command <code>/setchatlang</code> on it.\nIf your language is not listed here and you would like to contribute, you can open issue in my github repo."
|
||||||
|
}
|
||||||
4
locales/en-US/main.json
Normal file
4
locales/en-US/main.json
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
"language_name": "English",
|
||||||
|
"language_flag": "🇬🇧"
|
||||||
|
}
|
||||||
15
locales/en-US/media_extractor.json
Normal file
15
locales/en-US/media_extractor.json
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
{
|
||||||
|
"sub_extr_help": "Please use command /{cmd} [link] to check subtitles or audio in video file.",
|
||||||
|
"conv_sub_help": "Use command /{cmd} by reply to .ass or .vtt file, to convert subtitle from .ass or .vtt to srt.",
|
||||||
|
"progress_str": "⏳ Processing your request..",
|
||||||
|
"convert_str": "⏳ Converting...",
|
||||||
|
"unauth_cb": "⚠️ Access Denied!",
|
||||||
|
"cancel_btn": "❌ Cancel",
|
||||||
|
"invalid_cb": "⚠️ DONT DELETE YOUR MESSAGE!",
|
||||||
|
"up_str": "Uploading files..",
|
||||||
|
"press_btn_msg": "Press the button below to extract subtitles/audio. Only support direct link at this time.\nProcessed in {timelog}",
|
||||||
|
"fail_extr_media": "Failed extract media, make sure your link is not protected by WAF or maybe inaccessible for bot.",
|
||||||
|
"fail_extr_sub": "Failed extract sub, Maybe unsupported format..\n\nLink: {link}\nERR: {e}",
|
||||||
|
"capt_extr_sub": "<b>Filename:</b> <code>{nf}</code>\n\nExtracted by @{bot} in {timelog}",
|
||||||
|
"capt_conv_sub": "<code>{nf}.srt</code>\n\nConverted by @{bot}"
|
||||||
|
}
|
||||||
11
locales/en-US/mediainfo.json
Normal file
11
locales/en-US/mediainfo.json
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
{
|
||||||
|
"processing_text": "`Processing, total time is based on the size of your files...`",
|
||||||
|
"wait_msg": "`Please wait a moment...`",
|
||||||
|
"err_link": "It looks like the link you sent is invalid, make sure it's a direct link and can be downloaded.",
|
||||||
|
"media_invalid": "Please reply to valid media.",
|
||||||
|
"dl_limit_exceeded": "Sorry, download limited to 2GB to reduce flood. You can convert your files to link.",
|
||||||
|
"dl_args_text": "Trying to download..",
|
||||||
|
"mediainfo_help": "Use the command /{cmd} [link], or reply to telegram media with /{cmd}.",
|
||||||
|
"capt_media": "ℹ️ Your mediainfo results..\n\n**Request By:** {ment}",
|
||||||
|
"viweb": "💬 Open on Web"
|
||||||
|
}
|
||||||
17
locales/en-US/nightmodev2.json
Normal file
17
locales/en-US/nightmodev2.json
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
{
|
||||||
|
"nmd_disabled": "Nightmode disabled.",
|
||||||
|
"nmd_not_enabled": "Nightmode isn't enabled in this chat.",
|
||||||
|
"invalid_time_format": "Invalid time format. Use HH:MM format.",
|
||||||
|
"invalid_lockdur": "Invalid time duration. Use proper format.\nExample: 6h (for 6 hours), 10m for 10 minutes.",
|
||||||
|
"schedule_already_on": "Already a schedule is running in this chat. Disable it using `-d` flag.",
|
||||||
|
"nmd_enable_success": "Successfully enabled nightmode in this chat.\nGroup will be locked at {st} and will be opened after {lockdur} everyday.",
|
||||||
|
"nmd_cb": "🔖 Hai, Aku {bname} dibuat menggunakan Framework Pyrogram v{ver} dan Python v{pyver}.\n\nMau buat bot seperti ini? Yuuk belajar di @botindonesia\nOwner: @YasirArisM",
|
||||||
|
"nmd_off_not_admin": "#NIGHTMODE_FAIL\nFailed to turn off nightmode at `{chat_id}`, since {bname} is not an admin in chat `{chat_id}`",
|
||||||
|
"nmd_off_not_present": "#NIGHTMODE_FAIL\nFailed to turn off nightmode at `{chat_id}`, since {bname} is not present in chat `{chat_id}`. Removed group from list.",
|
||||||
|
"nmd_off_err": "#NIGHTMODE_FAIL\nFailed to turn off nightmode at `{chat_id}`\nERROR: `{e}`",
|
||||||
|
"nmd_off_success": "#NIGHTMODE_HANDLER\n📆 {dt}\n\n☀️ Group is Opening.\nWill be closed at {close_at}",
|
||||||
|
"nmd_on_not_admin": "#NIGHTMODE_FAIL\nFailed to enable nightmode at `{chat_id}`, since {bname} is not an admin in chat `{chat_id}`",
|
||||||
|
"nmd_on_not_present": "#NIGHTMODE_FAIL\nFailed to enable nightmode at `{chat_id}`, since {bname} is not present in chat `{chat_id}`. Removed group from list.",
|
||||||
|
"nmd_on_err": "#NIGHTMODE_FAIL\nFailed to enable nightmode at `{chat_id}`\nERROR: `{e}`",
|
||||||
|
"nmd_on_success": "#NIGHTMODE_HANDLER\n📆 {dt}\n\n🌗 Group is closing.\nWill be opened at {open_at}"
|
||||||
|
}
|
||||||
6
locales/en-US/ocr.json
Normal file
6
locales/en-US/ocr.json
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"no_photo": "Reply photo with /{cmd} command to scan text from images.",
|
||||||
|
"read_ocr": "Scanning your images..",
|
||||||
|
"result_ocr": "Hasil OCR:\n<code>{result}</code>",
|
||||||
|
"ocr_helper": "/ocr [reply to photo] - Read Text From Image"
|
||||||
|
}
|
||||||
13
locales/en-US/sangmata.json
Normal file
13
locales/en-US/sangmata.json
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"no_uname": "<code>No Username</code>",
|
||||||
|
"no_last_name": "<code>No Last Name</code>",
|
||||||
|
"uname_change_msg": "✨ Changed username from {bef} ➡️ {aft}.\n",
|
||||||
|
"lastname_change_msg": "✨ Changed last name from {bef} ➡️ {aft}.\n",
|
||||||
|
"firstname_change_msg": "✨ Changed first name from {bef} ➡️ {aft}.\n",
|
||||||
|
"set_sangmata_help": "Use <code>/{cmd} on</code>, to enable sangmata. If you want disable, you can use off parameter.",
|
||||||
|
"sangmata_already_on": "SangMata already enabled in your groups.",
|
||||||
|
"sangmata_enabled": "Sangmata enabled in your groups.",
|
||||||
|
"sangmata_already_off": "SangMata already disabled in your groups.",
|
||||||
|
"sangmata_disabled": "Sangmata disabled in your groups.",
|
||||||
|
"wrong_param": "Unknown parameter, use only on/off parameter."
|
||||||
|
}
|
||||||
11
locales/en-US/start_help.json
Normal file
11
locales/en-US/start_help.json
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
{
|
||||||
|
"newgroup_log": "#NewGroup\nGroup = {jdl}(<code>{id}</code>)\nMembers Count = <code>{c}</code>",
|
||||||
|
"newuser_log": "#NewUser\nID - <code>{id}</code>\nName - {nm}",
|
||||||
|
"help_name": "Here is the help for **{mod}**:\n",
|
||||||
|
"help_txt": "Hello {kamuh}, My name is {bot}.\nI'm a pyrogram bot that developed by kind owner with some useful features.\nYou can look by clicking a button below.\n\nGeneral command are:\n - /start: Start the bot\n - /help: Give this message\n - /setlang: Change bot language [BETA]",
|
||||||
|
"click_me": "Click Me",
|
||||||
|
"back_btn": "Back",
|
||||||
|
"click_btn": "Click on the below button to get help about {nm}",
|
||||||
|
"pm_detail": "PM Me For More Details.",
|
||||||
|
"start_msg": "Hi {kamuh}, PM me to know about all my features. You can change bot language in bot using /setlang command but it's still in beta stage."
|
||||||
|
}
|
||||||
19
locales/en-US/stickers.json
Normal file
19
locales/en-US/stickers.json
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
{
|
||||||
|
"no_anim_stick": "Animated sticker is not supported!",
|
||||||
|
"not_sticker": "This is not a sticker!",
|
||||||
|
"unkang_msg": "Trying to remove from pack..",
|
||||||
|
"unkang_success": "Sticker has been removed from your pack",
|
||||||
|
"unkang_error": "Failed remove sticker from your pack.\n\nERR: {e}",
|
||||||
|
"unkang_help": "Please reply sticker that created by {c} to remove sticker from your pack.",
|
||||||
|
"anon_warn": "You are anon admin, kang stickers in my pm.",
|
||||||
|
"kang_msg": "Trying to steal your sticker...",
|
||||||
|
"stick_no_name": "The sticker has no name.",
|
||||||
|
"kang_help": "Want me to guess the sticker? Please tag a sticker.",
|
||||||
|
"exist_pack": "<code>Using existing sticker pack...</code>",
|
||||||
|
"new_packs": "<b>Creating a new sticker pack...</b>",
|
||||||
|
"please_start_msg": "It looks like you've never interacted with me in private chat, you need to do that first..",
|
||||||
|
"click_me": "Click Me",
|
||||||
|
"pack_full": "Your Sticker Pack is full if your pack is not in v1 Type /kang 1, if it is not in v2 Type /kang 2 and so on.",
|
||||||
|
"viewpack": "👀 View Your Pack",
|
||||||
|
"kang_success": "<b>Sticker successfully stolen!</b>\n<b>Emoji:</b> {emot}"
|
||||||
|
}
|
||||||
20
locales/en-US/web_scraper.json
Normal file
20
locales/en-US/web_scraper.json
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
{
|
||||||
|
"no_result": "Sorry, i couldn't find any results!",
|
||||||
|
"no_result_w_query": "Sorry, i could not find query: {kueri}",
|
||||||
|
"get_data": "⏳ Please wait, getting data from web..",
|
||||||
|
"cl_btn": "❌ Close",
|
||||||
|
"back_btn": "↩️ Back",
|
||||||
|
"dl_text": "⬇️ Download",
|
||||||
|
"cat_text": "Category",
|
||||||
|
"quality": "Quality",
|
||||||
|
"ex_data": "👇 Extract Data ",
|
||||||
|
"unauth": "This button is not for you..",
|
||||||
|
"invalid_cb": "Invalid callback data, please send command again..",
|
||||||
|
"res_scrape": "<b>Scrape result from</b> <code>{link}</code>:\n\n{kl}",
|
||||||
|
"header_with_query": "<b>#{web} Results For:</b> <code>{kueri}</code>\n\n",
|
||||||
|
"header_no_query": "<b>#{web} Latest:</b>\n🌀 Use /{cmd} [title] to start search with title.\n\n",
|
||||||
|
"invalid_cmd_scrape": "Use command /{cmd} <b>[link]</b> to scrape download link.",
|
||||||
|
"err_getweb": "ERROR: Failed getting data from web because {err}.",
|
||||||
|
"err_getapi": "ERROR: Failed getting data from API",
|
||||||
|
"unsupport_dl_btn": "Some result will not appear in extract button because unsupported link."
|
||||||
|
}
|
||||||
6
locales/en-US/webss.json
Normal file
6
locales/en-US/webss.json
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"no_url": "Give A Url To Fetch Screenshot.",
|
||||||
|
"wait_str": "Capturing screenshot...",
|
||||||
|
"str_credit": "🌞 Screenshot generated using Puppeteer",
|
||||||
|
"ss_failed_str": "Failed To Take Screenshot. {err}"
|
||||||
|
}
|
||||||
14
locales/en-US/ytdl_plugins.json
Normal file
14
locales/en-US/ytdl_plugins.json
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
{
|
||||||
|
"no_channel": "This feature not supported for channel or anonymous user.",
|
||||||
|
"no_query": "Please input a query..!",
|
||||||
|
"no_res": "No result found for `{kweri}`",
|
||||||
|
"dl_btn": "Download",
|
||||||
|
"back": "Back",
|
||||||
|
"yts_msg": "Published {pub}\n\n<b>❯ Duration:</b> {dur}\n<b>❯ Views:</b> {vi}\n<b>❯ Uploader:</b> <a href='{clink}'>{cname}</a>\n\n",
|
||||||
|
"invalid_link": "Please input a valid YT-DLP Supported URL",
|
||||||
|
"err_parse": "Failed parse URL, check logs..",
|
||||||
|
"wait": "Please wait..",
|
||||||
|
"unauth": "Not Your Task..",
|
||||||
|
"endlist": "That's the end of list",
|
||||||
|
"vip-btn": "Because some user abuse and my server cannot handle it, best video now only for bot owner."
|
||||||
|
}
|
||||||
68
locales/id-ID/admin.json
Normal file
68
locales/id-ID/admin.json
Normal file
|
|
@ -0,0 +1,68 @@
|
||||||
|
{
|
||||||
|
"no_admin_error": "Anda harus menjadi administrator untuk menggunakan perintah ini.",
|
||||||
|
"no_permission_error": "Maaf, tapi anda tidak memiliki izin yang diperlukan untuk menjalankan perintah ini. Izin yang hilang: {permissions}",
|
||||||
|
"private_not_allowed": "Perintah ini tidak dapat digunakan dalam obrolan pribadi, Jika anda membutuhkan bantuan, mohon gunakan perintah /help.",
|
||||||
|
"purge_no_reply": "Balas ke pesan yang ingin dihapus.",
|
||||||
|
"delete_no_reply": "Balas Pesan Untuk Menghapusnya",
|
||||||
|
"pin_no_reply": "Balas pesan untuk menyematkan/melepas pin.",
|
||||||
|
"report_no_reply": "Balas Pesan Untuk Melaporkan Pengguna Itu.",
|
||||||
|
"no_delete_perm": "Tolong beri saya izin untuk menghapus pesan.",
|
||||||
|
"purge_success": "Berhasil menghapus {del_total} pesan..",
|
||||||
|
"user_not_found": "Saya tidak dapat menemukan pengguna itu.",
|
||||||
|
"invalid_id_uname": "⚠️ ID pengguna/nama pengguna salah",
|
||||||
|
"kick_self_err": "Saya tidak dapat menendang diri sendiri, saya dapat pergi jika Anda mau.",
|
||||||
|
"ban_self_err": "Saya tidak dapat melarang diri saya sendiri, saya dapat pergi jika Anda mau.",
|
||||||
|
"report_self_err": "Mengapa Anda melaporkan diri sendiri?",
|
||||||
|
"demote_self_err": "Saya tidak dapat menurunkan keanggotaan diri saya sendiri.",
|
||||||
|
"warn_self_err": "Saya tidak dapat memperingatkan diri sendiri.",
|
||||||
|
"mute_self_err": "Saya tidak dapat membisukan diri sendiri.",
|
||||||
|
"kick_sudo_err": "Wow, Anda ingin menendang pemilik saya yang spesial?",
|
||||||
|
"ban_sudo_err": "Wow, Anda ingin mencoba membanned pemilik saya?",
|
||||||
|
"demote_sudo_err": "Wow, Anda ingin mencoba mendemote pemilik saya?",
|
||||||
|
"warn_sudo_err": "Wow, Anda ingin mencoba memberi peringatan kepada pemilik saya?",
|
||||||
|
"mute_sudo_err": "Wow, Anda ingin mencoba membisukan pemilik saya?",
|
||||||
|
"kick_admin_err": "Hah, sungguh gila jika saya bisa menendang seorang admin.",
|
||||||
|
"ban_admin_err": "Hah, sungguh gila jika saya bisa melarang seorang admin.",
|
||||||
|
"mute_admin_err": "Hah, sungguh gila jika saya bisa membisukan admin.",
|
||||||
|
"warn_admin_err": "Hah, sungguh gila jika saya bisa memperingatkan seorang admin.",
|
||||||
|
"kick_msg": "**Pengguna yang Ditendang:** {mention} [`{id}`]\n**Ditendang Oleh:** {kicker}\n**Alasan:** {reasonmsg}",
|
||||||
|
"ban_msg": "**Pengguna yang Dibanned:** {mention} [`{id}`]\n**Dibanned Oleh:** {banner}\n",
|
||||||
|
"unban_msg": "__Banned dihapus oleh {mention}__",
|
||||||
|
"no_ban_permission": "Tolong beri saya izin banned untuk membanned pengguna di grup ini.",
|
||||||
|
"no_more_99": "Anda tidak dapat menggunakan lebih dari 99",
|
||||||
|
"banned_time": "**Dilarang Untuk:** {val}\n",
|
||||||
|
"muted_time": "**Dimute Untuk:** {val}\n",
|
||||||
|
"banned_reason": "**Alasan:** {reas}",
|
||||||
|
"unban_channel_err": "Anda tidak dapat membatalkan pemblokiran saluran",
|
||||||
|
"give_unban_user": "Berikan nama pengguna atau balas pesan pengguna untuk membatalkan banned.",
|
||||||
|
"unban_success": "Berhasil membatalkan pemblokiran {umention}!",
|
||||||
|
"give_idban_with_msg_link": "Berikan userid/nama pengguna beserta tautan pesan dan alasan pelarangan daftar",
|
||||||
|
"give_idunban_with_msg_link": "Berikan userid/nama pengguna beserta tautan pesan dan alasan untuk membatalkan larangan",
|
||||||
|
"give_reason_list_ban": "Anda harus memberikan alasan untuk melarang daftar",
|
||||||
|
"Invalid_tg_link": "Tautan pesan yang diberikan tidak valid",
|
||||||
|
"multiple_ban_progress": "`Melarang Pengguna dari banyak grup. Ini mungkin membutuhkan waktu`",
|
||||||
|
"multiple_unban_progress": "`Membatalkan pencekalan Pengguna dari banyak grup. Ini mungkin membutuhkan waktu`",
|
||||||
|
"failed_get_uname": "Tidak dapat memperoleh nama pengguna grup",
|
||||||
|
"listban_msg": "**Pengguna yang Dilarang Daftar:** {mention}\n**ID Pengguna yang Dilarang:** `{uid}`\n**Admin:** {frus}\n**Obrolan yang terpengaruh: ** `{ct}`\n**Alasan:** {reas}",
|
||||||
|
"listunban_msg": "**Pengguna yang Tidak Dilarang Daftar:** {mention}\n**ID Pengguna yang Tidak Dilarang:** `{uid}`\n**Admin:** {frus}\n**Obrolan yang terpengaruh: ** `{ct}`\n**Alasan:** {reas}",
|
||||||
|
"promote_self_err": "Saya tidak dapat mempromosikan diri saya sendiri.",
|
||||||
|
"no_promote_perm": "Sayangnya, saya tidak mengizinkan untuk mempromosikan pengguna.",
|
||||||
|
"full_promote": "Dipromosikan Sepenuhnya {umention}!",
|
||||||
|
"normal_promote": "Dipromosikan {umention}!",
|
||||||
|
"pin_success": "**Pesan [ini]({link}) berhasil disematkan.**",
|
||||||
|
"unpin_success": "**Pesan sematan [ini]({link}) berhasil dilepas.**",
|
||||||
|
"pin_no_perm": "Tolong beri saya izin pin untuk menggunakan perintah ini!.",
|
||||||
|
"report_msg": "Melaporkan {user_mention} ke admin!",
|
||||||
|
"reported_is_admin": "Apakah Anda tahu bahwa pengguna yang Anda balas adalah seorang admin?",
|
||||||
|
"user_no_warn": "Pengguna {mention} tidak memiliki peringatan.",
|
||||||
|
"ch_warn_msg": "Pengguna {mention} memiliki {warns}/3 peringatan.",
|
||||||
|
"warn_msg": "**Pengguna yang Diperingatkan:** {mention}\n**Diperingatkan Oleh:** {warner}\n**Alasan:** {reas}\n**Peringatan:** {twarn}/ 3",
|
||||||
|
"rmwarn_msg": "Peringatan {mention} telah dihapus.",
|
||||||
|
"unwarn_msg": "Peringatan dihapus oleh {mention}.",
|
||||||
|
"rmmute_msg": "__Bisukan dihapus oleh {mention}__",
|
||||||
|
"unmute_msg": "Disuarakan! {umention}",
|
||||||
|
"reply_to_rm_warn": "Balas pesan untuk menghapus peringatan pengguna.",
|
||||||
|
"exceed_warn_msg": "Jumlah peringatan dari {mention} terlampaui, DILARANG!",
|
||||||
|
"mute_msg": "**Pengguna yang Dimute:** {mention}\n**Dimute Oleh:** {muter}\n",
|
||||||
|
"rm_warn_btn": "🚨 Hapus Peringatan 🚨"
|
||||||
|
}
|
||||||
13
locales/id-ID/afk.json
Normal file
13
locales/id-ID/afk.json
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"no_channel": "Fitur ini tidak didukung untuk channel.",
|
||||||
|
"on_afk_msg_no_r": "**{usr}** [<code>{id}</code>] kembali online dan telah AFK selama {tm}\n\n",
|
||||||
|
"on_afk_msg_with_r": "**{usr}** [<code>{id}</code>] kembali online dan telah AFK selama {tm}\n\n**Alasan:** `{reas}`\n\n",
|
||||||
|
"is_afk_msg_no_r": "**{usr}** [<code>{id}</code>] telah AFK sejak {tm} yang lalu.\n\n",
|
||||||
|
"is_afk_msg_with_r": "**{usr}** [<code>{id}</code>] telah AFK sejak {tm} yang lalu.\n\n**Alasan:** {reas}\n\n" ,
|
||||||
|
"is_online": "**{usr}** [<code>{id}</code>] kembali online",
|
||||||
|
"now_afk": "{usr} [<code>{id}</code>] sekarang AFK!.",
|
||||||
|
"afkdel_help": "**Penggunaan:**\n/{cmd} [ENABLE|DISABLE] untuk mengaktifkan atau menonaktifkan hapus pesan AFK secara otomatis.",
|
||||||
|
"afkdel_disable": "Penghapusan otomatis pesan AFK dinonaktifkan.",
|
||||||
|
"afkdel_enable": "Penghapusan otomatis pesan AFK di obrolan ini diaktifkan.",
|
||||||
|
"is_afk": "{usr} [<code>{id}</code>] sedang AFK!."
|
||||||
|
}
|
||||||
6
locales/id-ID/chatbot_ai.json
Normal file
6
locales/id-ID/chatbot_ai.json
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"no_question": "Harap gunakan perintah <code>/{cmd} [question]</code> untuk mengajukan pertanyaan Anda menggunakan AI.",
|
||||||
|
"find_answers_str": "Sedang mencari jawaban terbaik buat Anda..",
|
||||||
|
"dont_spam": "Tolong jangan melakukan spam, harap tunggu {tm} detik atau saya akan membanned Anda dari bot ini.",
|
||||||
|
"answers_too_long": "Pertanyaan untuk jawaban Anda telah melampaui batas teks TG, periksa tautan ini untuk melihatnya.\n\n{answerlink}"
|
||||||
|
}
|
||||||
11
locales/id-ID/dev.json
Normal file
11
locales/id-ID/dev.json
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
{
|
||||||
|
"already_up": "Sudah paling update!",
|
||||||
|
"up_and_rest": "<b>Diperbarui dengan branch default, dimulai ulang sekarang.</b>",
|
||||||
|
"cl_btn": "❌ Tutup",
|
||||||
|
"no_eval": "__Tidak ada pesan eval!__",
|
||||||
|
"run_eval": "<i>Memproses pyrogram eval..</i>",
|
||||||
|
"run_exec": "<i>Memproses pyrogram eksekutif..</i>",
|
||||||
|
"no_cmd": "Tidak ada perintah untuk dieksekusi.",
|
||||||
|
"sukses": "Sukses",
|
||||||
|
"no_reply": "Tidak ada balasan"
|
||||||
|
}
|
||||||
3
locales/id-ID/fun.json
Normal file
3
locales/id-ID/fun.json
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"result": "🎲 Dadu berhenti di angka: {number}"
|
||||||
|
}
|
||||||
6
locales/id-ID/general.json
Normal file
6
locales/id-ID/general.json
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"back_btn": "« Kembali",
|
||||||
|
"unknown_id": "Maaf saya tidak bisa mengenali pengguna ini. Mungkin saya belum pernah bertemu dengannya.",
|
||||||
|
"no_results": "Tidak ada hasil yang ditemukan.",
|
||||||
|
"exp_task": "😶🌫️ Waktu Habis. Tugas Telah Dibatalkan!"
|
||||||
|
}
|
||||||
13
locales/id-ID/genss.json
Normal file
13
locales/id-ID/genss.json
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"wait_msg": "Beri saya waktu untuk memproses permintaan Anda!! 😴",
|
||||||
|
"wait_dl": "<code>Sedang diproses, harap tunggu..</code>",
|
||||||
|
"dl_progress": "Mencoba mengunduh, harap tunggu..",
|
||||||
|
"up_progress": "Mencoba mengunggah...",
|
||||||
|
"success_dl_msg": "Berkas telah diunduh ke <code>{path}</code>.",
|
||||||
|
"fail_open": "😟 Maaf! Saya tidak dapat membuka file.",
|
||||||
|
"limit_dl": "Maaf, unduh terbatas hingga 2GB untuk mengurangi flood. Anda dapat mengkonversi file Anda menjadi tautan.",
|
||||||
|
"err_ssgen": "Pembuatan screenshot gagal.\n\n{exc}",
|
||||||
|
"up_msg": "☑️ Pembuatan screenshot berhasil.\n\n{namma} (<code>{id}</code>)\n#️⃣ #ssgen #id{id}\n\nSS Dibuat oleh @{bot_uname} ",
|
||||||
|
"no_reply": "Balas video atau dokumen Telegram atau gunakan tautan langsung setelah perintah untuk membuat screenshot dari media!",
|
||||||
|
"choose_no_ss": "Sekarang pilih berapa hasil screenshot? 🥳.\n\nTotal durasi: `{td}` (`{dur} detik`)"
|
||||||
|
}
|
||||||
13
locales/id-ID/grup_tools.json
Normal file
13
locales/id-ID/grup_tools.json
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"sudo_join_msg": "Waw, Pemilikku yang keren baru saja bergabung ke grup!",
|
||||||
|
"log_bot_added": "#GrupBaru\nGrup = {ttl}(<code>{cid}</code>)\nJumlah Anggota = <code>{tot}</code>\nDitambahkan oleh - {r_j}",
|
||||||
|
"support_btn": "Dukungan",
|
||||||
|
"help_btn": "ℹ️ Bantuan",
|
||||||
|
"update_btn": "📢 Updates",
|
||||||
|
"chat_not_allowed": "<b>CHAT TIDAK DIIJINKAN 🐞\n\nPemilik saya sudah melarang saya untuk bekerja disini! Kamu bisa menghubungi pemilik bot ini..</b>",
|
||||||
|
"welcome_thanks": "<b>Terimakasih sudah menambahkan saya di {ttl} ❣️\n\nJika ada kendala atau saran bisa kontak ke saya.</b>",
|
||||||
|
"capt_welc": "Hai {umention} [<code>{uid}</code>], Selamat datang digrup {ttl}.",
|
||||||
|
"combot_msg": "<b>#CAS Federation Ban</b>\nPengguna {umention} [<code>{uid}</code>] terdeteksi sebagai spambot dan telah dikeluarkan. Powered by <a href='https://api.cas.chat/check?user_id={u.id}'>Combot AntiSpam.</a>",
|
||||||
|
"spamwatch_msg": "<b>#SpamWatch Federation Ban</b>\nPengguna {umention} [<code>{uid}</code>] telah dikeluarkan karena <code>{reas}</code>.\n",
|
||||||
|
"welcpic_msg": "Selamat Datang {userr} [{id}]"
|
||||||
|
}
|
||||||
1
locales/id-ID/help_menu.json
Normal file
1
locales/id-ID/help_menu.json
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{}
|
||||||
5
locales/id-ID/lang_setting.json
Normal file
5
locales/id-ID/lang_setting.json
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
"language_changed_successfully": "Bahasa telah berhasil diubah.",
|
||||||
|
"language_changer_chat": "Di sini Anda dapat mengubah bahasa yang digunakan bot selama obrolan.\nJika bahasa Anda tidak ada di sini dan Anda ingin berkontribusi, Anda dapat membuka masalah di github saya. .",
|
||||||
|
"language_changer_private": "Di sini Anda dapat mengubah bahasa yang digunakan oleh bot dalam obrolan pribadi ini.\n\nJika Anda ingin mengubah bahasa grup Anda, buka perintah <code>/setchatlang</code>. \nJika bahasa Anda tidak ada di sini dan Anda ingin berkontribusi, buka repo misskaty di github."
|
||||||
|
}
|
||||||
4
locales/id-ID/main.json
Normal file
4
locales/id-ID/main.json
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
"language_name": "Indonesia",
|
||||||
|
"language_flag": "🇮🇩"
|
||||||
|
}
|
||||||
15
locales/id-ID/media_extractor.json
Normal file
15
locales/id-ID/media_extractor.json
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
{
|
||||||
|
"sub_extr_help": "Harap gunakan perintah /{cmd} [tautan] untuk memeriksa teks film atau audio dalam berkas video.",
|
||||||
|
"conv_sub_help": "Gunakan perintah /{cmd} dengan membalas berkas .ass atau .vtt, untuk mengonversi teks film dari .ass atau .vtt ke srt.",
|
||||||
|
"progress_str": "⏳ Memproses permintaan Anda..",
|
||||||
|
"convert_str": "⏳ Mengkonversi...",
|
||||||
|
"unauth_cb": "⚠️ Akses Ditolak!",
|
||||||
|
"batal_btn": "❌ Batal",
|
||||||
|
"invalid_cb": "⚠️ JANGAN HAPUS PESAN ANDA!",
|
||||||
|
"up_str": "Mengunggah berkas..",
|
||||||
|
"press_btn_msg": "Tekan tombol di bawah untuk mengekstrak teks/audio. Saat ini hanya mendukung tautan langsung.\nDiproses dalam {timelog}",
|
||||||
|
"fail_extr_media": "Gagal mengekstrak media, pastikan tautan Anda tidak dilindungi oleh WAF atau mungkin tidak dapat diakses oleh bot.",
|
||||||
|
"fail_extr_sub": "Sub ekstrak gagal, Mungkin formatnya tidak didukung..\n\nTautan: {link}\nERR: {e}",
|
||||||
|
"capt_extr_sub": "<b>Nama file:</b> <kode>{nf}</code>\n\nDiekstrak oleh @{bot} dalam {timelog}",
|
||||||
|
"capt_conv_sub": "<code>{nf}.srt</code>\n\nDikonversi oleh @{bot}"
|
||||||
|
}
|
||||||
11
locales/id-ID/mediainfo.json
Normal file
11
locales/id-ID/mediainfo.json
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
{
|
||||||
|
"processing_text": "`Memproses, total waktu didasarkan pada ukuran file Anda...`",
|
||||||
|
"wait_msg": "`Mohon tunggu sementara...`",
|
||||||
|
"err_link": "Sepertinya tautan yang Anda kirim tidak valid, pastikan tautan langsung dan bisa di unduh.",
|
||||||
|
"media_invalid": "Silakan balas ke media yang valid.",
|
||||||
|
"dl_limit_exceeded": "Maaf, unduh dibatasi hingga 2GB untuk mengurangi flood. Anda dapat mengonversi berkas Anda menjadi tautan.",
|
||||||
|
"dl_args_text": "Mencoba mengunduh..",
|
||||||
|
"mediainfo_help": "Gunakan perintah /{cmd} [tautan], atau balas telegram media dengan /{cmd}.",
|
||||||
|
"capt_media": "ℹ️ Hasil mediainfo anda..\n\n**Diminta Oleh:** {ment}",
|
||||||
|
"viweb": "💬 Buka di Web"
|
||||||
|
}
|
||||||
17
locales/id-ID/nightmodev2.json
Normal file
17
locales/id-ID/nightmodev2.json
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
{
|
||||||
|
"nmd_disabled": "Mode malam dinonaktifkan.",
|
||||||
|
"nmd_not_enabled": "Mode malam tidak diaktifkan di obrolan ini.",
|
||||||
|
"invalid_time_format": "Format waktu tidak sah. Gunakan format HH:MM.",
|
||||||
|
"invalid_lockdur": "Durasi waktu tidak valid. Gunakan format yang tepat.\nContoh: 6j (selama 6 jam), 10m selama 10 menit.",
|
||||||
|
"schedule_already_on": "Sudah ada jadwal yang berjalan di obrolan ini. Nonaktifkan menggunakan tanda `-d`.",
|
||||||
|
"nmd_enable_success": "Berhasil mengaktifkan mode malam dalam obrolan ini.\nGrup akan dikunci pada {st} dan akan dibuka setelah {lockdur} setiap hari.",
|
||||||
|
"nmd_cb": "🔖 Hai, Saya {bname} dibuat menggunakan Framework Pyrogram v{ver} dan Python v{pyver}.\n\nMau buat bot seperti ini? Yuuk belajar di @botindonesia\nOwner: @YasirArisM",
|
||||||
|
"nmd_off_not_admin": "#NIGHTMODE_FAIL\nGagal mematikan mode malam di `{chat_id}`, karena {bname} bukan admin di obrolan `{chat_id}`",
|
||||||
|
"nmd_off_not_present": "#NIGHTMODE_FAIL\nGagal mematikan mode malam di `{chat_id}`, karena {bname} tidak ada di obrolan `{chat_id}`. Menghapus grup dari daftar.",
|
||||||
|
"nmd_off_err": "#NIGHTMODE_FAIL\nGagal mematikan mode malam di `{chat_id}`\nERROR: `{e}`",
|
||||||
|
"nmd_off_success": "#NIGHTMODE_HANDLER\n📆 {dt}\n\n☀️ Grup sedang dibuka.\nAkan ditutup pada {close_at}",
|
||||||
|
"nmd_on_not_admin": "#NIGHTMODE_FAIL\nGagal mengaktifkan mode malam di `{chat_id}`, karena {bname} bukan admin di obrolan `{chat_id}`",
|
||||||
|
"nmd_on_not_present": "#NIGHTMODE_FAIL\nGagal mengaktifkan mode malam di `{chat_id}`, karena {bname} tidak ada di obrolan `{chat_id}`. Grup dihapus dari daftar.",
|
||||||
|
"nmd_on_err": "#NIGHTMODE_FAIL\nGagal mengaktifkan mode malam di `{chat_id}`\nERROR: `{e}`",
|
||||||
|
"nmd_on_success": "#NIGHTMODE_HANDLER\n📆 {dt}\n\n🌗 Grup ditutup.\nAkan dibuka pada {open_at}"
|
||||||
|
}
|
||||||
6
locales/id-ID/ocr.json
Normal file
6
locales/id-ID/ocr.json
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"no_photo": "Balas foto dengan perintah /{cmd} untuk memindai teks dari gambar.",
|
||||||
|
"read_ocr": "Memindai gambar Anda..",
|
||||||
|
"result_ocr": "Hasil OCR:\n<code>{result}</code>",
|
||||||
|
"ocr_helper": "/ocr [balas ke foto] - Baca Teks Dari Gambar"
|
||||||
|
}
|
||||||
13
locales/id-ID/sangmata.json
Normal file
13
locales/id-ID/sangmata.json
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"no_uname": "<code>Tanpa Username</code>",
|
||||||
|
"no_last_name": "<code>Tanpa Nama Belakang</code>",
|
||||||
|
"uname_change_msg": "✨ Mengubah username dari {bef} ➡️ {aft}.\n",
|
||||||
|
"lastname_change_msg": "✨ Mengubah nama belakang dari {bef} ➡️ {aft}.\n",
|
||||||
|
"firstname_change_msg": "✨ Mengubah nama depan dari {bef} ➡️ {aft}.\n",
|
||||||
|
"set_sangmata_help": "Gunakan <code>/{cmd} on</code>, untuk mengaktifkan sangmata. Jika Anda ingin menonaktifkan, Anda dapat menggunakan parameter off.",
|
||||||
|
"sangmata_already_on": "SangMata telah diaktifkan di grup Anda.",
|
||||||
|
"sangmata_enabled": "Sangmata diaktifkan di grup Anda.",
|
||||||
|
"sangmata_already_off": "SangMata telah dinonaktifkan di grup Anda.",
|
||||||
|
"sangmata_disabled": "Sangmata dinonaktifkan di grup Anda.",
|
||||||
|
"wrong_param": "Parameter tidak diketahui, gunakan hanya parameter hidup/mati."
|
||||||
|
}
|
||||||
11
locales/id-ID/start_help.json
Normal file
11
locales/id-ID/start_help.json
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
{
|
||||||
|
"newgroup_log": "#NewGroup\nGroup = {jdl}(<code>{id}</code>)\nJumlah Anggota = <code>{c}</code>",
|
||||||
|
"newuser_log": "#PenggunaBaru\nID - <code>{id}</code>\nNama - {nm}",
|
||||||
|
"help_name": "Ini bantuan untuk **{mod}**:\n",
|
||||||
|
"help_txt": "Halo {kamuh}, Nama saya {bot}.\nSaya adalah bot pyrogram yang dikembangkan oleh pemilik yang baik hati dengan beberapa fitur berguna.\nAnda dapat melihat dengan mengeklik tombol di bawah.\n\nPerintah umum adalah :\n - /start: Mulai bot\n - /help: Berikan pesan ini\n - /setlang: Ubah bahasa bot [BETA]",
|
||||||
|
"click_me": "Klik Saya",
|
||||||
|
"back_btn": "Kembali",
|
||||||
|
"click_btn": "Klik tombol di bawah untuk mendapatkan bantuan tentang {nm}",
|
||||||
|
"pm_detail": "PM Saya Untuk Detail Lebih Lanjut.",
|
||||||
|
"start_msg": "Hai {kamuh}, PM saya untuk mengetahui semua fitur saya. Anda dapat mengubah bahasa bot di bot menggunakan perintah /setlang tetapi ini masih dalam tahap beta."
|
||||||
|
}
|
||||||
19
locales/id-ID/stickers.json
Normal file
19
locales/id-ID/stickers.json
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
{
|
||||||
|
"no_anim_stick": "Stiker animasi tidak didukung!",
|
||||||
|
"not_sticker": "Ini bukan stiker!",
|
||||||
|
"unkang_msg": "Mencoba menghapus dari paket..",
|
||||||
|
"unkang_success": "Stiker telah dihapus dari paket Anda",
|
||||||
|
"unkang_error": "Gagal menghapus stiker dari paket Anda.\n\nERR: {e}",
|
||||||
|
"unkang_help": "Tolong balas stiker yang dibuat oleh {c} untuk menghapus stiker dari paket Anda.",
|
||||||
|
"anon_warn": "Anda adalah admin anon, stiker kang ada di pm saya.",
|
||||||
|
"kang_msg": "Mencoba mencuri stiker Anda...",
|
||||||
|
"stick_no_name": "Stiker tidak memiliki nama.",
|
||||||
|
"kang_help": "Ingin saya menebak stikernya? Harap tandai stiker.",
|
||||||
|
"exist_pack": "<code>Menggunakan paket stiker yang ada...</code>",
|
||||||
|
"new_packs": "<b>Membuat paket stiker baru...</b>",
|
||||||
|
"please_start_msg": "Tampaknya Anda belum pernah berinteraksi dengan saya dalam obrolan pribadi, Anda harus melakukannya dulu..",
|
||||||
|
"click_me": "Klik Saya",
|
||||||
|
"pack_full": "Paket Stiker Anda penuh jika paket Anda tidak dalam Tipe v1 /kang 1, jika tidak dalam Tipe v2 /kang 2 dan seterusnya.",
|
||||||
|
"viewpack": "👀 Lihat Paket",
|
||||||
|
"kang_success": "<b>Stiker berhasil dicuri!</b>\n<b>Emoji:</b> {emot}"
|
||||||
|
}
|
||||||
20
locales/id-ID/web_scraper.json
Normal file
20
locales/id-ID/web_scraper.json
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
{
|
||||||
|
"no_result": "Maaf, saya tidak dapat menemukan hasil apa pun!",
|
||||||
|
"no_result_w_query": "Maaf, saya tidak dapat menemukan kueri: {kueri}",
|
||||||
|
"get_data": "⏳ Mohon tunggu, mengambil data dari web..",
|
||||||
|
"cl_btn": "❌ Tutup",
|
||||||
|
"back_btn": "↩️ Kembali",
|
||||||
|
"dl_text": "⬇️ Unduh",
|
||||||
|
"cat_text": "Kategori",
|
||||||
|
"kualitas": "Kualitas",
|
||||||
|
"ex_data": "👇 Ekstrak Data",
|
||||||
|
"unauth": "Tombol ini bukan untuk Anda..",
|
||||||
|
"invalid_cb": "Data callback tidak valid, silakan kirim perintah lagi..",
|
||||||
|
"res_scrape": "<b>Hasil Scrape dari</b> <code>{link}</code>:\n\n{kl}",
|
||||||
|
"header_with_query": "<b>Hasil Pencarian #{web} Untuk:</b> <code>{kueri}</code>\n\n",
|
||||||
|
"header_no_query": "<b>#{web} Terbaru:</b>\n🌀 Gunakan /{cmd} [judul] untuk memulai pencarian dengan judul.\n\n",
|
||||||
|
"invalid_cmd_scrape": "Gunakan perintah /{cmd} <b>[link]</b> untuk mengambil link unduhan.",
|
||||||
|
"err_getweb": "ERROR: Failed getting data from web because {err}.",
|
||||||
|
"err_getapi": "ERROR: Failed getting data from API",
|
||||||
|
"unsupport_dl_btn": "Beberapa hasil tidak akan muncul di tombol ekstrak karena tautan tidak didukung."
|
||||||
|
}
|
||||||
6
locales/id-ID/webss.json
Normal file
6
locales/id-ID/webss.json
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"no_url": "Berikan url untuk mengambil tangkapan layar.",
|
||||||
|
"wait_str": "Mengambil tangkapan layar...",
|
||||||
|
"str_credit": "🌞 Screenshot dibuat dengan Puppeteer",
|
||||||
|
"ss_failed_str": "Gagal Mengambil Tangkapan Layar. ERROR: {err}"
|
||||||
|
}
|
||||||
14
locales/id-ID/ytdl_plugins.json
Normal file
14
locales/id-ID/ytdl_plugins.json
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
{
|
||||||
|
"no_channel": "Fitur ini tidak didukung untuk channel atau pengguna anonim.",
|
||||||
|
"no_query": "Silakan kirim link yang mau diunduh..!",
|
||||||
|
"no_res": "Tidak ada hasil yang ditemukan untuk `{kweri}`",
|
||||||
|
"dl_btn": "Unduh",
|
||||||
|
"kembali": "kembali",
|
||||||
|
"yts_msg": "Dipublikasikan {pub}\n\n<b>❯ Durasi:</b> {dur}\n<b>❯ Penayangan:</b> {vi}\n<b>❯ Pengunggah:</b> <a href='{clink}'>{cname}</a>\n\n",
|
||||||
|
"invalid_link": "Masukkan URL yang Didukung YT-DLP yang valid",
|
||||||
|
"err_parse": "Gagal menguraikan URL, periksa log..",
|
||||||
|
"tunggu": "Harap tunggu..",
|
||||||
|
"unauth": "Bukan Tugas Anda..",
|
||||||
|
"endlist": "Itu adalah akhir dari daftar",
|
||||||
|
"vip-btn": "Karena beberapa penyalahgunaan pengguna, video terbaik sekarang hanya untuk pemilik bot."
|
||||||
|
}
|
||||||
68
locales/id-JW/admin.json
Normal file
68
locales/id-JW/admin.json
Normal file
|
|
@ -0,0 +1,68 @@
|
||||||
|
{
|
||||||
|
"no_admin_error": "Sampeyan kudu dadi administrator kanggo nggunakake perintah iki.",
|
||||||
|
"no_permission_error": "Ngapunten, nanging sampeyan ora duwe izin sing dibutuhake kanggo nindakake perintah iki. Izin sing ilang: {permissions}",
|
||||||
|
"private_not_allowed": "Perintah iki ora bisa digunakake ing obrolan pribadi, Yen sampeyan butuh bantuan, mohon nggunakake perintah /help.",
|
||||||
|
"purge_no_reply": "Bales pesen sing arep dibusak.",
|
||||||
|
"delete_no_reply": "Bales Pesen Kanggo Mbusak",
|
||||||
|
"pin_no_reply": "Bales pesen sing arep disematke/copot.",
|
||||||
|
"report_no_reply": "Bales Pesen Kanggo Nglaporake Panganggo.",
|
||||||
|
"no_delete_perm": "Tulung aku kei izin mbusak pesen.",
|
||||||
|
"purge_success": "Kasil mbusak {del_total} pesen..",
|
||||||
|
"user_not_found": "Aku ora bisa nemokake panganggo kuwi.",
|
||||||
|
"invalid_id_uname": "⚠️ panganggo/jeneng panganggo ora sah",
|
||||||
|
"kick_self_err": "Aku ora bisa nyepak awakku dhewe, aku bisa lunga yen sampeyan pengin.",
|
||||||
|
"ban_self_err": "Aku ora bisa nglarang aku, aku bisa lunga yen sampeyan pengin.",
|
||||||
|
"report_self_err": "Kenging menapa panjenengan lapor piyambak?",
|
||||||
|
"demote_self_err": "Aku ora bisa mudhun dhewe.",
|
||||||
|
"warn_self_err": "Aku ora bisa ngelekake awakku dhewe.",
|
||||||
|
"mute_self_err": "Aku ora bisa bisu awakku dhewe.",
|
||||||
|
"kick_sudo_err": "Wah, kowe arep nyepak juraganku?",
|
||||||
|
"ban_sudo_err": "Wah, sampeyan pengin nyoba nglarang pemilikku?",
|
||||||
|
"demote_sudo_err": "Wah, sampeyan pengin nyoba nurunake pemilikku?",
|
||||||
|
"warn_sudo_err": "Wah, sampeyan pengin nyoba menehi peringatan marang pemilikku?",
|
||||||
|
"mute_sudo_err": "Wah, sampeyan pengin nyoba menehi bisu marang pemilikku?",
|
||||||
|
"kick_admin_err": "Lol, edan yen aku bisa nyepak admin.",
|
||||||
|
"ban_admin_err": "Lol, edan yen aku bisa nglarang admin.",
|
||||||
|
"mute_admin_err": "Lol, edan yen aku bisa bisu admin.",
|
||||||
|
"warn_admin_err": "Lol, edan yen aku bisa ngelingake admin.",
|
||||||
|
"kick_msg": "**Panganggo Ditendhang:** {mention} [`{id}`]\n**Ditendhang dening:** {kicker}\n**Alasan:** {reasonmsg}",
|
||||||
|
"ban_msg": "**Panganggo sing Dicekal:** {mention} [`{id}`]\n**Dicekal Dening:** {banner}\n",
|
||||||
|
"unban_msg": "__Dicekal dibusak kanthi {mention}__",
|
||||||
|
"no_ban_permission": "Mangga kula nyuwun idin nglarang panganggo ing grup punika.",
|
||||||
|
"no_more_99": "Sampeyan ora bisa nggunakake luwih saka 99",
|
||||||
|
"banned_time": "**Dicekal Kanggo:** {val}\n",
|
||||||
|
"muted_time": "**Diam Kanggo:** {val}\n",
|
||||||
|
"banned_reason": "**Alesan:** {reas}",
|
||||||
|
"unban_channel_err": "Sampeyan ora bisa mbatalake saluran",
|
||||||
|
"give_unban_user": "Nyedhiyani jeneng panganggo utawa mbales pesen panganggo kanggo mbatalake larangan.",
|
||||||
|
"unban_success": "Kasil mbatalake {umention}!",
|
||||||
|
"give_idban_with_msg_link": "Nyedhiyakake id panganggo/jeneng panganggo bebarengan karo pranala pesen lan alasan kanggo larangan daftar",
|
||||||
|
"give_idunban_with_msg_link": "Nyedhiyani id panganggo/jeneng panganggo bebarengan karo pranala pesen lan alasan kanggo daftar-unban",
|
||||||
|
"give_reason_list_ban": "Sampeyan kudu menehi alesan kanggo nglarang daftar",
|
||||||
|
"Invalid_tg_link": "Link pesen ora sah diwenehake",
|
||||||
|
"multiple_ban_progress": "`Nglarang Panganggo saka macem-macem grup. Iki mbutuhake sawetara wektu`",
|
||||||
|
"multiple_unban_progress": "`Mbusak Larangan Panganggo saka pirang-pirang grup. Iki mbutuhake sawetara wektu`",
|
||||||
|
"failed_get_uname": "Ora bisa njupuk jeneng panganggo grup",
|
||||||
|
"listban_msg": "**Panganggo sing Dilarang Dhaptar:** {mention}\n**ID Panganggo sing Dicekal:** `{uid}`\n**Admin:** {frus}\n**Obrolan sing kena pengaruh: ** `{ct}`\n**Alasan:** {reas}",
|
||||||
|
"listunban_msg": "**Daftar Panganggo sing Ora Dilarang:** {mention}\n**ID Panganggo sing Ora Dilarang:** `{uid}`\n**Admin:** {frus}\n**Obrolan sing kena pengaruh: ** `{ct}`\n**Alasan:** {reas}",
|
||||||
|
"promote_self_err": "Aku ora bisa promosi dhewe.",
|
||||||
|
"no_promote_perm": "Sedhih, aku ora ijin kanggo promosi pangguna.",
|
||||||
|
"full_promote": "{umention} dipromosekake kanthi lengkap!",
|
||||||
|
"normal_promote": "Dipromosikke {umention}!",
|
||||||
|
"pin_success": "**Sukses semat pesen iki [iki]({link}).**",
|
||||||
|
"unpin_success": "**Pesen sematan [iki]({link}) kasil dicopot.**",
|
||||||
|
"pin_no_perm": "Tulung wenehi pin izin kanggo nggunakake printah iki!.",
|
||||||
|
"report_msg": "Kacarita {user_mention} menyang admin!",
|
||||||
|
"reported_is_admin": "Apa sampeyan ngerti yen pangguna sing sampeyan bales iku admin?",
|
||||||
|
"user_no_warn": "Panganggo {mention} ora ana bebaya.",
|
||||||
|
"ch_warn_msg": "{mention} duwe {warning}/3 bebaya.",
|
||||||
|
"warn_msg": "**Panganggo sing Dielingake:** {mention}\n**Dielingake Dening:** {warner}\n**Alesan:** {reas}\n**Ngelingake:** {twarn}/ 3",
|
||||||
|
"rmwarn_msg": "Pènget saka {mention} wis dibusak.",
|
||||||
|
"unwarn_msg": "Pènget sing dibusak kanthi {mention}.",
|
||||||
|
"rmmute_msg": "__Bisu dibusak kanthi {mention}__",
|
||||||
|
"unmute_msg": "Ora bisu! {umention}",
|
||||||
|
"reply_to_rm_warn": "Bales pesen kanggo mbusak bebaya pangguna.",
|
||||||
|
"exceed_warn_msg": "Jumlah peringatan babagan {mention} ngluwihi, DIBRANG!",
|
||||||
|
"mute_msg": "**Panganggo Bisu:** {mention}\n**Dibunyikan Dening:** {muter}\n",
|
||||||
|
"rm_warn_btn": "🚨 Copot Warn 🚨"
|
||||||
|
}
|
||||||
13
locales/id-JW/afk.json
Normal file
13
locales/id-JW/afk.json
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"no_channel": "Fitur iki ora didhukung kanggo channel.",
|
||||||
|
"on_afk_msg_no_r": "**{usr}** [<code>{id}</code>] wis online maneh lan ora ana suwene {tm}\n\n",
|
||||||
|
"on_afk_msg_with_r": "**{usr}** [<code>{id}</code>] wis online maneh lan ora ana suwene {tm}\n\n**Alesan:** `{reas}`\n\n",
|
||||||
|
"is_afk_msg_no_r": "**{usr}** [<code>{id}</code>] iku AFK wiwit {tm} kepungkur.\n\n",
|
||||||
|
"is_afk_msg_with_r": "**{usr}** [<code>{id}</code>] iku AFK wiwit {tm} kepungkur.\n\n**Alesan:** {reas}\n\n" ,
|
||||||
|
"is_online": "**{usr}** [<code>{id}</code>] wis online maneh",
|
||||||
|
"now_afk": "{usr} [<code>{id}</code>] saiki dadi AFK!.",
|
||||||
|
"afkdel_help": "**Panganggone:**\n/{cmd} [ENABLE|DISABLE] kanggo ngaktifake utawa mateni pesen otomatis mbusak.",
|
||||||
|
"afkdel_disable": "Mbusak pesen AFK otomatis dipateni.",
|
||||||
|
"afkdel_enable": "Mbusak pesen AFK otomatis ing obrolan iki diaktifake.",
|
||||||
|
"is_afk": "{usr} [<code>{id}</code>] iku AFK!."
|
||||||
|
}
|
||||||
6
locales/id-JW/chatbot_ai.json
Normal file
6
locales/id-JW/chatbot_ai.json
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"no_question": "Tulung gunakake printah <code>/{cmd} [pitakon]</code> kanggo takon nganggo fitur AI.",
|
||||||
|
"find_answers_str": "Lagi goleki jawaban paling apik kanggo sampeyan..",
|
||||||
|
"dont_spam": "Aja spam, mangga ngenteni {tm} detik utawa aku bakal nglarang sampeyan saka bot iki.",
|
||||||
|
"answers_too_long": "Pitakonan kanggo jawaban sampeyan wis ngluwihi wates teks TG, priksa pranala iki kanggo ndeleng.\n\n{answerlink}"
|
||||||
|
}
|
||||||
11
locales/id-JW/dev.json
Normal file
11
locales/id-JW/dev.json
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
{
|
||||||
|
"already_up": "Wis up-to-date!",
|
||||||
|
"up_and_rest": "<b>Dianyari nganggo branch standar, diwiwiti maneh saiki.</b>",
|
||||||
|
"cl_btn": "❌ Tutup",
|
||||||
|
"no_eval": "__Ora ana pesen eval!__",
|
||||||
|
"run_eval": "<i>Ngolah pyrogram eval..</i>",
|
||||||
|
"run_exec": "<i>Ngolah pyrogram exec..</i>",
|
||||||
|
"no_cmd": "Ora ana prentah kanggo nglakokaké.",
|
||||||
|
"success": "Sukses",
|
||||||
|
"no_reply": "Ora Wangsulan"
|
||||||
|
}
|
||||||
3
locales/id-JW/fun.json
Normal file
3
locales/id-JW/fun.json
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"result": "🎲 Dadu mandheg ing nomer: {number}"
|
||||||
|
}
|
||||||
6
locales/id-JW/general.json
Normal file
6
locales/id-JW/general.json
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"back_btn": "« Balik Maneh",
|
||||||
|
"unknown_id": "Nganpunten, aku ora ngerti pengguna iki. Mungkin aku durung pernah ketemu mbi dek'e.",
|
||||||
|
"no_results": "Ora ana asil sing ditemokake.",
|
||||||
|
"exp_task": "😶🌫️ Wektu wis entek. Tugas wis dibatalake!"
|
||||||
|
}
|
||||||
13
locales/id-JW/genss.json
Normal file
13
locales/id-JW/genss.json
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"wait_msg": "Wenehi wektu kanggo ngolah panjalukmu!! 😴",
|
||||||
|
"wait_dl": "<code>Lagi diproses, mangga ngenteni..</code>",
|
||||||
|
"dl_progress": "Nyoba ngundhuh, mangga ngenteni..",
|
||||||
|
"up_progress": "Nyoba ngunggah...",
|
||||||
|
"success_dl_msg": "Berkas wis diundhuh menyang <code>{path}</code>.",
|
||||||
|
"fail_open": "😟 Nuwun sewu! Aku ora bisa mbukak file.",
|
||||||
|
"limit_dl": "Nuwun sewu, download dibatesi nganti 2GB kanggo nyuda flood. Sampeyan bisa ngowahi file dadi link luwih dhisik.",
|
||||||
|
"err_ssgen": "Gagal nggawe screenshoot.\n\n{exc}",
|
||||||
|
"up_msg": "☑️ Screenshot generasi kasil.\n\n{namma} (<code>{id}</code>)\n#️⃣ #ssgen #id{id}\n\nSS Digawe dening @{bot_uname} ",
|
||||||
|
"no_reply": "Bales menyang video utawa dokumen Telegram utawa gunakake link langsung sawise printah kanggo ngasilake screenshot saka media!",
|
||||||
|
"choose_no_ss": "Saiki pilih pira asil kanggo screenshot? 🥳.\n\nTotal durasi: `{td}` (`{dur} detik`)"
|
||||||
|
}
|
||||||
13
locales/id-JW/grup_tools.json
Normal file
13
locales/id-JW/grup_tools.json
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"sudo_join_msg": "Waw, Pemilikku sing ganteng gabung menyang grup!",
|
||||||
|
"log_bot_added": "#GrupBaru\nGrup = {ttl}(<code>{cid}</code>)\nJumlah Anggota = <code>{tot}</code>\nDitambahake dening - {r_j}",
|
||||||
|
"support_btn": "Dukungan",
|
||||||
|
"help_btn": "ℹ️ Pitulungan",
|
||||||
|
"update_btn": "📢 Nganyari",
|
||||||
|
"chat_not_allowed": "<b>CHAT ORA DIIJINKE 🐞\n\nPemilik ku wes nglarang aku kerja neng kene! Sampeyan bisa hubungi pemilik bot iki..</b>",
|
||||||
|
"welcome_thanks": "<b>Terimakasih wis nambahi saya ing {ttl} ❣️\n\nYen ana kendal utawa saran bisa hubungi saya.</b>",
|
||||||
|
"capt_welc": "Hai {umention} [<code>{uid}</code>], sugeng rawuh ing grup {ttl}.",
|
||||||
|
"combot_msg": "<b>Larangan Federasi #CAS</b>\nPengguna {umention} [<kode>{uid}</code>] dideteksi minangka spambot lan wis dibusak. Powered by <a href='https://api.cas.chat/check?user_id={u.id}'>Combot AntiSpam.</a>",
|
||||||
|
"spamwatch_msg": "<b>Larangan Federasi #SpamWatch</b>\nPengguna {umention} [<code>{uid}</code>] wis dibusak amarga <code>{reas}</code>.\n" ,
|
||||||
|
"welcpic_msg": "Sugeng Rawuh {userr} [{id}]"
|
||||||
|
}
|
||||||
1
locales/id-JW/help_menu.json
Normal file
1
locales/id-JW/help_menu.json
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{}
|
||||||
5
locales/id-JW/lang_setting.json
Normal file
5
locales/id-JW/lang_setting.json
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
"language_changed_successfully": "Basa wis kasil diganti.",
|
||||||
|
"language_changer_chat": "Ing kene sampeyan bisa ngganti basa sing digunakake kanggo bot sajrone obrolan.\nYen basa sampeyan ora ana ing kene lan sampeyan pengin nyumbang, sampeyan bisa mbukak masalah ing githubku. .",
|
||||||
|
"language_changer_private": "Ing kene sampeyan bisa ngganti basa sing digunakake kanggo bot ing obrolan pribadi iki.\n\nYen sampeyan pengin ngganti basa grup sampeyan, bukak printah <code>/setchatlang</code>. \nYen basa sampeyan ora ana ing kene lan sampeyan pengin nyumbang, bukak repo misskaty."
|
||||||
|
}
|
||||||
4
locales/id-JW/main.json
Normal file
4
locales/id-JW/main.json
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
"language_name": "Jawa",
|
||||||
|
"language_flag": "💫"
|
||||||
|
}
|
||||||
15
locales/id-JW/media_extractor.json
Normal file
15
locales/id-JW/media_extractor.json
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
{
|
||||||
|
"sub_extr_help": "Gunakake printah /{cmd} [link] kanggo mriksa subtitle utawa audio ing file video.",
|
||||||
|
"conv_sub_help": "Gunakake printah /{cmd} kanthi mbales berkas .ass utawa .vtt, kanggo ngowahi subtitle saka .ass utawa .vtt dadi srt.",
|
||||||
|
"progress_str": "⏳ Ngolah panjalukmu..",
|
||||||
|
"convert_str": "⏳ Ngonversi...",
|
||||||
|
"unauth_cb": "⚠️ Akses Ditolak!",
|
||||||
|
"cancel_btn": "❌ Rasido",
|
||||||
|
"invalid_cb": "⚠️ AJA Mbusak PESAN!",
|
||||||
|
"up_str": "Ngunggahaké berkas..",
|
||||||
|
"press_btn_msg": "Pencet tombol ing ngisor iki kanggo ngekstrak subtitle/audio. Mung ndhukung link langsung saiki.\nDiproses ing {timelog}",
|
||||||
|
"fail_extr_media": "Media ekstrak sing gagal, priksa manawa pranala sampeyan ora direksa WAF utawa ora bisa diakses kanggo bot.",
|
||||||
|
"fail_extr_sub": "Gagal ekstrak sub, Mungkin format ora didhukung..\n\nLink: {link}\nERR: {e}",
|
||||||
|
"capt_extr_sub": "<b>Jeneng berkas:</b> <kode>{nf}</code>\n\nDiekstrak saka @{bot} ing {timelog}",
|
||||||
|
"capt_conv_sub": "<kode>{nf}.srt</code>\n\nDiowahi dening @{bot}"
|
||||||
|
}
|
||||||
11
locales/id-JW/mediainfo.json
Normal file
11
locales/id-JW/mediainfo.json
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
{
|
||||||
|
"processing_text": "`Pengolahan, wektu total adhedhasar ukuran berkas panjenengan...`",
|
||||||
|
"wait_msg": "`Tulung enteni sedhela...`",
|
||||||
|
"err_link": "Kayak'e pranala sing dikirim ora valid, priksa link langsung lan bisa diundhuh.",
|
||||||
|
"media_invalid": "Mangga mbales media sing bener.",
|
||||||
|
"dl_limit_exceeded": "Nuwun sewu, download diwatesi 2GB kanggo nyuda flood. Sampeyan bisa ngowahi file dadi link.",
|
||||||
|
"dl_args_text": "Nyoba ngundhuh..",
|
||||||
|
"mediainfo_help": "Gunakake printah /{cmd} [link], utawa bales media telegram nganggo /{cmd}.",
|
||||||
|
"capt_media": "ℹ️ Hasil mediainfo sampeyan..\n\n**Panjalukan Saka:** {ment}",
|
||||||
|
"viweb": "💬 Bukak Web"
|
||||||
|
}
|
||||||
17
locales/id-JW/nightmodev2.json
Normal file
17
locales/id-JW/nightmodev2.json
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
{
|
||||||
|
"nmd_disabled": "Mode wengi dipateni.",
|
||||||
|
"nmd_not_enabled": "Mode wengi ora diaktifake ing obrolan iki.",
|
||||||
|
"invalid_time_format": "Format wektu ora valid. Gunakake format HH:MM.",
|
||||||
|
"invalid_lockdur": "Suwene wektu ora bener. Gunakake format sing bener.\nConto: 6h (6 jam), 10m kanggo 10 menit.",
|
||||||
|
"schedule_already_on": "Wis ana jadwal ing obrolan iki. Pateni nganggo gendéra `-d`.",
|
||||||
|
"nmd_enable_success": "Kasil ngaktifake mode wengi ing obrolan iki.\nGrup bakal dikunci ing {st} lan bakal dibukak sawise {lockdur} saben dina.",
|
||||||
|
"nmd_cb": "🔖 Hai, Aku {bname} digawe nganggo Framework Pyrogram v{ver} lan Python v{pyver}.\n\nMau gawe bot kaya iki? Yuuk belajar di @botindonesia\nOwner: @YasirArisM",
|
||||||
|
"nmd_off_not_admin": "#NIGHTMODE_FAIL\nGagal mateni nightmode ing `{chat_id}`, amarga {bname} dudu admin ing chat `{chat_id}`",
|
||||||
|
"nmd_off_not_present": "#NIGHTMODE_FAIL\nGagal mateni nightmode ing `{chat_id}`, amarga {bname} ora ana ing chat `{chat_id}`. Dibusak grup saka dhaptar.",
|
||||||
|
"nmd_off_err": "#NIGHTMODE_FAIL\nGagal mateni nightmode ing `{chat_id}`\nERROR: `{e}`",
|
||||||
|
"nmd_off_success": "#NIGHTMODE_HANDLER\n📆 {dt}\n\n☀️ Grup dibukak.\nBakal ditutup jam {close_at}",
|
||||||
|
"nmd_on_not_admin": "#NIGHTMODE_FAIL\nGagal ngaktifake mode wengi ing `{chat_id}`, amarga {bname} dudu admin ing chat `{chat_id}`",
|
||||||
|
"nmd_on_not_present": "#NIGHTMODE_FAIL\nGagal ngaktifake mode wengi ing `{chat_id}`, amarga {bname} ora ana ing obrolan `{chat_id}`. Grup dibusak saka dhaptar.",
|
||||||
|
"nmd_on_err": "#NIGHTMODE_FAIL\nGagal ngaktifake mode wengi ing `{chat_id}`\nERROR: `{e}`",
|
||||||
|
"nmd_on_success": "#NIGHTMODE_HANDLER\n📆 {dt}\n\n🌗 Grup ditutup.\nBakal dibukak ing {open_at}"
|
||||||
|
}
|
||||||
6
locales/id-JW/ocr.json
Normal file
6
locales/id-JW/ocr.json
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"no_photo": "Bales foto nganggo printah /{cmd} kanggo mindhai teks saka gambar.",
|
||||||
|
"read_ocr": "Mindai gambar sampeyan..",
|
||||||
|
"result_ocr": "Hasil OCR:\n<kode>{result}</code>",
|
||||||
|
"ocr_helper": "/ocr [reply to photo] - Waca Teks Saka Gambar"
|
||||||
|
}
|
||||||
13
locales/id-JW/sangmata.json
Normal file
13
locales/id-JW/sangmata.json
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"no_uname": "<code>Ora Username</code>",
|
||||||
|
"no_last_name": "<kode>Ora Ana Jeneng mburi</code>",
|
||||||
|
"uname_change_msg": "✨ Username diganti saka {bef} ➡️ {aft}.\n",
|
||||||
|
"lastname_change_msg": "✨ Ganti jeneng mburi saka {bef} ➡️ {aft}.\n",
|
||||||
|
"firstname_change_msg": "✨ Ganti jeneng ngarep saka {bef} ➡️ {aft}.\n",
|
||||||
|
"set_sangmata_help": "Gunakake <code>/{cmd} on</code>, kanggo ngaktifake sangmata. Yen sampeyan pengin mateni, sampeyan bisa nggunakake parameter mati.",
|
||||||
|
"sangmata_already_on": "SangMata wis diaktifake ing grup sampeyan.",
|
||||||
|
"sangmata_enabled": "Sangmata diaktifake ing grup sampeyan.",
|
||||||
|
"sangmata_already_off": "SangMata wis dipateni ing grup sampeyan.",
|
||||||
|
"sangmata_disabled": "Sangmata dipateni ing grup sampeyan.",
|
||||||
|
"wrong_param": "Parameter sing ora dingerteni, gunakake mung parameter aktif/mati."
|
||||||
|
}
|
||||||
11
locales/id-JW/start_help.json
Normal file
11
locales/id-JW/start_help.json
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
{
|
||||||
|
"newgroup_log": "#NewGroup\nGroup = {jdl}(<code>{id}</code>)\nJumlah Anggota = <code>{c}</code>",
|
||||||
|
"newuser_log": "#NewUser\nID - <code>{id}</code>\nJeneng - {nm}",
|
||||||
|
"help_name": "Iki bantuan kanggo **{mod}**:\n",
|
||||||
|
"help_txt": "Halo {kamuh}, jenengku {bot}.\nAku bot pyrogram sing dikembangake dening pemilik apik karo sawetara fitur migunani.\nSampeyan bisa ndeleng kanthi ngeklik tombol ing ngisor iki.\n\nPrentah umum yaiku :\n - /start: Miwiti bot\n - /help: Wenehi pesen iki\n - /setlang: Ganti basa bot [BETA]",
|
||||||
|
"click_me": "Klik Aku",
|
||||||
|
"back_btn": "Mbalik",
|
||||||
|
"click_btn": "Klik tombol ing ngisor iki kanggo njaluk bantuan babagan {nm}",
|
||||||
|
"pm_detail": "PM Aku Kanggo Rincian Liyane.",
|
||||||
|
"start_msg": "Halo {kamuh}, PM aku kanggo ngerti kabeh fiturku. Sampeyan bisa ngganti basa bot ing bot nggunakake perintah /setlang nanging isih ing tahap beta."
|
||||||
|
}
|
||||||
19
locales/id-JW/stickers.json
Normal file
19
locales/id-JW/stickers.json
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
{
|
||||||
|
"no_anim_stick": "Stiker animasi ora didhukung!",
|
||||||
|
"not_sticker": "Iki dudu stiker!",
|
||||||
|
"unkang_msg": "Nyoba nyopot saka pack..",
|
||||||
|
"unkang_success": "Stiker wis dibusak saka pack panjenengan",
|
||||||
|
"unkang_error": "Gagal mbusak stiker saka paket sampeyan.\n\nERR: {e}",
|
||||||
|
"unkang_help": "Mangga wangsulana stiker sing digawe {c} kanggo mbusak stiker saka paket sampeyan.",
|
||||||
|
"anon_warn": "Sampeyan anon admin, kang stiker ing pmku.",
|
||||||
|
"kang_msg": "Nyolong stiker sampeyan...",
|
||||||
|
"stick_no_name": "Stiker ora ana jeneng.",
|
||||||
|
"kang_help": "Arep tak tebak stikere? Mangga tag stiker.",
|
||||||
|
"exist_pack": "<code>Nganggo paket stiker sing ana...</code>",
|
||||||
|
"new_packs": "<b>Nggawe pak stiker anyar...</b>",
|
||||||
|
"please_start_msg": "Koyone sampeyan ora tau sesambungan karo aku ing obrolan pribadi, sampeyan kudu nglakoni dhisik..",
|
||||||
|
"click_me": "Klik Aku",
|
||||||
|
"pack_full": "Paket Stiker sampeyan kebak yen paket sampeyan ora ana ing tipe v1 /kang 1, yen ora ana ing Tipe v2 /kang 2 lan sapiturute.",
|
||||||
|
"viewpack": "👀 Deleng Paket",
|
||||||
|
"kang_success": "<b>Stiker kasil dicolong!</b>\n<b>Emoji:</b> {emot}"
|
||||||
|
}
|
||||||
20
locales/id-JW/web_scraper.json
Normal file
20
locales/id-JW/web_scraper.json
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
{
|
||||||
|
"no_result": "Nuwun sewu, kula mboten nemu kasil!",
|
||||||
|
"no_result_w_query": "Nuwun sewu, kula mboten saged manggihaken pitakon: {kueri}",
|
||||||
|
"get_data": "⏳ Mangga dienteni, lagi njupuk data saka web..",
|
||||||
|
"cl_btn": "❌ Tutup",
|
||||||
|
"back_btn": "↩️ Mbalik",
|
||||||
|
"dl_text": "⬇️ Unduh",
|
||||||
|
"cat_text": "💠 Kategori",
|
||||||
|
"kualitas": "Kwalitas",
|
||||||
|
"ex_data": "👇 Ekstrak Data ",
|
||||||
|
"unauth": "Tombol iki dudu kanggo sampeyan..",
|
||||||
|
"invalid_cb": "Data callback ora valid, kirim printah maneh..",
|
||||||
|
"res_scrape": "<b>Asil scrape saka</b> <kode>{link}</code>:\n\n{kl}",
|
||||||
|
"header_with_query": "<b>Asil Nggoleki #{web} Kanggo:</b> <code>{kueri}</code>\n\n",
|
||||||
|
"header_no_query": "<b>#{web} Paling anyar:</b>\n🌀 Gunakake /{cmd} [judhul] kanggo miwiti nggoleki kanthi judhul.\n\n",
|
||||||
|
"invalid_cmd_scrape": "Gunakake prentah /{cmd} <b>[link]</b> kanggo ngunduh pranala kethokan",
|
||||||
|
"err_getweb": "ERROR: Gagal njupuk data saka web amarga {err}.",
|
||||||
|
"err_getapi": "ERROR: Gagal njupuk data saka API",
|
||||||
|
"unsupport_dl_btn": "Sawetara asil ora bakal katon ing tombol ekstrak amarga pranala ora didhukung."
|
||||||
|
}
|
||||||
6
locales/id-JW/webss.json
Normal file
6
locales/id-JW/webss.json
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"no_url": "Wenehana url kanggo njupuk screenshot.",
|
||||||
|
"wait_str": "Lagi njupuk gambar layar...",
|
||||||
|
"str_credit": "🌞 Screenshot digawe nganggo Puppeteer",
|
||||||
|
"ss_failed_str": "Gagal njupuk gambar. ERROR: {err}"
|
||||||
|
}
|
||||||
14
locales/id-JW/ytdl_plugins.json
Normal file
14
locales/id-JW/ytdl_plugins.json
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
{
|
||||||
|
"no_channel": "Fitur iki ora didhukung kanggo channel utawa pangguna anonim.",
|
||||||
|
"no_query": "Mangga lebokna url sing kepengen mbok unduh..!",
|
||||||
|
"no_res": "Ora ana asil kanggo `{kweri}`",
|
||||||
|
"dl_btn": "Ngunduh",
|
||||||
|
"back": "Mbalik",
|
||||||
|
"yts_msg": "Diterbitake {pub}\n\n<b>❯ Duration:</b> {dur}\n<b>❯ Ndeleng:</b> {vi}\n<b>❯ Uploader:</b> <a href='{clink}'>{cname}</a>\n\n",
|
||||||
|
"invalid_link": "Mangga lebokna URL Dhukungan YT-DLP sing valid",
|
||||||
|
"err_parse": "Gagal ngurai URL, mriksa log..",
|
||||||
|
"ngenteni": "Tulung ngenteni..",
|
||||||
|
"unauth": "Ora Tugasmu..",
|
||||||
|
"endlist": "Iku pungkasan dhaptar",
|
||||||
|
"vip-btn": "Amarga sawetara pangguna penyalahgunaan, video paling apik saiki mung sing nduwe bot iki."
|
||||||
|
}
|
||||||
79
misskaty/__init__.py
Normal file
79
misskaty/__init__.py
Normal file
|
|
@ -0,0 +1,79 @@
|
||||||
|
# * @author Yasir Aris M <yasiramunandar@gmail.com>
|
||||||
|
# * @date 2023-06-21 22:12:27
|
||||||
|
# * @projectName MissKatyPyro
|
||||||
|
# * Copyright ©YasirPedia All rights reserved
|
||||||
|
import time
|
||||||
|
from logging import ERROR, INFO, StreamHandler, basicConfig, getLogger, handlers
|
||||||
|
|
||||||
|
from apscheduler.jobstores.mongodb import MongoDBJobStore
|
||||||
|
from apscheduler.schedulers.asyncio import AsyncIOScheduler
|
||||||
|
from async_pymongo import AsyncClient
|
||||||
|
from pymongo import MongoClient
|
||||||
|
from pyrogram import Client
|
||||||
|
|
||||||
|
from misskaty.core import misskaty_patch
|
||||||
|
from misskaty.vars import (
|
||||||
|
API_HASH,
|
||||||
|
API_ID,
|
||||||
|
BOT_TOKEN,
|
||||||
|
DATABASE_NAME,
|
||||||
|
DATABASE_URI,
|
||||||
|
TZ,
|
||||||
|
USER_SESSION,
|
||||||
|
)
|
||||||
|
|
||||||
|
basicConfig(
|
||||||
|
level=INFO,
|
||||||
|
format="[%(asctime)s - %(levelname)s] - %(name)s.%(funcName)s - %(message)s",
|
||||||
|
datefmt="%d-%b-%y %H:%M:%S",
|
||||||
|
handlers=[
|
||||||
|
handlers.RotatingFileHandler("MissKatyLogs.txt", mode="w+", maxBytes=1000000),
|
||||||
|
StreamHandler(),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
getLogger("pyrogram").setLevel(ERROR)
|
||||||
|
getLogger("openai").setLevel(ERROR)
|
||||||
|
getLogger("httpx").setLevel(ERROR)
|
||||||
|
|
||||||
|
MOD_LOAD = []
|
||||||
|
MOD_NOLOAD = ["subscene_dl"]
|
||||||
|
HELPABLE = {}
|
||||||
|
cleanmode = {}
|
||||||
|
botStartTime = time.time()
|
||||||
|
misskaty_version = "v2.10.13 - Stable"
|
||||||
|
|
||||||
|
# Pyrogram Bot Client
|
||||||
|
app = Client(
|
||||||
|
"MissKatyBot",
|
||||||
|
api_id=API_ID,
|
||||||
|
api_hash=API_HASH,
|
||||||
|
bot_token=BOT_TOKEN,
|
||||||
|
mongodb=dict(connection=AsyncClient(DATABASE_URI), remove_peers=False),
|
||||||
|
)
|
||||||
|
|
||||||
|
# Pyrogram UserBot Client
|
||||||
|
user = Client(
|
||||||
|
"YasirUBot",
|
||||||
|
session_string=USER_SESSION,
|
||||||
|
)
|
||||||
|
|
||||||
|
jobstores = {
|
||||||
|
"default": MongoDBJobStore(
|
||||||
|
client=MongoClient(DATABASE_URI), database=DATABASE_NAME, collection="nightmode"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
scheduler = AsyncIOScheduler(jobstores=jobstores, timezone=TZ)
|
||||||
|
|
||||||
|
app.start()
|
||||||
|
BOT_ID = app.me.id
|
||||||
|
BOT_NAME = app.me.first_name
|
||||||
|
BOT_USERNAME = app.me.username
|
||||||
|
if USER_SESSION:
|
||||||
|
user.start()
|
||||||
|
UBOT_ID = user.me.id
|
||||||
|
UBOT_NAME = user.me.first_name
|
||||||
|
UBOT_USERNAME = user.me.username
|
||||||
|
else:
|
||||||
|
UBOT_ID = None
|
||||||
|
UBOT_NAME = None
|
||||||
|
UBOT_USERNAME = None
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue