├── .gitignore
├── screenshots
├── startup.png
└── bot_work.png
├── requirements.txt
├── .github
└── ISSUE_TEMPLATE
│ └── ----------.md
├── config.py
├── README.md
├── index.py
└── LICENSE
/.gitignore:
--------------------------------------------------------------------------------
1 | !.gitignore
2 | ghoul-session.session
3 | ghoul-session.session-journal
4 | __pycache__
--------------------------------------------------------------------------------
/screenshots/startup.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/error1001es/teleghoul/HEAD/screenshots/startup.png
--------------------------------------------------------------------------------
/screenshots/bot_work.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/error1001es/teleghoul/HEAD/screenshots/bot_work.png
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | certifi==2022.12.7
2 | charset-normalizer==3.0.1
3 | idna==3.4
4 | pyaes==1.6.1
5 | Pyrogram==2.0.100
6 | PySocks==1.7.1
7 | requests==2.28.2
8 | urllib3==1.26.14
9 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/----------.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Баг репорт
3 | about: Оставляй репорты, чтобы помочь стать лучше!
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | Опиши баг, что случилось, после чего это произошло
11 | Отправь скриншот из консоли или приложения Termux
12 |
--------------------------------------------------------------------------------
/config.py:
--------------------------------------------------------------------------------
1 | # Конфиг
2 | command_prefixes = ['.','!','/']
3 |
4 | ghoul_spam_command = 'ghoul-spam'
5 | ghoul_table_command = 'ghoul-c'
6 | ghoul_command = 'ghoul'
7 |
8 | end_message = 'l l let me die' # Сообщение после конца цикла, если не нужно - оставляем пустым
9 | messages_per_second = 7 # Для ghoul_spam
10 | sleep_time_ghoul = 0.1 # Для ghoul_table 0.0825
11 | sleep_time = 0.055 # Для type
12 |
13 | # Команды снизу доступны только тем, кто пожертвовал (пиздеж, всем доступны)
14 | music_command = 'music'
15 | type_command = 'type'
16 | words_command = 'words'
17 |
18 |
19 | # Линии ниже не трогать, сломается!
20 |
21 | api_id = 1016382
22 | api_hash = 'c27834e5683d50a9bacf835a95ec4763'
23 |
24 | # Линии выше не трогать, сломается!
25 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Я - Гуль (бот), теперь работает в чатах
2 |
3 | 
4 |
5 | **Отблагодарить автора за проделанную работу можно [здесь](#пожертвовать)**
6 | **Помощь с установкой [тут](#помощь)**
7 |
8 | ___
9 | ## Установка на Андроид
10 | **После установки перейдите в раздел [*Запуск*](#Запуск)**
11 |
12 | Скачиваем приложение [Termux](https://play.google.com/store/apps/details?id=com.termux) в Play Market
13 | Открываем и пишем команды снизу поочерёдно
14 |
15 | ***Для копирования команды нажмите справа от неё***
16 |
17 | *Обновляем*
18 |
19 | apt-get update
20 | *Ставим git и python*
21 |
22 | apt-get install git python
23 | Если спросит `Do you want to continue? [Y/n]` отвечаем `Y` и продолжаем
24 | *Устанавливаем pyrogram*
25 |
26 | pip install pyrogram
27 | *Клонируем репозиторий*
28 |
29 | git clone https://github.com/error1001es/teleghoul.git
30 | **После установки перейдите в раздел [*Запуск*](#Запуск)**
31 |
32 | ___
33 | ## Установка на Пк
34 | **После установки перейдите в раздел [*Запуск*](#Запуск)**
35 |
36 | Скачиваем [git](https://git-scm.com/downloads) и [python](https://www.python.org/downloads/)
37 | **При установке Python обязательно ставим галочку `Add to PATH`**
38 |
39 | *Устанавливаем pyrogram*
40 |
41 | pip install pyrogram
42 | *Клонируем репозиторий*
43 |
44 | git clone https://github.com/error1001es/teleghoul.git
45 | ___
46 | ## Запуск
47 | Перед каждым запуском [обновляйте](#обновление) бота
48 | *Введите* и ждите пока бот запросит номер телефона, привязанный к **ВАШЕМУ** телеграму
49 |
50 | python teleghoul/index.py
51 |
52 | В **ТЕЛЕГРАМ** придёт код, введите его и бот заработает
53 |
54 | 
55 |
56 | Если у вас стоит *двухфакторная аутентификация*, то бот запросит пароль
57 |
58 | **После запуска бот даст тебе знать, *последующие запуски выполняются без каких-либо установок***
59 |
60 |
61 | Ctrl+С - Отключение бота 62 |63 | ___ 64 | ## Команды в Телеграме 65 | `Я гуль` - спам
103 | Ctrl+X - Выйти из редактирования 104 |105 | -------------------------------------------------------------------------------- /index.py: -------------------------------------------------------------------------------- 1 | import asyncio, json, requests 2 | from config import * 3 | from time import sleep 4 | from pyrogram import Client, filters, sync 5 | from pyrogram.errors import FloodWait 6 | 7 | client = Client('ghoul-session', api_id, api_hash) 8 | 9 | limit = 2000 10 | 11 | class custom(dict): 12 | def __missing__(self, key): 13 | return 0 14 | 15 | client.start() 16 | 17 | client.stop() 18 | 19 | print('Бот запущен, теперь ты - Гуль') 20 | 21 | @client.on_message(filters.command(ghoul_spam_command, prefixes=command_prefixes) & filters.me) 22 | def ghoul_spam_handler(client, message): 23 | i = 1000 24 | while i > 0: 25 | try: 26 | client.send_message(message.chat.id, f'{i} - 7 = {i-7}') 27 | except FloodWait as e: 28 | sleep(e.x) 29 | i -= 7 30 | sleep(1/messages_per_second) 31 | if end_message != '': 32 | client.send_message(message.chat.id, end_message) 33 | 34 | @client.on_message(filters.command(ghoul_table_command, prefixes=command_prefixes) & filters.me) 35 | def ghoul_table_handler(client, message): 36 | i = 1000 37 | while i > 62: 38 | try: 39 | text = f'{i} - 7 = {i-7}' 40 | for j in range(1,10): 41 | text += f'\n{i-7*j} - 7 = {i-7*(j+1)}' 42 | message.edit_text(f'`{text}`') 43 | sleep(sleep_time_ghoul) 44 | except FloodWait as e: 45 | sleep(e.x) 46 | i -= 7 47 | if end_message != '': 48 | client.send_message(message.chat.id, end_message) 49 | 50 | @client.on_message(filters.command(ghoul_command, prefixes=command_prefixes) & filters.me) 51 | def ghoul_handler(_, message): 52 | i = 1000 53 | while i > 0: 54 | try: 55 | message.edit_text(f'{i} - 7 = {i-7}') 56 | except FloodWait as e: 57 | sleep(e.x) 58 | i -= 7 59 | sleep(sleep_time) 60 | if end_message != '': 61 | message.edit_text(end_message) 62 | 63 | @client.on_message(filters.command(words_command, prefixes=command_prefixes) & filters.me) 64 | def words_handler(client, message): 65 | message.delete() 66 | words = custom() 67 | total = 0 68 | progress = client.send_message(message.chat.id, '`Загружено 0 сообщений...`') 69 | for message in client.iter_history(message.chat.id, limit): 70 | if message.text: 71 | splited_text = message.text.split() 72 | if 'Счетчик_слов' not in splited_text: 73 | total += 1 74 | if total % 200 == 0: 75 | progress.edit_text(f'`Загружено {total} сообщений...`') 76 | for word in splited_text: 77 | words[word.lower()] += 1 78 | 79 | frequency = sorted(words, key=words.get, reverse=True) 80 | out = 'Счетчик_слов\n' 81 | for i in range(10): 82 | out += f'{i+1}. {frequency[i]} -- {words[frequency[i]]}\n' 83 | 84 | progress.edit_text(out, parse_mode=None) 85 | 86 | @client.on_message(filters.command(type_command, prefixes=command_prefixes) & filters.me) 87 | def type_handler(_, message): 88 | overriding_text = message.text.split('.type ', maxsplit=1)[1] 89 | text = overriding_text 90 | final_message = '' 91 | typing_symbol = '▒' 92 | 93 | while final_message != overriding_text: 94 | try: 95 | message.edit(final_message + typing_symbol) 96 | sleep(sleep_time) 97 | final_message = final_message + text[0] 98 | text = text[1:] 99 | message.edit(final_message) 100 | sleep(sleep_time) 101 | except FloodWait as e: 102 | sleep(e.x) 103 | 104 | @client.on_message(filters.command(music_command, prefixes=command_prefixes) & filters.me) 105 | async def music_handler(_, message): 106 | try: 107 | cmd = message.command 108 | 109 | song_name = '' 110 | if len(cmd) > 1: 111 | song_name = ' '.join(cmd[1:]) 112 | elif message.reply_to_message and len(cmd) == 1: 113 | song_name = (message.reply_to_message.text or message.reply_to_message.caption) 114 | elif not message.reply_to_message and len(cmd) == 1: 115 | await message.edit('Напишите имя музыки') 116 | await asyncio.sleep(2) 117 | await message.delete() 118 | return 119 | 120 | song_results = await client.get_inline_bot_results('deezermusicbot', song_name) 121 | 122 | try: 123 | saved = await client.send_inline_bot_result( 124 | chat_id='me', 125 | query_id=song_results.query_id, 126 | result_id=song_results.results[0].id, 127 | hide_via=True, 128 | ) 129 | 130 | # Пересылаем сообщение в избранное, как новое 131 | saved = await client.get_messages('me', int(saved.updates[1].message.id)) 132 | reply_to = ( 133 | message.reply_to_message.message_id 134 | if message.reply_to_message 135 | else None 136 | ) 137 | await client.send_audio( 138 | chat_id=message.chat.id, 139 | audio=str(saved.audio.file_id), 140 | reply_to_message_id=reply_to, 141 | ) 142 | 143 | # Удаляем сообщение из избранного 144 | await client.delete_messages('me', saved.message_id) 145 | except TimeoutError: 146 | await message.edit('Ошибка, пожалуйста, попробуйте позже') 147 | await asyncio.sleep(2) 148 | await message.delete() 149 | except Exception as e: 150 | print(e) 151 | await message.edit('`Не удалось найти песню`') 152 | await asyncio.sleep(2) 153 | await message.delete() 154 | 155 | client.run() 156 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU LESSER GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright © 2007 Free Software Foundation, Inc.