Форум сайта python.su
Доброго времени суток, подскажите пожалуйста как подправить один скрипт. Объясните мне вот что:
Как в строке 75 изменить переменные ‘server_addr’ и ‘server_port’ на переменную ‘Host name’. Вот сам скрипт:
# -*- coding: utf-8 -*- import discord from discord.ext import commands import asyncio from tinydb import TinyDB, Query from classes.SourceQuery import SourceQuery from modules.WorkerFunctions import * Search = Query() bot = commands.Bot(command_prefix='/') @bot.event async def on_ready(): print('Logged in as {0}\n'.format(bot.user.name)) @bot.event async def on_command_error(error, ctx): await bot.send_message(ctx.message.channel, ":octagonal_sign: An error occurred:\n```{0}```".format(error)) @bot.command(pass_context=True, aliases=['q'], description="Queries a server and prints some if it’s info") async def query(context, addr: str, port=27015): if is_valid_ip(addr): oServer = SourceQuery(addr=addr, port=port, timeout=5.0); lServer = oServer.getInfo() if lServer is not False: try: lServer['Hostname'] = lServer['Hostname'].encode('iso-8859-1').decode('utf-8') except: pass; em = discord.Embed(title=":lock: "+lServer['Hostname'] if bool(lServer['Password']) else ":unlock: "+lServer['Hostname'], description='Map: {0}'.format(lServer['Map']), colour=0x10EE00) em.set_author(name='Query result ({0}):'.format(lServer['_engine_']), icon_url=bot.user.avatar_url) em.add_field(name="Players", value="{0}/{1}".format(lServer['Players'], lServer['MaxPlayers']), inline=True) em.add_field(name="VAC", value=("Enabled" if bool(lServer['Secure']) else "Disabled"), inline=True) em.add_field(name="Running on", value=lServer['OS'], inline=True) em.add_field(name="Mod", value=lServer['GameDesc'], inline=False) em.add_field(name="Type", value=lServer['Dedicated'], inline=True) em.add_field(name="Version", value=lServer['Version'], inline=True) await bot.send_message(context.message.channel, embed=em) else: await bot.say(":warning: The server doesn’t seem to be running from here.") else: await bot.say(":warning: You’ve provided malformed IP address.") @bot.command(pass_context=True, aliases=['a'], ignore_extra=True, description="Adds a server to your watchlist") async def add(context, addr: str, port=27015): if is_valid_ip(addr): db = TinyDB('./database.json') db.insert({ 'userid': context.message.author.id, 'server_addr': addr, 'server_port': port, }) db.close() await bot.say(":white_check_mark: Server added!") else: await bot.say(":warning: You’ve provided malformed IP address.") @bot.command(pass_context=True, aliases=['r'], ignore_extra=True, description="Removes a server from your watchlist") async def remove(context, addr: str, port=27015): if is_valid_ip(addr): db = TinyDB('./database.json') if db.search((Search.userid==context.message.author.id) & (Search.server_addr==addr) & (Search.server_port==port)) is not False: db.remove((Search.userid==context.message.author.id) & (Search.server_addr==addr) & (Search.server_port==port)) await bot.say(":white_check_mark: Server removed!") else: await bot.say(":negative_squared_cross_mark: There are no records listing this server.") db.close() else: await bot.say(":warning: You’ve provided malformed IP address.") @bot.command(pass_context=True, aliases=['c'], ignore_extra=True, description="Queries all servers from your watchlist") async def check(context): db = TinyDB('./database.json'); lServers = db.search(Search.userid==context.message.author.id); db.close() em = discord.Embed(title="Server query results", description="Total servers: {0}".format(len(lServers)), colour=0x5677E8) for i in range(len(lServers)): full_addr = lServers[i]['server_addr']+":"+str(lServers[i]['server_port']) em.add_field(name=full_addr, value=":white_check_mark: Responded" if is_alive(lServers[i]['server_addr'], lServers[i]['server_port']) else ":warning: Didn’t respond", inline=False) await bot.send_message(context.message.channel, embed=em) async def sendMessage(userid, listitem): user = discord.User(id=userid) await bot.send_message(user, "Some servers did not respond:\n```"+"\n".join(listitem)+"```") async def crontab(): await bot.wait_until_ready() while not bot.is_closed: db = TinyDB('./database.json'); lServers = db.all(); db.close() servers = ""; mList = {}; for i in range(len(lServers)): if (not is_alive(lServers[i]['server_addr'], lServers[i]['server_port'])) and (not is_alive(lServers[i]['server_addr'], lServers[i]['server_port'], 15)): mList.setdefault(lServers[i]['userid'],[]).extend([" * "+lServers[i]["server_addr"]+":"+str(lServers[i]["server_port"])]) else: continue; for key, value in mList.items(): await sendMessage(key, value) await asyncio.sleep(120) bot.loop.create_task(crontab()) bot.run('paste_your_token_here')
Офлайн
для начала, правильно скопипастить код, потому как в том, что вы выложили, 75-я строка выглядит вот так:
... await bot.wait_until_ready() ...
[code python][/code]
Отредактировано PEHDOM (Сен. 23, 2017 07:09:33)
Офлайн
PEHDOM
это проблема вставки кода в форум - пустые строки обрезаются
Офлайн
Вот если что оригинал кода - https://yadi.sk/i/qvQGQv5Q3NALQq
Офлайн
fanatikvoice а не можете залить куданить типа гуглдрайва? а то в Украине проблема с доступом к яндексам-вконтактам-однокласникам. А ТОР почемуто не хочет скачивать.
JOHN_16 согласен, признаю свою ошибку, но всеже в коде слишком много строк с одержащих ‘server_addr’ и ‘server_port’ чтобы однозначно найти нужную..
[code python][/code]
Офлайн
PEHDOM
Да, конечно https://drive.google.com/open?id=0B-YsuXeaXeasZ0hlU3B6SE0tVW8
ПС
Если я правильно понял, то, что бы поменять в 75й то скорее надо переписывать tynydb (бд от которой работает скрипт).
Офлайн
fanatikvoiceП идее да.Я так понял имееться ввиду эта строчка?
Если я правильно понял, то, что бы поменять в 75й то скорее надо переписывать tynydb (бд от которой работает скрипт).
full_addr = lServers[i]['server_addr']+":"+str(lServers[i]['server_port'])
async def add(context, addr: str, port=27015): if is_valid_ip(addr): db = TinyDB('./database.json') db.insert({ 'userid': context.message.author.id, 'server_addr': addr, 'server_port': port, }) db.close()
[code python][/code]
Отредактировано PEHDOM (Сен. 27, 2017 14:41:13)
Офлайн
PEHDOM
Если честно, то Питон я вообще не знаю (мне не преподавали этот язык), и как добавить - я немного не понимаю.
Офлайн
fanatikvoiceэто плохо, не люблю писать код который не могу проверить, но самое простое решение будет выглядеть както так:
Если честно, то Питон я вообще не знаю (мне не преподавали этот язык), и как добавить - я немного не понимаю.
..... ..... @bot.command(pass_context=True, aliases=['c'], ignore_extra=True, description="Queries all servers from your watchlist") async def check(context): db = TinyDB('./database.json'); lServers = db.search(Search.userid==context.message.author.id); db.close() em = discord.Embed(title="Server query results", description="Total servers: {0}".format(len(lServers)), colour=0x5677E8) for i in range(len(lServers)): oServer = SourceQuery(addr=lServers[i]['server_addr'], port=lServers[i]['server_port'], timeout=5.0); lServer = oServer.getInfo() if lServer is not False: try: full_addr = lServer['Hostname'].encode('iso-8859-1').decode('utf-8') except: full_addr = lServers[i]['server_addr']+":"+str(lServers[i]['server_port']) else: full_addr = lServers[i]['server_addr']+":"+str(lServers[i]['server_port']) em.add_field(name=full_addr, value=":white_check_mark: Responded" if is_alive(lServers[i]['server_addr'], lServers[i]['server_port']) else ":warning: Didn’t respond", inline=False) await bot.send_message(context.message.channel, embed=em) ..... .....
..... async def add(context, addr: str, port=27015): if is_valid_ip(addr): db = TinyDB('./database.json') oServer = SourceQuery(addr=addr, port=port, timeout=5.0); lServer = oServer.getInfo() if lServer is not False: host_name = lServer['Hostname'].encode('iso-8859-1').decode('utf-8') else: host_name = None db.insert({ 'userid': context.message.author.id, 'server_addr': addr, 'server_port': port, 'host_name': host_name, }) ..... async def check(context): db = TinyDB('./database.json'); lServers = db.search(Search.userid==context.message.author.id); db.close() em = discord.Embed(title="Server query results", description="Total servers: {0}".format(len(lServers)), colour=0x5677E8) for i in range(len(lServers)): if lServers[i]['host_name']: full_addr = lServers[i]['host_name'] else: full_addr = lServers[i]['server_addr']+":"+str(lServers[i]['server_port']) ......
[code python][/code]
Отредактировано PEHDOM (Сен. 29, 2017 14:29:27)
Офлайн