Advertisement
OtsoSilver

Untitled

Jan 22nd, 2022
1,076
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 8.54 KB | None | 0 0
  1. import discord, random
  2. from credits import bot_token
  3. from discord.ext import commands
  4.  
  5. client = discord.Client()
  6. bot = commands.Bot(command_prefix='!')
  7. token = bot_token
  8. words = ['ЧЕЛОВЕК', 'ИГРОК', 'ГОРОД', 'ОШИБКА','ГЕНИЙ']
  9. members = []
  10. lives = 0
  11. running = 'none'
  12. current_player = 0
  13. word = []
  14. display_word = []
  15. original_word = ''
  16. kicked_player = ''
  17. vote_to_kick = 0
  18. vote_to_not_kick = 0
  19. voted_players = []
  20. def init():
  21.     global word, members,current_player,display_word,original_word,lives
  22.     word = []
  23.     display_word =[]
  24.     original_word = ''
  25.     current_player = 0
  26.     members= []
  27.     lives = 5
  28. @bot.command(name='start')
  29. async def start(ctx):
  30.     global running, members, lives
  31.     if running != 'none':
  32.         await  ctx.send('Игра уже началась! Чтобы завершить игру - введите команду !stop')
  33.     else:
  34.         running = 'joining'
  35.         members.append(ctx.author.name)
  36.         lives = 5
  37.         await ctx.send("Игра началась! Пишите !join, если хотите присоединиться.")
  38.  
  39. @bot.command(name= 'join')
  40. async def join(ctx):
  41.     global members
  42.     if running == 'none':
  43.         await ctx.send('Пока некуда присоединяться. Введите !start, чтобы начать игру.')
  44.     elif running == 'joining':
  45.         if ctx.author.name not in members:
  46.             members.append(ctx.author.name)
  47.             await ctx.send("Вы в игре!")
  48.         else:
  49.             await ctx.send("Вы уже в игре!")
  50.     else:
  51.         await ctx.send('Игра уже начата :(')
  52. @bot.command(name = 'play')
  53. async def play(ctx):
  54.     global running,word,display_word,original_word
  55.     if running == 'none':
  56.         await ctx.send('Игра пока не началась. Введите !start, чтобы начать')
  57.     elif running == 'joining':
  58.         running = 'running'
  59.         a = random.choice(words)
  60.         original_word = a
  61.         for i in a:
  62.             word.append(i)
  63.             display_word.append('-')
  64.         await ctx.send( 'Игра запущена! Загаданное слово: ' + ''.join(display_word) + ' Первым ходит ' + str(
  65.                 members[current_player]) + '. Введите команду !guess и букву.')
  66.     else:
  67.         await ctx.send('Игра запущена! Загаданное слово: ' + ''.join(display_word) + ' Первым ходит ' + str(
  68.             members[current_player]) + '. Введите команду !guess и букву.')
  69. @bot.command(name = 'guess')
  70. async def guess(ctx, letter):
  71.     global display_word,word,current_player,running,lives
  72.     letter = letter.upper()
  73.     if running == 'running':
  74.         if ctx.author.name in members:
  75.             if ctx.author.name in members[current_player]:
  76.                 if letter in word:
  77.                     while letter in word:
  78.                         display_word[word.index(letter)] = letter
  79.                         word[word.index(letter)] = "*"
  80.                     await ctx.send("Такая буква есть!")
  81.                     await ctx.send('Загаданное слово: ' + ' '.join(display_word) + '. Сейчас ходит ' + members[
  82.                         current_player] + '. Жизней осталось: ' + str(lives))
  83.                 else:
  84.                     lives -= 1
  85.                     await ctx.send("Такой буквы нет!")
  86.                     await ctx.send('Загаданное слово: ' + ' '.join(display_word) + '. Сейчас ходит ' + members[
  87.                         current_player] + '. Жизней осталось: ' + str(lives))
  88.                 if current_player == len(members) -1:
  89.                     current_player = 0
  90.                 else:
  91.                     current_player += 1
  92.             else:
  93.                 await ctx.send('Ошибка! Сейчас ходит ' + str(members[current_player]))
  94.         else:
  95.             await ctx.send('Ошибка! Вы не зарегистрировались :(')
  96.         if word.count("*") == len(word):
  97.             await ctx.send('Слово отгадано, игра окончена. Чтобы начать новую - введите !start.')
  98.             running = 'none'
  99.             init()
  100.         elif lives <= 0:
  101.             await ctx.send('Слово не отгадано, а жизни кончились. Игра окончена. Чтобы начать новую - введите !start.')
  102.             running = 'none'
  103.             init()
  104.         else:
  105.             await ctx.send('Загаданное слово: ' + ' '.join(display_word) + '. Сейчас ходит ' + members[
  106.                 current_player] + '. Жизней осталось: ' + str(lives))
  107.     elif running == 'none':
  108.         await ctx.send('Игра пока не началась. Введите !start, чтобы начать')
  109.         # Если игра в joining - сообщаем, что ждем пока все подключатся
  110.     else:
  111.         await ctx.send('Игра пока не запущена, ждем пока все подключатся. Чтобы начать игру - введите !play')
  112. @bot.command("kick")
  113. async def kick(ctx, name):
  114.     global kicked_player, members,running
  115.     if running == 'running':
  116.         if name in members:
  117.             await ctx.send('Голосование за кик запущено. Введите !vote, чтобы ваш голос был засчитан')
  118.             kicked_player = name
  119.             running = 'vote'
  120.         else:
  121.             await ctx.send('Такого игрока нет')
  122.     else:
  123.         await ctx.send('Игра не запущена')
  124. @bot.command(name = 'vote')
  125. async def vote(ctx, choice):
  126.     global running, vote_to_kick, kicked_player, voted_players, vote_to_not_kick
  127.     if running == 'vote':
  128.         if ctx.author.name != kicked_player:
  129.             if ctx.author.name not in voted_players:
  130.                 if choice == '+':
  131.                     vote_to_kick += 1
  132.                 elif choice == '-':
  133.                     vote_to_not_kick +=1
  134.                 await ctx.send(f'Ваш голос принят!Проголосовало {vote_to_kick} из {len(members)}, общий счет {vote_to_kick} vs {vote_to_not_kick}')
  135.             else:
  136.                 await ctx.send(f'Вы уже голосовали!')
  137.         else:
  138.             await ctx.send(f'Вы не можите голосовать против себя!')
  139.     else:
  140.         await ctx.send(f'Голосование не запущено, отправте !kick + имя игрока')
  141.  
  142.     if (len(members) - 1) % 2 == 0 and vote_to_not_kick + vote_to_kick == (len(members) - 1):
  143.         if vote_to_kick > (len(members)-1 / 2):
  144.             members.remove(kicked_player)
  145.             await ctx.send(f"Игрок {kicked_player} кикнут")
  146.             await ctx.send('Загаданное слово: ' + ' '.join(display_word) + '. Сейчас ходит ' + members[
  147.                 current_player] + '. Жизней осталось: ' + str(lives))
  148.             running = 'running'
  149.         elif vote_to_not_kick > (len(members)-1 / 2):
  150.             await ctx.send(f"Игрок {kicked_player} не кикнут")
  151.             await ctx.send('Загаданное слово: ' + ' '.join(display_word) + '. Сейчас ходит ' + members[
  152.                 current_player] + '. Жизней осталось: ' + str(lives))
  153.             running = 'running'
  154.         else:
  155.             await  ctx.send('Ничья! Никого не кикнули')
  156.             running = 'running'
  157.     if (len(members) - 1) % 2 !=0 and vote_to_not_kick + vote_to_kick == (len(members) - 1):
  158.         if vote_to_kick >= (len(members)-1 / 2):
  159.             members.remove(kicked_player)
  160.             await ctx.send(f"Игрок {kicked_player} кикнут")
  161.             await ctx.send('Загаданное слово: ' + ' '.join(display_word) + '. Сейчас ходит ' + members[
  162.                 current_player] + '. Жизней осталось: ' + str(lives))
  163.             running = 'running'
  164.         elif vote_to_not_kick >= (len(members)-1 / 2):
  165.             await ctx.send(f"Игрок {kicked_player} не кикнут")
  166.             await ctx.send('Загаданное слово: ' + ' '.join(display_word) + '. Сейчас ходит ' + members[
  167.                 current_player] + '. Жизней осталось: ' + str(lives))
  168.             running = 'running'
  169.  
  170.  
  171. bot.run(token)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement