Skip to content
 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

from telethon import TelegramClient, events from telethon.tl.types import MessageEntityMentionName import asyncio from collections import defaultdict import random, time, sys SESSION_NAME = 'karan' API_ID = API_HASH =

ALL_WORDS = {} def load_words(chat_id):     ALL_WORDS[chat_id] = defaultdict(list)         for line in f.readlines():             word = line[:-1].lower()             if only_alpha(word):                 ALL_WORDS[chat_id][line[0]].append(word)

def only_alpha(word):     for c in word:         if not c.isalpha():             return False     return True

def contains(word, letters):     for l in letters:         if l in word:             return True     return False

def find_words(chat_id, start_letter, min_length, spam=None, required=None, forbidden=None, ban_endings=None):     if not chat_id in ALL_WORDS:         load_words(chat_id)

    words = []     for word in ALL_WORDS[chat_id][start_letter]:         if len(word) >= int(min_length):             if not required or contains(word, required):                 if not forbidden or not contains(word, forbidden):                     if not spam or word[-1] == spam:                         if not ban_endings or not word[-1] in ban_endings:                             words.append(word)

    if len(words) == 0:         if spam:             return find_words(chat_id, start_letter, min_length, None, required, forbidden, ban_endings)         elif ban_endings:             return find_words(chat_id, start_letter, min_length, spam, required, forbidden, None)

    return words

def choose_word(words):     if len(words) > 0:         return random.choice(words)     else:         return ''

def remove_word(chat_id, word):     word = word.lower()     if chat_id in ALL_WORDS:         if word in ALL_WORDS[chat_id][word[0]]:             ALL_WORDS[chat_id][word[0]].remove(word)

spam_letter = None ban_endings = None

delay_time = None

async def main():     async with TelegramClient(SESSION_NAME, API_ID, API_HASH) as client:         user_id = (await client.get_me()).id         @client.on(events.NewMessage(from_users='@on9wordchainbot', pattern='Game is starting...'))         async def handler(event):             load_words(event.message.chat_id)

        @client.on(events.NewMessage(from_users='@on9wordchainbot', pattern='Turn: '))         async def handler(event):             text = event.message.message             entities = event.message.entities             chat_id = event.message.chat_id             if entities[0].user_id == user_id:                 line = text.split('\n')[1].split(' ')                 required = None                 forbidden = None

                if ', include' in text:                     required = [c[0].lower() for c in line[7:-5]]

                if 'exclude' in text:                     forbidden = [c[0].lower() for c in line[7:-6]]

                start_letter = line[5][0].lower()                 min_length = line[-2]

                matching = find_words(chat_id, start_letter, min_length, spam_letter, required, forbidden, ban_endings)                 chosen = choose_word(matching)                 global delay_time                 if delay_time == None:                     time.sleep(random.randint(5,8))                 else:                     time.sleep(int(delay_time))                 await client.send_message(event.message.peer_id, chosen)

        @client.on(events.NewMessage(from_users='@on9wordchainbot', pattern='.+ is accepted'))         async def handler(event):             remove_word(event.message.chat_id, event.message.message.split(' ')[0])

        @client.on(events.NewMessage(from_users='@on9wordchainbot', pattern='The first word is'))         async def handler(event):             remove_word(event.message.chat_id, event.message.message.split('\n')[0].split(' ')[4][:-1]) @client.on(events.NewMessage(from_users='me', pattern='spam .'))         async def handler(event):             global spam_letter             spam_letter = event.message.message[5]             await event.reply(f'Spam {spam_letter} ending')

        @client.on(events.NewMessage(from_users='me', pattern='no spam'))         async def handler(event):             global spam_letter             spam_letter = None             await event.reply(f'No spam ending')

        @client.on(events.NewMessage(from_users='me', pattern='ban .+'))         async def handler(event):             global ban_endings             ban_endings = event.message.message[4:].replace(' ', '')             await event.reply(f'Ban {" ".join(ban_endings)} ending{"s" if len(ban_endings) > 1 else ""}')

        @client.on(events.NewMessage(from_users='me', pattern='no ban'))         async def handler(event):             global ban_endings             ban_endings = None             await event.reply(f'No banned endings')

        @client.on(events.NewMessage(from_users='me', pattern='no ban'))         async def handler(event):             global ban_endings             ban_endings = None             await event.reply(f'No banned endings')

        @client.on(events.NewMessage(from_users='me', pattern='time'))         async def handler(event):             global delay_time             print(event.message.message)             try:                 delay_time = event.message.message[4:]                 if delay_time[0] == '':                     await event.reply('Error')                 else:                        await event.reply('The time has been changed')             except:                 await event.reply('Error')

        await client.run_until_disconnected()

asyncio.run(main())

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages