|
Dein letzter Besuch war: Heute um 23:25 Uhr
Advertisement
[R]Internet/Weblink im Chat, anklickbar. Python 2.7
Discussion on [R]Internet/Weblink im Chat, anklickbar. Python 2.7 within the Metin2 PServer Guides & Strategies forum part of the Metin2 Private Server category.
13.07.2016, 05:08
|
#16
|
elite*gold: 0
Registriert seit: May 2013
Beiträge: 605
Erhaltene Thanks: 580
|
Zitat:
Zitat von .Raicon
Bau das ganze System noch aus und denk an einen sinnvollen "Filter", dann ist das ganze vil. doch ganz praktikabel.
|
Bringt mir nicht das weiter auszubauen, da wir es für unseren Server eh nicht benutzen.
Ich hab mit den oberen nur getextet damit die anderen/User das verbessern, und es in einer bessere Richtung editieren können.
|
|
|
13.07.2016, 13:35
|
#17
|
elite*gold: 15
Registriert seit: Mar 2009
Beiträge: 295
Erhaltene Thanks: 150
|
Hallo Leute,
mal ne kleine Erweiterung.
* Nutzt das Ingame Webfenster
* Alle Links gehen https, http und www
* Funktioniert mit allen Python Versionen
* Weblinks per PM, Chat, Rufchat, Gildenchat,... versendbar
* Daten aus den Anhang des Erstellers werden nicht benötigt
uichat.py unter def __SendChatPacket(self, text, type):
wisper.py unter def SendWhisper(self):
folgendes ergänzen:
Code:
color = "FF1CC2"
text = re.sub("(^| )(http[s]?://.+?)( |$)", "\\1|cff%s|Hweblink:\\2|h\\2|h|r\\3" % (color,), text)
text = re.sub("(^| )(www\\..+?)( |$)", "\\1|cff%s|Hweblink:\\2|h\\2|h|r\\3" % (color,), text)
text = text.replace("https://", "")
text = text.replace("http://", "")
und in der interfacemodule
Code:
def MakeHyperlinkTooltip(self, hyperlink):
tokens = hyperlink.split(":")
if tokens and len(tokens):
type = tokens[0]
if "item" == type:
self.hyperlinkItemTooltip.SetHyperlinkItem(tokens)
ersetzen durch
Code:
def MakeHyperlinkTooltip(self, hyperlink):
tokens = hyperlink.split(":")
if tokens and len(tokens):
type = tokens[0]
if "item" == type:
self.hyperlinkItemTooltip.SetHyperlinkItem(tokens)
elif "Link" == type:
self.OpenWebWindow(str(tokens[1]))
Viel Spass damit.
MFG Lordechen.
|
|
|
13.07.2016, 14:57
|
#18
|
elite*gold: 0
Registriert seit: Apr 2015
Beiträge: 428
Erhaltene Thanks: 361
|
Zitat:
Zitat von Lordechen
Hallo Leute,
mal ne kleine Erweiterung.
* Nutzt das Ingame Webfenster
* Alle Links gehen https, http und www
* Funktioniert mit allen Python Versionen
* Weblinks per PM, Chat, Rufchat, Gildenchat,... versendbar
* Daten aus den Anhang des Erstellers werden nicht benötigt
uichat.py unter def __SendChatPacket(self, text, type):
wisper.py unter def SendWhisper(self):
folgendes ergänzen:
Code:
color = "FF1CC2"
text = re.sub("(^| )([url]https://.+?)([/url] |$)", "\\1|cff%s|HLink:\\2|h\\2|h|r\\3" % (color,), text)
text = re.sub("(^| )([url]http://.+?)([/url] |$)", "\\1|cff%s|HLink:\\2|h\\2|h|r\\3" % (color,), text)
text = re.sub("(^| )(www\\..+?)( |$)", "\\1|cff%s|HLink:\\2|h\\2|h|r\\3" % (color,), text)
text = text.replace("https://", "")
text = text.replace("http://", "")
und in der interfacemodule
Code:
def MakeHyperlinkTooltip(self, hyperlink):
tokens = hyperlink.split(":")
if tokens and len(tokens):
type = tokens[0]
if "item" == type:
self.hyperlinkItemTooltip.SetHyperlinkItem(tokens)
ersetzen durch
Code:
def MakeHyperlinkTooltip(self, hyperlink):
tokens = hyperlink.split(":")
if tokens and len(tokens):
type = tokens[0]
if "item" == type:
self.hyperlinkItemTooltip.SetHyperlinkItem(tokens)
elif "Link" == type:
self.OpenWebWindow(str(tokens[1]))
Viel Spass damit.
MFG Lordechen.
|
Warum teilst du das ganze in drei re.sub-Prozesse ein?
Das Vorhaben
Code:
[EckigeKlammer]url[EckigeKlammer]
besagt, dass du entweder den Buchstaben u, r oder l erwartest.
Das Vorhaben
Code:
[EckigeKlammer]/url[EckigeKlammer]
besagt, dass du entweder das Zeichen / oder einen Buchstaben wie u, r, l erwartest. Wenn du wirklich tags machen willst, gibt's dazu flags:
PHP-Code:
re.sub(flags=re.IGNORECASE) re.sub(flags=re.I)
Das Vorhaben
Erwartet 1 x-beliebiges Zeichen oder mehr oder garnichts. Also das gleiche wie:
Das
und das
ist einfach nur
Wieso entfernst du danach die beiden Protokolle, dies ist wichtig und essenziell, bei einem Link
Code:
text = text.replace("https://", "")
text = text.replace("http://", "")
Was ergibt das für einen Sinn?
PHP-Code:
if tokens and len(tokens):
Oder das?
Wieso typisiert man was, was bereits eine Zeichenkette ist?
|
|
|
13.07.2016, 15:19
|
#19
|
elite*gold: 15
Registriert seit: Mar 2009
Beiträge: 295
Erhaltene Thanks: 150
|
Bedank dich bei epvp das [url] stammt nicht von mir hat sich irgend wie rein gemogelt und wenn du meinst die Protokolle seien wichtig dann probiers aus dann wirst auch merken wiso sie gelöscht werden.
Im übrichen war das ne 2 Minuten arbeit mehr zeit opfer ich für epvp nicht wirklich und es funktioniert.
|
|
|
13.07.2016, 21:56
|
#20
|
elite*gold: 0
Registriert seit: Jun 2016
Beiträge: 7
Erhaltene Thanks: 4
|
Zitat:
Zitat von #Metho
Erwartet 1 x-beliebiges Zeichen oder mehr oder garnichts. Also das gleiche wie:
|
nicht ganz richtig.
Das ? steht in diesem Fall einfach für "non-greedy", das bedeutet, dass die Bedigung ".+" solange gematcht wird, bis die nachfolgende Bedingung zutrifft. Mit optional hat das an dieser Stelle nichts zu tun.
Beispiel:
Code:
import re
text = "Hello World! Irgendein weiterer Text!"
pattern = "(.+)\\!"
print(re.match(pattern, text).group(0))
--> Hello World! Irgendein weiterer Text!
Code:
import re
text = "Hello World! Irgendein weiterer Text!"
pattern = "(.+?)\\!"
print(re.match(pattern, text).group(0))
--> Hello World!
Beim 2. (mit non-greedy operator (?)) wird alles gematcht, bis die nächste Bedingung (das einzelne Zeichen "!") zutrifft.
Beim 1. wird solange gematcht, bis die die letzte Möglichkeit der nächsten Bedingung erreicht ist.
|
|
|
14.07.2016, 07:24
|
#21
|
elite*gold: 0
Registriert seit: Jul 2015
Beiträge: 1.389
Erhaltene Thanks: 566
|
Danke für dein Release
|
|
|
25.07.2016, 10:46
|
#22
|
elite*gold: 0
Registriert seit: Aug 2013
Beiträge: 4
Erhaltene Thanks: 0
|
syserr
Code:
0725 11:44:33147 :: Traceback (most recent call last):
0725 11:44:33147 :: File "uiChat.py", line 403, in OnIMEReturn
0725 11:44:33147 :: File "uiChat.py", line 305, in __SendTalkingChatPacket
0725 11:44:33147 :: File "uiChat.py", line 227, in __SendChatPacket
0725 11:44:33147 :: TypeError
0725 11:44:33147 :: :
0725 11:44:33147 :: 'in <string>' requires character as left operand
0725 11:44:33147 ::
|
|
|
25.07.2016, 13:51
|
#23
|
elite*gold: 15
Registriert seit: Mar 2009
Beiträge: 295
Erhaltene Thanks: 150
|
Wann lernt ihr es mal?
Ohne die datei zu sehen kann euch keiner helfen.
Also bite uichat.py anhängen
|
|
|
29.07.2016, 07:22
|
#24
|
elite*gold: 0
Registriert seit: May 2014
Beiträge: 292
Erhaltene Thanks: 519
|
Habe ich gesucht danke.
|
|
|
22.10.2016, 10:22
|
#25
|
elite*gold: 50
Registriert seit: May 2011
Beiträge: 270
Erhaltene Thanks: 991
|
Much sexier! 
(ew. need to add an exception into insultcheck for the urls  )
Can handle (  | ftp.* |  |  | file://*)
uiChat.py
Code:
def GetLinks(self, string, ret):
import re
links = re.findall("(?:(?:https?|ftp|file):\/\/|www\.|ftp\.)(?:\([-A-Z0-9+&@#/%=~_|$?!:,.]*\)|[-A-Z0-9+&@#/%=~_|$?!:,.])*(?:\([-A-Z0-9+&@#/%=~_|$?!:,.]*\)|[A-Z0-9+&@#/%=~_|$])", string, re.I)
if not (hasattr(ret, "clear") and hasattr(ret, "update")):
return False
ret.clear()
map(lambda link: (ret.update({link:"|cFF00C0FC|Hweb:%s|h[%s]|h|r"%(re.sub("://", "w<?", link), link)})) if link else None, links)
return len(links) > 0
Code:
def __SendChatPacket(self, text, type):
# if text[0] == '/':
# if ENABLE_CHAT_COMMAND or constInfo.CONSOLE_ENABLE:
# pass
# else:
# return
if net.IsChatInsultIn(text):
chat.AppendChat(chat.CHAT_TYPE_INFO, locale.CHAT_INSULT_STRING)
else:
links={}
if self.GetLinks(text, links):
for k,v in links.iteritems():
text = text.replace(k, v)
net.SendChatPacket(text, type)
interfaceModule.py
Code:
def MakeHyperlinkTooltip(self, hyperlink):
tokens = hyperlink.split(":")
if tokens and len(tokens):
type = tokens[0]
if "item" == type:
self.hyperlinkItemTooltip.SetHyperlinkItem(tokens)
elif "web" == type:
app.ExecuteShell(tokens[1].replace("w<?", "://"))
PythonApplicationModule.cpp
Code:
#include <Shellapi.h>
///////
PyObject* appExecuteShell(PyObject* poSelf, PyObject* poArgs)
{
char* szPageLink;
if (!PyTuple_GetString(poArgs, 0, &szPageLink))
return Py_BuildException();
int iExit;
if (!PyTuple_GetInteger(poArgs, 1, &iExit))
iExit=0;
ShellExecute(0, "open", szPageLink, 0, 0, SW_SHOWNORMAL);
if (iExit)
PostQuitMessage(0);
return Py_BuildNone();
}
///////
{ "ExecuteShell", appExecuteShell, METH_VARARGS },
|
|
|
04.09.2017, 00:34
|
#26
|
elite*gold: 0
Registriert seit: Jun 2011
Beiträge: 63
Erhaltene Thanks: 5
|
This gives me syntax error:
Code:
def GetLinks(self, string, ret):
import re
links = re.findall("(?:(?:https?|ftp|file):\/\/|www\.|ftp\.)(?:\([-A-Z0-9+&@#/%=~_|$?!:,.]*\)|[-A-Z0-9+&@#/%=~_|$?!:,.])*(?:\([-A-Z0-9+&@#/%=~_|$?!:,.]*\)|[A-Z0-9+&@#/%=~_|$])", string, re.I)
if not (hasattr(ret, "clear") and hasattr(ret, "update")):
return False
ret.clear()
map(lambda link: (ret.update({link:"|cFF00C0FC|Hweb:%s|h[%s]|h|r"%(re.sub("://", "w<?", link), link)})) if link else None, links)
return len(links) > 0
This line in red exactly
Code:
map(lambda link: (ret.update({link:"|cFF00C0FC|Hweb:%s|h[%s]|h|r"%(re.sub("://", "w<?", link), link)})) if link else None, links)
TABS are ok
|
|
|
13.12.2017, 23:45
|
#27
|
elite*gold: 0
Registriert seit: May 2012
Beiträge: 18
Erhaltene Thanks: 3
|
Zitat:
Zitat von xP3NG3Rx
Much sexier! 
(ew. need to add an exception into insultcheck for the urls  )
Can handle (  | ftp.* |  |  | file://*)
uiChat.py
Code:
def GetLinks(self, string, ret):
import re
links = re.findall("(?:(?:https?|ftp|file):\/\/|www\.|ftp\.)(?:\([-A-Z0-9+&@#/%=~_|$?!:,.]*\)|[-A-Z0-9+&@#/%=~_|$?!:,.])*(?:\([-A-Z0-9+&@#/%=~_|$?!:,.]*\)|[A-Z0-9+&@#/%=~_|$])", string, re.I)
if not (hasattr(ret, "clear") and hasattr(ret, "update")):
return False
ret.clear()
map(lambda link: (ret.update({link:"|cFF00C0FC|Hweb:%s|h[%s]|h|r"%(re.sub("://", "w<?", link), link)})) if link else None, links)
return len(links) > 0
Code:
def __SendChatPacket(self, text, type):
# if text[0] == '/':
# if ENABLE_CHAT_COMMAND or constInfo.CONSOLE_ENABLE:
# pass
# else:
# return
if net.IsChatInsultIn(text):
chat.AppendChat(chat.CHAT_TYPE_INFO, locale.CHAT_INSULT_STRING)
else:
links={}
if self.GetLinks(text, links):
for k,v in links.iteritems():
text = text.replace(k, v)
net.SendChatPacket(text, type)
interfaceModule.py
Code:
def MakeHyperlinkTooltip(self, hyperlink):
tokens = hyperlink.split(":")
if tokens and len(tokens):
type = tokens[0]
if "item" == type:
self.hyperlinkItemTooltip.SetHyperlinkItem(tokens)
elif "web" == type:
app.ExecuteShell(tokens[1].replace("w<?", "://"))
PythonApplicationModule.cpp
Code:
#include <Shellapi.h>
///////
PyObject* appExecuteShell(PyObject* poSelf, PyObject* poArgs)
{
char* szPageLink;
if (!PyTuple_GetString(poArgs, 0, &szPageLink))
return Py_BuildException();
int iExit;
if (!PyTuple_GetInteger(poArgs, 1, &iExit))
iExit=0;
ShellExecute(0, "open", szPageLink, 0, 0, SW_SHOWNORMAL);
if (iExit)
PostQuitMessage(0);
return Py_BuildNone();
}
///////
{ "ExecuteShell", appExecuteShell, METH_VARARGS },
|
The map don't work for me
Code:
map(lambda link: (ret.update({link:"|cFF00C0FC|Hweb:%s|h[%s]|h|r"%(re.sub("://", "w<?", link), link)})) if link else None, links)
Code:
networkModule.py(line:208) SetSelectCharacterPhase
system.py(line:130) __pack_import
system.py(line:110) _process_result
introSelect.py(line:30) ?
system.py(line:130) __pack_import
system.py(line:110) _process_result
interfaceModule.py(line:14) ?
system.py(line:130) __pack_import
networkModule.SetSelectCharacterPhase - exceptions.SyntaxError:invalid syntax (line 1186)
1213 23:39:13195 :: ============================================================================================================
1213 23:39:13195 :: Abort!!!!
|
|
|
14.12.2017, 14:38
|
#28
|
elite*gold: 399
Registriert seit: Sep 2011
Beiträge: 5.323
Erhaltene Thanks: 3.937
|
Zitat:
Zitat von Martasovi2
The map don't work for me
Code:
map(lambda link: (ret.update({link:"|cFF00C0FC|Hweb:%s|h[%s]|h|r"%(re.sub("://", "w<?", link), link)})) if link else None, links)
Code:
networkModule.py(line:208) SetSelectCharacterPhase
system.py(line:130) __pack_import
system.py(line:110) _process_result
introSelect.py(line:30) ?
system.py(line:130) __pack_import
system.py(line:110) _process_result
interfaceModule.py(line:14) ?
system.py(line:130) __pack_import
networkModule.SetSelectCharacterPhase - exceptions.SyntaxError:invalid syntax (line 1186)
1213 23:39:13195 :: ============================================================================================================
1213 23:39:13195 :: Abort!!!!
|
map() comes with Python 2.7
|
|
|
15.12.2017, 00:47
|
#29
|
elite*gold: 50
Registriert seit: May 2011
Beiträge: 270
Erhaltene Thanks: 991
|
Nope the map is available in python2.2 too, maybe the problem is the pure one-line if statement, that is not compatible w/ it. Anyway it's syntax error and not attribute or nameerror so, show a picture with whitespaces. Here it is my mine with a little modification about allowing pages but that one is commented out 'coz I'm not using it.
|
|
|
18.12.2017, 19:39
|
#30
|
elite*gold: 0
Registriert seit: Jul 2009
Beiträge: 2.471
Erhaltene Thanks: 5.622
|
Well actually you could use  for the url parsing that way it should be way easier to also do whitelisting/blacklisting
|
|
|
 |
|
Ähnliche Themen
|
[PYTHON] Minimal twitch chat client
29.01.2016 - Coding Snippets - 0 Antworten
Just a very minimalistic twitch irc client in python (great to gather statistics about the chat)
https://gist.github.com/0Skynet/833dd97620d44c345 520
Everything is explained with comments.
Feel free to suggest improvements.
import socket
# twitch irc host
|
[Python] Chat oder Zustand auslesen?
13.10.2014 - Metin2 Private Server - 6 Antworten
Hey...
ich bin gerade einwenig mit Python und Metin2 am ausprobieren.
Nun bin ich an einem Punkt angekommen, wo ich nicht weiterkommen :(
Ich möchte gerne überprüfen, ob mein Char mit einer Aktion fertig ist z.B. angeln. Gibt es eine Funktion den Chat auszulesen oder eine Funktion um zu überprüfen, ob der Char nur rumsteht ohne (in dem Fall jetzt) zu angeln?
Mfg
|
AVM FritzBox - Passwort durch WEBLINK rausfinden
03.07.2013 - Technical Support - 4 Antworten
Hallo
Ich habe mein Passwort für meine FritzBox 3131 vergessen,
nun wollte ich fragen ob man es durch einen weblink (fritz.box/...../) anzeigen lassen kann?
Mfg.
Ich
|
Python - Chat Help
01.02.2013 - Metin2 Private Server - 0 Antworten
Hey leute und zwar sofort zur frage ich habe einen clienten mit einem Chat Bug...Der anderen erhält die nachricht nicht also der net.SendChatPacket funktioniert irgendwie nicht kp was da falsch ist bin neu in python...naja wie kriege ich das hin das der andere meine nachricht erhält?
Das Steht in der uiwhisper.py
import ui
import net
import chat
import player
import app
import locale
import ime
|
Spoiler nicht anklickbar! - Grafik einfügen etc. nicht anklickbar!
08.12.2009 - Main - 3 Antworten
Hallo!
Ich kann leider keine Spoiler mehr anklicken,oder kann auch während ich schreibe das "dicke B" , "Schräge I , "Unterstrichene U" etc. nicht anklicken! Ich kann auch garnichts mehr anklicken während ich schreibe.
Das einzigste was ich benutze,ist ein Proxy,da ich von EPVP gebannt wurde,und es mit einem Head-Admin regeln muss.
Kann ich solange dagegen was machen?
Oder muss ich warten,bis ich vielleicht wieder unentbannt werde?
Gruß,
Tigerrace - aka. TerrorPanda
___
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:26 Uhr.
|
|